Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 53
0.00% covered (danger)
0.00%
0 / 2
CRAP
n/a
0 / 0
clientes_saldos_grid
0.00% covered (danger)
0.00%
0 / 41
0.00% covered (danger)
0.00%
0 / 1
132
actualiza_clientes_saldos
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2
3function clientes_saldos_grid($andWhere='',$orderby='',&$sumasGridServer=array())
4{
5    //$arr=array();
6    global $vx_debug;
7    global $gIAParametros;
8
9    $orderbysplit = explode("/**#LIMIT#**/", $orderby);
10    $limit = $limitsql = array_key_exists(1, $orderbysplit) ? $orderbysplit[1] : '';
11
12    if(strlen($limit))
13    {
14        $limit = vx_trim(str_replace("LIMIT","",$limit));
15        $limitsplit = explode(",",$limit);
16    }
17
18    /*if($sumasGridServer['iaGridInicial'] == 'NO')
19    {
20        $orderby = $orderbysplit[0];
21    }*/
22
23    if(!empty($andWhere))
24    {
25        if(strpos($andWhere, " AND (") === 0)
26            $andWhere = substr($andWhere,5);
27
28        $andWhere = str_replace("clientes_saldos_cat.",'',$andWhere);
29
30        /** Aqui reemplazo los campos ambiguos **/
31        $cyTN_arr = camposyTablasNormalizadas('clientes_saldos');
32        $patterns = array_keys($cyTN_arr[0]['clientes_saldos']);
33        $replacements = array_values($cyTN_arr[0]['clientes_saldos']);
34
35        foreach($patterns as $k=>$v)
36            $patterns[$k] = "/\\b$v\\b/";
37
38        $andWhere = preg_replace($patterns,$replacements,$andWhere);
39        //$orderby = preg_replace($patterns,$replacements,$orderby);
40
41        /** ** ** **/
42        //$andWhere = " $andWhere AND ";
43
44
45        //ia_query("INSERT INTO dime (script,dime) VALUES ('sql',".strit($tmp."-".$andWhere).")");
46    }
47
48    //VCA 01-03-2021 Leemos el tipo de cambio y lo actualizamos en clientes_saldos_cat. Los campos de saldo se calculan automáticamente.
49    $tc = obten_tc_live();
50    $tc_usado = $tc->tc;
51    ia_query("UPDATE cliente SET tipo_cambio='$tc_usado'");
52
53
54    $sql = "SELECT cliente_id, nombre,
55         tienda_id,
56        SUM(saldo_cheques_pesos) AS saldo_cheques_pesos, 
57        SUM(saldo_pagares_usd) AS saldo_pagares_usd, 
58        SUM(saldo_vales_pesos) AS saldo_vales_pesos, 
59        SUM(saldo_vales_usd) AS saldo_vales_usd, 
60        MAX(ultima_compra) AS ultima_compra, 
61        MAX(ultimo_pago) AS ultimo_pago, 
62        SUM(saldo_cheques_usd) AS saldo_cheques_usd, 
63        SUM(saldo_pagares_pesos) AS saldo_pagares_pesos, 
64        SUM(cuantos_cheques) AS cuantos_cheques, 
65        SUM(cuantos_pagares) AS cuantos_pagares, 
66        SUM(cuantos_vales) AS cuantos_vales,
67        MIN(cheque_mas_antiguo) AS cheque_mas_antiguo, 
68        MIN(pagare_mas_antiguo) AS pagare_mas_antiguo, 
69        MIN(vale_mas_antiguo) AS vale_mas_antiguo,
70           '$tc_usado' as tipo_cambio,
71        SUM(saldo_compras_pesos) AS saldo_compras_pesos, 
72        SUM(saldo_compras_usd) AS saldo_compras_usd,
73        SUM(cuantos_compras) AS cuantos_compras,
74        MIN(compra_mas_antigua) AS compra_mas_antigua
75       /** ##get_select()## **/  
76        FROM clientes_saldos_cat ";
77
78    $andWhere = empty($andWhere) ? "" : " WHERE " . $andWhere;
79    $andWhere.= " GROUP BY cliente_id ";
80
81    $fin_arr=ia_sqlArrayIndx($sql.$andWhere.$orderby);
82
83
84    // Para el cache //
85    $sql1 = array();
86//    ia_query("CREATE TABLE IF NOT EXISTS clientes_saldos_live LIKE clientes_saldos_cat");
87//    ia_query("TRUNCATE TABLE clientes_saldos_live");
88    $sql1[] = "CREATE TABLE IF NOT EXISTS clientes_saldos_live LIKE clientes_saldos_cat";
89    $sql1[] = "TRUNCATE TABLE clientes_saldos_live";
90    // ia_query("ALTER TABLE cuentat_mov_live ENGINE = MEMORY");
91    //ia_query("ALTER TABLE cuentat_mov_tmp DROP INDEX consul_movs");
92    foreach($fin_arr as $k => $cm)
93    {
94        $sql1[] = ia_insert("clientes_saldos_live", $cm, [],'', true);
95        //$sql1[$k+1] = str_replace("clientes_saldos_cat", "clientes_saldos_live", $sql1[$k+1]);
96    }
97    //ia_query("ALTER TABLE cuentat_mov_tmp ADD INDEX consul_movs (banco_cuenta_mov_link_id, fecha, alta_db, contra_mov_id, app_origen, cuentaT_id, tienda_id) USING BTREE;");
98
99    ia_transaction($sql1);
100
101
102    if(strlen($limit)) {
103
104        $sumasGridServer['rows'] = $limitsplit[1];
105        $sumasGridServer['total_records'] = sizeof($fin_arr);
106        $fin_arr = array_splice($fin_arr, $limitsplit[0], $limitsplit[1]);
107    }
108    else{
109        $sumasGridServer['rows'] = $limit;
110        $sumasGridServer['total_records'] = sizeof($fin_arr);
111    }
112
113    ia_query("INSERT INTO clientes_saldos_live(cliente_id, saldo_cliente_usd, saldo_cliente, saldo_cliente_moneda_id_calc)
114SELECT cliente_id, SUM(saldo_cliente_usd) AS saldo_cliente_usd, SUM(saldo_cliente) AS saldo_cliente, MAX(saldo_cliente_moneda_id_calc) AS saldo_cliente_moneda_id_calc FROM (SELECT cliente_id, SUM((`saldo_cheques_pesos` / $tc_usado) + `saldo_cheques_usd` + (`saldo_pagares_pesos` / $tc_usado) + `saldo_pagares_usd` - (`saldo_vales_pesos` / $tc_usado) - `saldo_vales_usd`) AS saldo_cliente_usd, 
115       if((SUM(`saldo_cheques_pesos`) > 0 OR  SUM(`saldo_pagares_pesos`) > 0 OR SUM(`saldo_vales_pesos`) > 0) AND (SUM(`saldo_cheques_usd`) > 0 OR SUM(`saldo_pagares_usd`) > 0 or SUM(`saldo_vales_usd`) > 0),SUM((`saldo_cheques_pesos` / $tc_usado) + `saldo_cheques_usd` + (`saldo_pagares_pesos` / $tc_usado) + `saldo_pagares_usd` - (`saldo_vales_pesos` / $tc_usado) - `saldo_vales_usd`),if(SUM(`saldo_cheques_pesos`) > 0 or SUM(`saldo_pagares_pesos`) > 0 or SUM(`saldo_vales_pesos`) > 0,SUM(COALESCE(`saldo_cheques_pesos`,0) + COALESCE(`saldo_pagares_pesos`,0) - COALESCE(`saldo_vales_pesos`,0)),SUM(COALESCE(`saldo_cheques_usd`,0) + COALESCE(`saldo_pagares_usd`,0) - COALESCE(`saldo_vales_usd`,0)))) AS saldo_cliente, if((SUM(`saldo_cheques_pesos`) > 0 or SUM(`saldo_pagares_pesos`) > 0 or SUM(`saldo_vales_pesos`) > 0 or SUM(`saldo_compras_pesos`) > 0) and (SUM(`saldo_cheques_usd`) > 0 or SUM(`saldo_pagares_usd`) > 0 or SUM(`saldo_vales_usd` > 0) or SUM(`saldo_compras_usd`) > 0),3,if(SUM(`saldo_cheques_pesos`) > 0 or SUM(`saldo_pagares_pesos`) > 0 or SUM(`saldo_vales_pesos`) > 0 or SUM(`saldo_compras_pesos`) > 0,1,2)) AS saldo_cliente_moneda_id_calc
116FROM clientes_saldos_cat GROUP BY cliente_id) AS lol GROUP BY cliente_id
117ON DUPLICATE KEY UPDATE saldo_cliente_usd = VALUES(saldo_cliente_usd), saldo_cliente = VALUES(saldo_cliente), saldo_cliente_moneda_id_calc = VALUES(saldo_cliente_moneda_id_calc);");
118    //$sumasGridServer['iaarr_md5_solosumas'] = "cuentat_mov_tmp";
119
120    if($vx_debug)
121    {
122        ia_errores_a_dime();
123
124        //$time_elapsed_secs = microtime(true) - $start;
125        //echo "time_elapsed_secs: $time_elapsed_secs";
126        global $gWebDir;
127        $myFile = "C:\\wamp\\www\\$gWebDir\\backoffice\\txt\\clientes_saldos_grid.txt";
128
129        $fh = fopen($myFile, 'w') or die("can't open file");
130
131        $bleh = "\r\n\r\nfin_arr: $sql $andWhere $orderby";
132
133        fwrite($fh, $bleh);
134        fclose($fh);
135    }
136    //ia_errores_a_dime();
137    return $fin_arr;
138}
139
140/** VCA regenera el saldo de los clientes */
141function actualiza_clientes_saldos($cliente_id = null){
142
143    $sql_cliente_id = "SELECT cliente_id FROM cliente WHERE vale='Active'" . (empty($cliente_id) ? "" : " AND cliente_id = ".strit($cliente_id));
144
145    $arr_cliente_id = ia_sqlArray($sql_cliente_id, "cliente_id");
146
147    $sql = ""; //array();
148//    $sql[] = "SET @TRIGGER_DISABLED = 0;";
149
150    foreach ($arr_cliente_id as $k => $v) {
151//        $sql = array();
152//        $sql[] = "SET @TRIGGER_DISABLED = 0;";
153        $myLock = new ProcessLock();
154        $s = md5("actualiza_cliente_resumen_$k");
155        $gotLock = $myLock->aquire($s);
156
157        if(!$gotLock)
158            continue;
159
160        $sql = "CALL actualiza_cliente_resumen('$k');";
161        //echo "<pre>" . print_r($sql, true) . "</pre>";
162//        ia_transaction($sql);
163        ia_query($sql);
164        $myLock->release();
165    }
166    //ia_transaction($sql);
167
168
169    return true;
170}