EXCEPTION

Call to undefined method Cheques::getMigration()

/var/www/cobrancas.gazinsemijoias.com.br/Controllers/Cheques.php 504

1 <?php
2
3
/**
4 * Controller de Cheques
5 *
6 * @package Controllers
7 * @author Allan/Postali
8 */
9
10
use Navigation\JsonTransaction;
11use 
Dynamic\Dynamic;
12use 
Navigation\Page;
13
14use 
Gazin\Cheques\CMS as ChequesCMS;
15use 
Gazin\Cheques\Model as ChequesModel;
16
17class 
Cheques extends Gazin\Gazin
18
{
19    use 
FileTrait;
20
21    
/**
22     * Construtor da página
23     *
24     * @param Page|null $page
25     */
26    
function __construct(Page $page null)
27    {
28        
parent::__construct();
29        if (
$page) {
30            
$name "Cheques";
31            
$model 'Gazin\Cheques\Model';
32            
$class = new \ReflectionClass($model);
33            
$constants $class->getReflectionConstants();
34            
$variables[$name] = [];
35
36            foreach (
$constants as $constant) {
37                if (!
$constant->isPublic())
38                    continue;
39
40                
$variables[$name][$constant->getName()] = $constant->getValue();
41            }
42
43            
$page->addTag('script''Header''let metadata = ' json_encode($this->queryChequeMeta()->select()));
44            
$page->addTag('script''Header''let variables = ' json_encode($variables));
45        }
46    }
47
48    
/**
49     * Validação para as funções desse controller
50     *
51     * @param JsonTransaction $transaction
52     * @return void
53     */
54    
protected function _validate(JsonTransaction $transaction)
55    {
56        
//Garantir que a função esteja sendo chamada pela aplicação, e não externamente
57        
$transaction->transactionSecurity();
58
59        
//Exige acesso à listagem
60        
$transaction->requireAdminPermission(ChequesCMS::MAIN);
61    }
62
63    
/**
64     * Resgata a query filtrada para o Controller
65     * 
66     * @param  array $filters Filtros
67     * 
68     * @return Icecream\Icecream
69     */
70    
protected function _queryFilter($filters$append = ['metadata''customer'], $order = [])
71    {
72        
$query $this->queryCheque($append);
73
74        
// Filtros
75        // Filtrando pelo nome
76        
if (!empty($filters['name']))
77            
$query $this->getCustomersByName(trim($filters['name']), $query);
78
79        
// Filtrando pelo documento
80        
if (!empty($filters['document'])) {
81
82            
$cheques $this->queryCheque()->columns(['id_customer as id_customer_cheque']);
83
84                
$chequeMeta $this->queryChequeMetaData()
85                    ->
leftJoin($cheques,'id','&&.id_cheque')
86                    ->
columns(["cheques_data.value as documento",'&&.id_cheque','id_customer_cheque'],'true')
87                    
88                    ->
where('cheques_data.id_meta',8);
89
90                
$query->leftJoin($chequeMeta,'id_cheque','id');
91                
92                
$query->where('documento'$filters['document'])->groupBy('id_cheque');
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114            
// $customers = $this->_queryCustomer()
115            //     ->columns(['&&.id'], true)
116            //     ->search('customer.document', $filters['document']);
117
118            // $query->whereIn('&&.id_customer', $customers);
119        
}
120        
// Filtrando pelo status
121        
if (!empty($filters['status']))
122            
$query->whereIn('&&.status'$filters['status']);
123
124        if (!empty(
$filters['amount']))
125            
$query->where('&&.amount'$this->currencyToNumber($filters['amount']));
126
127        
//Filtrar por data
128        
if (!empty($filters['date_from'])) {
129            
//Normalizar data inicial
130            
$dateFrom $this->convertFromDate($filters['date_from']);
131
132            
//Se a data final não foi enviada, utilizar hoje
133            
$dateTo = !empty($filters['date_to']) ? $this->convertFromDate($filters['date_to']) : date('Y-m-d');
134
135            
//Se for por data de inscrição
136            
if ($filters['type_filter'] == 'subscribe') {
137                
$query->whereBetween('DATE_FORMAT(&&.date_create, "%Y-%m-%d")'$dateFrom$dateTo);
138            }
139
140            if (
$filters['type_filter'] == 'emissao') {
141
142                
$cheques $this->queryCheque()->columns(['id_customer as id_customer_cheque']);
143
144                
$chequeMeta $this->queryChequeMetaData()
145                    ->
leftJoin($cheques,'id','&&.id_cheque')
146                    ->
columns(["STR_TO_DATE(cheques_data.value,'%d/%m/%Y') as data_emissao",'&&.id_cheque','id_customer_cheque'],'true')
147                    
148                    ->
where('cheques_data.id_meta',5);
149
150                
$query->leftJoin($chequeMeta,'id_cheque','id');
151                
152                
$query->whereBetween('data_emissao'$dateFrom$dateTo)->groupBy('id_cheque');
153            }
154
155            
//Se for por data do status
156            
else if ($filters['type_filter'] == 'status') {
157                
//Verificar se um status foi selecionado
158                
if (empty($filters['status']))
159                    return new 
Fault('Selecione um status para o filtro''gazin_leads_status_not_selected');
160
161                
//Buscar status que ocorreram na data selecionada
162                
$history $this->queryChequeHistory()
163                    ->
columns('&&.id_cheque'true)
164                    ->
whereNotEmpty('&&.id_cheque')
165                    ->
whereBetween('DATE_FORMAT(&&.date_create, "%Y-%m-%d")'$dateFrom$dateTo)
166                    ->
whereIn('&&.status'$filters['status']);
167
168                
//Buscar apenas esses leads
169                
$query->whereIn('&&.id'$history);
170
171                
//Zerar status para não ocorrer refiltragem
172                
$filters['status'] = [];
173            }
174        }
175
176        
// Filtrando pelo customer
177        
if (!empty($filters['customer']))
178            
$query->where('&&.id_customer'$filters['customer']);
179
180        if(!empty(
$order)) {
181            if(
$order[0] == 'data_emissão') {
182                
$tableEmissao $this->queryChequeMetaData()
183                    ->
where('cheques_data.id_meta'5);
184
185                
$query->leftJoin($tableEmissao$tableEmissao->col('id_cheque'), '&&.id')
186                    ->
orderBy($tableEmissao->col('value'), $order[1]);
187            }
188            else 
189                
$query->orderBy($order[0], $order[1]);
190        }
191
192        return 
$query->whereNull('&&.date_delete');
193    }
194
195    
/**
196     * Resgata a listagem de cheques
197     * 
198     * @return array
199     */
200    
public function list(Dynamic $dynamicJsonTransaction $transaction)
201    {
202        
$this->_validate($transaction);
203        
204        
$order $dynamic->getOrder();
205
206        
$params $dynamic->getParams();
207        unset(
$params['order']);
208        
209        
$dynamic->setParams($params);
210        
211        
$source $this->_queryFilter($dynamic->getFilters(), ['metadata''customer'], $order);
212
213        return 
$dynamic->getDynamic($source);
214    }
215
216    
/**
217     * Listagem de totais (dashboard)
218     *
219     * @return array (Dynamic)
220     */
221    
public function totals($dataJsonTransaction $transaction)
222    {
223        
//Validar permissões
224        
$this->_validate($transaction);
225
226        
//Resgata tabela filtrada
227        
$query $this->_queryFilter($data);
228
229        return 
$this->totalsChequesSummary($query);
230    }
231
232    
/**
233     * Exporta a listagem de cheques
234     * 
235     * @return null (Binário)
236     */
237    
public function export($dataJsonTransaction $transaction)
238    {
239        
$transaction->requireAdminPermission(ChequesCMS::MAIN);
240
241        
$result $this->_queryFilter($data, ['metadata''customer'])
242            ->
select();
243
244        
$data = [];
245        
$totals = [
246            
"paid_amount" => 0,
247            
'due_amount' => 0
248        
];
249
250        foreach (
$result as $key => $cheque) {
251            
$status ChequesModel::status($cheque['status']);
252            
// Recupera o customer
253            
$customer $cheque['customer'][0];
254
255            
$data[$key] = [
256                
'ID' => $cheque['id'],
257                
'Nome' => $customer['name'],
258                
'Documento' => $customer['document'],
259                
'E-mail' => $customer['email'],
260                
'Telefone' => $customer['phone'],
261                
'Origem' => $cheque['source'],
262                
'Valor' => $this->numberToCurrency($cheque['amount']),
263                
'Status atual' => isset($status['title']) ? $status['title'] : '?',
264                
'Último contato realizado' => empty($cheque['date_last_contact']) ? '-' $this->convertToDateTime($cheque['date_last_contact']),
265                
'Data do cadastro' => $this->convertToDateTime($cheque['date_create']),
266            ];
267
268
269            foreach (
$cheque['metadata'] as $campo) {
270
271                
$data[$key][$campo['title']] = $campo['value'];
272                
273            }
274
275
276            if (
$cheque['status'] == "PAY")
277                
$totals["paid_amount"] += $cheque['amount'];
278            else
279                
$totals["due_amount"] += $cheque['amount'];
280            
281
282        }
283
284        
$data[] = ['''''''''''''''''''','','','','','','','','','','''Total Pago''Total Devido''Saldo'];
285        
$data[] = [
286            
'''''''''''''''''''','',''''''''''''''''''
287            
$this->numberToCurrency($totals['paid_amount']),
288            
$this->numberToCurrency($totals["due_amount"]),
289            
$this->numberToCurrency($totals['paid_amount'] - $totals["due_amount"])
290        ];
291
292        
$titles = [
293                
'ID',
294                
'Nome' ,
295                
'Documento' ,
296                
'E-mail' ,
297                
'Telefone' ,
298                
'Origem' ,
299                
'Valor',
300                
'Status atual' ,
301                
'Último contato realizado' ,
302                
'Data do cadastro',
303                
'Nome cliente final',
304                
"Documento cliente final",
305                
"Banco",
306                
"Agência",
307                
"Conta",
308                
"Número do Cheque",
309                
"Data de Emissão",
310                
"Bom Para",
311                
"Emitente",
312                
"Documento do Emitente",
313
314        ];
315
316    
317    
318        
$transaction->exportXLSX('Listagem de cheques ' date('d-m-Y H.i.s'), $data$titles);
319    }
320
321    
/**
322     * Resgatar a listagem de status
323     * 
324     * @return array
325     */
326    
public function getStatusList($filterByScope false)
327    {
328        
$list ChequesModel::status();
329
330        return 
$list;
331    }
332
333    public function 
getReturnReasonsList($filterByScope false)
334    {
335        
$list ChequesModel::returnReason();
336
337        return 
$list;
338    }
339
340    
/**
341     * Resgata a listagem das origens
342     *
343     * @return array
344     */
345    
public function getSourcesList()
346    {
347        
$list ChequesModel::source();
348        return 
$list;
349    }
350
351    
/**
352     * Resgata todos os dados de um cheque
353     * 
354     * @return array
355     */
356    
public function retrieve($dataJsonTransaction $transaction)
357    {
358        
$this->_validate($transaction);
359
360        
$cheque $this->queryCheque(true)
361            ->
where('&&.id'$data['id'])
362            ->
selectFirst();
363
364        if (empty(
$cheque))
365            
$transaction->outputError('Registro não encontrado!'404);
366
367        return 
$cheque;
368    }
369
370    public 
$saveChequeContact_map = [
371        
'status' => [
372            
'name' => 'Status',
373            
'mandatory' => true,
374        ],
375        
'note' => [
376            
'name' => 'Observação',
377            
'replaceBefore' => 'removeHTML'
378        
]
379    ];
380
381    
/**
382     * Salvar um contato realizado
383     * 
384     * @return int|string
385     */
386    
public function saveChequeContact($dataJsonTransaction $transaction)
387    {
388        
$this->_validate($transaction);
389
390        
$this->saveChequeContact_map['status']['inArray'] = array_keys(ChequesModel::status());
391
392        
// Validando dados
393        
$transaction->validateRequest($this->saveChequeContact_map$data);
394
395        
//Se foi enviado um arquivo, salvá-lo
396        
if (!empty($data['file'])) {
397            
$uploads $this->saveUploadFiles($this->getPath(ChequesModel::HISTORY_FILES_FOLDER), $data['file'], falsetrue);
398
399            if (
$uploads instanceof Fault)
400                return 
$uploads;
401
402            if (
is_array($uploads)) {
403                for (
$i 0$i count($uploads); $i++)
404                    
$data['images'][] = [
405                        
"id_cheque" => null,
406                        
"file" => $uploads[$i]
407                    ];
408            } else {
409                
$data['images'][] = [
410                    
"id_cheque" => null,
411                    
"file" => $uploads
412                
];
413            }
414        }
415
416        return 
$this->saveContact($data);
417    }
418
419    public 
$save_map = [
420        
'id_customer' => [
421            
"name" => "Cliente",
422            
'mandatory' => true
423        
],
424        
"amount" => [
425            
'name' => 'Valor',
426            
'mandatory' => true
427        
],
428        
"source" => [
429            
"name" => "Origem",
430            
"mandatory" => true
431        
]
432    ];
433
434    
/**
435     * Salvar um cheque
436     * 
437     * @return int|string
438     */
439    
public function save($dataJsonTransaction $transaction)
440    {
441        
// Validando segurança
442        
$this->_validate($transaction);
443
444
445
446        
// Validando dados principais
447        
$transaction->validateRequest($this->save_map$data);
448
449        if (!isset(
$data['metadata'][0])) {
450
451            
$data['metadata'] = [];
452        }
453
454
455            
// Validando metadados
456            
foreach ($data['metadata'] as &$meta) {
457                if (
$meta['required'] && empty($meta['value']))
458                    return 
$transaction->outputError("O campo '" $meta['title'] . "' é obrigatório!");
459            }
460
461        
// Normalizando o amount
462        
$data['amount'] = empty($data['amount']) ? $this->currencyToNumber($data['amount']);
463
464        
//Se foi enviado um arquivo, salvá-lo
465        
if (!empty($data['file'])) {
466
467            
$uploads $this->saveUploadFiles($this->getPath(ChequesModel::CHEQUE_FILES_FOLDER), $data['file'], falsetrue);
468
469            if (
$uploads instanceof Fault)
470                return 
$uploads;
471
472            if (
is_array($uploads))
473                for (
$i 0$i count($uploads); $i++)
474                    
$data['images'][] = [
475                        
"id_cheque" => null,
476                        
"file" => $uploads[$i]
477                    ];
478            else
479                
$data['images'][] = [
480                    
"id_cheque" => null,
481                    
"file" => $uploads
482                
];
483        }
484
485        return 
$this->saveCheque($data);
486    }
487
488    
/**
489     * Remove um cheque
490     * 
491     * @return null
492     */
493    
public function remove($dataJsonTransaction $transaction)
494    {
495        
$this->_validate($transaction);
496
497        return 
$this->removeCheque($data['id']);
498    }
499
500
501
502    public function 
migration_cheques(){
503
504        return $this->getMigration();

505    }
506}
507

Error trace

You can see detailed error trace in the console.

System trace

You can see detailed error trace in the console.