diff --git a/REST/functions.php b/REST/functions.php
index e31ed8d6..790a59ed 100644
--- a/REST/functions.php
+++ b/REST/functions.php
@@ -507,9 +507,9 @@ ORDER BY i.register_date DESC;
$result = exportToCSVFile($res, $fullpath, $headers, ';', true);
if ($result['ok']) {
- $report[] = "OK → {$result['path']} (wiersze: {$result['rows']})
";
+ $report[] = "OK → {$result['path']} (wiersze: {$result['rows']})".PHP_EOL;
} else {
- $report[] = "ERR → {$result['path']} ({$result['error']})
";
+ $report[] = "ERR → {$result['path']} ({$result['error']})".PHP_EOL;;
}
}
diff --git a/modules/EcmPaymentStates/summaryNew.php b/modules/EcmPaymentStates/summaryNew.php
index 059345fe..fc25494a 100644
--- a/modules/EcmPaymentStates/summaryNew.php
+++ b/modules/EcmPaymentStates/summaryNew.php
@@ -1,739 +1,431 @@
query('RESET QUERY CACHE;');
$db->query('FLUSH QUERY CACHE');
-if($_REQUEST['submit']){
-if ($_REQUEST['account_type'])
- $account_type = $_REQUEST['account_type'];
-else
- $account_type = '';
-if($_REQUEST['account_type']=='a'){
- $account_type = '';
-}
-if ($_REQUEST['saldo_type'])
- $saldo_type = $_REQUEST['saldo_type'];
-else
- $saldo_type = '';
-if ($_REQUEST['type2'])
- $and = " and account_type2='".$_REQUEST['type2']."'";
-if($saldo_type!=''){
- $type="t.settled!='1' and";
-} else {
- $type='';
+// Initialize variables with defaults
+$account_type = '';
+$saldo_type = '';
+$and = '';
+$type = '';
+$data = array();
+$sum = array();
+$idToPdf = '';
+
+if (!empty($_REQUEST['submit'])) {
+ // Sanitize and validate inputs
+ $account_type = isset($_REQUEST['account_type']) ? $db->quote($_REQUEST['account_type']) : '';
+ if ($account_type == 'a') {
+ $account_type = '';
+ }
+
+ $saldo_type = isset($_REQUEST['saldo_type']) ? $db->quote($_REQUEST['saldo_type']) : '';
+ $type2 = isset($_REQUEST['type2']) ? $db->quote($_REQUEST['type2']) : '';
+ $user_id = isset($_REQUEST['user_id']) ? $db->quote($_REQUEST['user_id']) : '';
+
+ // Build WHERE conditions safely
+ $conditions = array("t.deleted='0'");
+
+ if ($saldo_type != '') {
+ $conditions[] = "t.settled!='1'";
+ }
+
+ if (!empty($type2)) {
+ $conditions[] = "account_type2='" . $type2 . "'";
+ }
+
+ if (!empty($user_id)) {
+ $conditions[] = "a.assigned_user_id='" . $user_id . "'";
+ }
+
+ // Build account type condition
+ $account_condition = '';
+ if ($account_type != '') {
+ $account_condition = " AND (a.account_type='rs' OR a.account_type = '" . $account_type . "')";
+ }
+
+ // Optimized query - get all needed data in one go
+ $query = "SELECT DISTINCT
+ t.parent_id,
+ a.index_dbf,
+ a.name as account_name,
+ a.currency_id,
+ a.id as account_id
+ FROM ecmtransactions as t
+ INNER JOIN accounts AS a ON t.parent_id = a.id
+ WHERE " . implode(' AND ', $conditions) . $account_condition . "
+ ORDER BY a.index_dbf";
+
+ $clients = $db->query($query);
+
+ // Cache currency objects to avoid repeated database calls
+ $currency_cache = array();
+
+ while ($c = $db->fetchByAssoc($clients)) {
+ // Skip invalid accounts
+ if (empty($c['parent_id'])) continue;
+
+ $row = array();
+ $row['id'] = $c['parent_id'];
+ $row['name'] = $c['account_name'];
+ $row['index'] = $c['index_dbf'];
+
+ // Use cached currency data
+ $currency_id = !empty($c['currency_id']) ? $c['currency_id'] : 'PLN';
+ if (!isset($currency_cache[$currency_id])) {
+ $currency_obj = new Currency();
+ $currency_obj->retrieve($currency_id);
+ $currency_cache[$currency_id] = $currency_obj->name;
+ }
+ $row['currency_id'] = $currency_cache[$currency_id];
+
+ // Get financial data (these functions need optimization too)
+ $row['unsettled'] = getData($c['parent_id'], 0);
+ $row['not_overdue'] = getData($c['parent_id'], 7);
+ $row['overdue'] = getData($c['parent_id'], 1);
+ $row['2'] = getData2($c['parent_id'], 2);
+ $row['3'] = getData2($c['parent_id'], 3);
+ $row['4'] = getData2($c['parent_id'], 4);
+ $row['5'] = getData2($c['parent_id'], 5);
+ $row['6'] = getData2($c['parent_id'], 6);
+ $row['saldo'] = getData($c['parent_id'], 8);
+ $row['today_saldo'] = 0;
+
+ // Apply saldo filters
+ if ($saldo_type == 'plus' && $row['saldo'] <= 0) continue;
+ if ($saldo_type == 'minus' && $row['saldo'] >= 0) continue;
+ if ($saldo_type == 'zero' && $row['saldo'] != 0) continue;
+ if ($saldo_type == '' && $row['saldo'] == 0) continue;
+
+ $idToPdf .= $row['id'] . ',';
+
+ // Accumulate sums by currency
+ if (!isset($sum[$currency_id])) {
+ $sum[$currency_id] = array(
+ 'unsettled' => 0,
+ 'not_overdue' => 0,
+ 'overdue' => 0,
+ '2' => 0,
+ '3' => 0,
+ '4' => 0,
+ '5' => 0,
+ '6' => 0,
+ 'saldo' => 0,
+ 'today_saldo' => 0,
+ 'currency_id' => $currency_cache[$currency_id]
+ );
+ }
+
+ $sum[$currency_id]['unsettled'] += $row['unsettled'];
+ $sum[$currency_id]['not_overdue'] += $row['not_overdue'];
+ $sum[$currency_id]['overdue'] += $row['overdue'];
+ $sum[$currency_id]['2'] += $row['2'];
+ $sum[$currency_id]['3'] += $row['3'];
+ $sum[$currency_id]['4'] += $row['4'];
+ $sum[$currency_id]['5'] += $row['5'];
+ $sum[$currency_id]['6'] += $row['6'];
+ $sum[$currency_id]['saldo'] += $row['saldo'];
+ $sum[$currency_id]['today_saldo'] += $row['today_saldo'];
+
+ $data[] = $row;
+ }
}
-if ($_REQUEST['user_id']!=''){
- $and.= " and a.assigned_user_id='".$_REQUEST['user_id']."'";
-} else {
- $type='';
+// Get user list with single query
+$user_list = array();
+$users_query = "SELECT id, first_name, last_name FROM users WHERE deleted=0";
+$users_result = $db->query($users_query);
+while ($user_data = $db->fetchByAssoc($users_result)) {
+ $user_list[$user_data['id']] = trim($user_data['first_name'] . ' ' . $user_data['last_name']);
}
-// get list of accounts
-if ($account_type == '')
- $clients = $db->query ( "SELECT distinct t.parent_id,a.index_dbf as index_dbf FROM ecmtransactions as t
- INNER JOIN accounts AS a
-ON t.parent_id = a.id
- WHERE ".$type." t.deleted='0' ".$and." ORDER BY a.index_dbf" );
-else
- $clients = $db->query ( "
- SELECT distinct t.parent_id, a.index_dbf as index_dbf FROM ecmtransactions AS t
-INNER JOIN accounts AS a
-ON t.parent_id = a.id
-WHERE
-".$type."
-t.deleted='0' AND (a.account_type='rs' OR
-a.account_type = '$account_type') ".$and."
-ORDER BY a.index_dbf
- " );
-// arrays to handle data for SMARTY
-$data = array ();
-$sum = array ();
-$idToPdf='';
+// Initialize Smarty template
+$ss = new Sugar_Smarty();
+global $mod_strings, $app_list_strings;
-while ( $c = $db->fetchByAssoc ( $clients ) ) {
-
- $row = array ();
- $row['id'] = $c['parent_id'];
-
- $tt= $db->fetchByAssoc ( $db->query ( "SELECT name FROM accounts WHERE id='" . $c ['parent_id'] . "'" ) );
- $row ['name'] =$tt['name'];
- $a=New Account();
- $a->retrieve($c['parent_id']);
- $a->currency_id;
- if($a->id=='')continue;
- $row ['unsettled'] = getData ( $c ['parent_id'], 0 );
- $row ['not_overdue'] = getData ( $c ['parent_id'], 7 );
- $row ['overdue'] = getData ( $c ['parent_id'], 1 );
- $row ['2'] =getData2 ( $c ['parent_id'], 2 ); // 1..30
- $row ['3'] = getData2 ( $c ['parent_id'], 3 ); // 31..60
- $row ['4'] = getData2 ( $c ['parent_id'], 4 ); // 61..90
- $row ['5'] = getData2 ( $c ['parent_id'], 5 ); // 91..180
- $row ['6'] = getData2 ( $c ['parent_id'], 6 ); // 180..
- $row['index']=$c['index_dbf'];
- $row ['saldo'] = getData ( $c ['parent_id'], 8 );
- $row ['today_saldo'] = 0; // getData2 ( $c ['parent_id'],9,$_REQUEST['saldo_date_val'] );
- $c= new Currency();
- if($a->currency_id=='')$a->currency_id='PLN';
- $c->retrieve($a->currency_id);
- $row ['currency_id']=$c->name;
-
-
- if($saldo_type=='plus' && !($row ['saldo']>0))continue;
- if($saldo_type=='minus' && $row ['saldo']>=0 )continue;
- if($saldo_type=='zero' && !$row ['saldo']==0 )continue;
- if($saldo_type=='' && $row ['saldo']==0 )continue;
- $idToPdf.=$row['id'].',';
- $sum [$a->currency_id]['unsettled'] += $row ['unsettled'];
- $sum [$a->currency_id]['not_overdue'] += $row ['not_overdue'];
- $sum [$a->currency_id]['overdue'] += $row ['overdue'];
- $sum [$a->currency_id]['2'] += $row ['2']; // 1..30
- $sum [$a->currency_id]['3'] += $row ['3']; // 31..60
- $sum [$a->currency_id]['4'] += $row ['4']; // 61..90
- $sum [$a->currency_id]['5'] += $row ['5']; // 91..180
- $sum [$a->currency_id]['6'] += $row ['6']; // 180..
- $sum [$a->currency_id]['saldo'] += $row ['saldo'];
- $sum [$a->currency_id]['today_saldo'] += $row ['today_saldo'];
- $sum [$a->currency_id]['currency_id']=$c->name;
- $data [] = $row;
-}
-
-
-// sort
-$sort = array ();
-
-
-}
-$user_list=array();
-
-$z=$db->query("select id,first_name,last_name from users where deleted=0");
-while($dane=$db->fetchByAssoc($z)){
- $user_list[$dane['id']]=$dane['first_name'].' '.$dane['last_name'];
-}
-// create & execute smarty
-$ss = new Sugar_Smarty ();
-global $mod_strings,$app_list_strings;
-$ss->assign ( "MOD", $mod_strings );
-$ss->assign ( "DATA", $data );
-$ss->assign ( "SUM", $sum );
-$ss->assign ( "SORT", $sort );
+$ss->assign("MOD", $mod_strings);
+$ss->assign("DATA", $data);
+$ss->assign("SUM", $sum);
+$ss->assign("SORT", array()); // Initialize empty sort array
$ss->assign("account_type", $account_type);
-$app_list_strings['account_type_dom']['a']='Wszystkie';
+
+$app_list_strings['account_type_dom']['a'] = 'Wszystkie';
$ss->assign("account_type_list", $app_list_strings['account_type_dom']);
-$ss->assign("saldo_type",$saldo_type);
-$ss->assign("saldo_date_val",$_REQUEST['saldo_date_val']);
-$ss->assign("idToPdf",$idToPdf);
-$ss->assign("type",$_REQUEST['type2']);
-$ss->assign("type2",$app_list_strings['account_type2_dom']);
-$ss->assign("user_id",$_REQUEST['user_id']);
-$ss->assign("users",$user_list);
+$ss->assign("saldo_type", $saldo_type);
+$ss->assign("saldo_date_val", isset($_REQUEST['saldo_date_val']) ? $_REQUEST['saldo_date_val'] : '');
+$ss->assign("idToPdf", rtrim($idToPdf, ','));
+$ss->assign("type", isset($_REQUEST['type2']) ? $_REQUEST['type2'] : '');
+$ss->assign("type2", $app_list_strings['account_type2_dom']);
+$ss->assign("user_id", isset($_REQUEST['user_id']) ? $_REQUEST['user_id'] : '');
+$ss->assign("users", $user_list);
-echo $ss->display ( 'modules/EcmPaymentStates/tpls/summary1.tpl' );
+echo $ss->display('modules/EcmPaymentStates/tpls/summary1.tpl');
-// helper functions
-function getData2($id, $expired,$dates = null) {
- $db = $GLOBALS ['db'];
+// OPTIMIZED HELPER FUNCTIONS
+
+function getData2($id, $expired, $dates = null) {
+ static $cache = array();
+ $cache_key = $id . '_' . $expired . '_' . $dates;
+
+ if (isset($cache[$cache_key])) {
+ return $cache[$cache_key];
+ }
+
+ $db = $GLOBALS['db'];
+ $today = date('Y-m-d');
+
+ // Prepare date conditions based on expired type
+ $date_conditions = getDateConditions($expired, $dates);
+ if ($date_conditions === false) {
+ return 0;
+ }
+
+ $settled_condition = ($expired == 9) ? "" : "t.settled!='1' AND";
+
+ // Single optimized query for both transaction types
+ $query = "
+ SELECT
+ t.type,
+ SUM(t.value) as total_value,
+ SUM(COALESCE(settled_amounts.settled_amount, 0)) as total_settled
+ FROM ecmtransactions AS t
+ LEFT JOIN (
+ SELECT
+ CASE
+ WHEN rel.ecmtransaction_a_id = ? THEN rel.ecmtransaction_b_id
+ ELSE rel.ecmtransaction_a_id
+ END as related_id,
+ SUM(ABS(rel.value)) as settled_amount
+ FROM ecmtransactions_rel rel
+ INNER JOIN ecmtransactions t2 ON (
+ t2.id = CASE
+ WHEN rel.ecmtransaction_a_id = ? THEN rel.ecmtransaction_b_id
+ ELSE rel.ecmtransaction_a_id
+ END
+ )
+ WHERE (rel.ecmtransaction_a_id = ? OR rel.ecmtransaction_b_id = ?)
+ AND t2.deleted = '0'
+ " . ($expired == 9 && $dates ? "AND t2.payment_date <= '" . date('Y-m-d', strtotime($dates)) . "'" : "") . "
+ GROUP BY related_id
+ ) settled_amounts ON settled_amounts.related_id = t.id
+ WHERE t.parent_id = ?
+ AND t.deleted = '0'
+ AND " . $settled_condition . "
+ " . $date_conditions . "
+ GROUP BY t.type
+ ";
+
+ $result = $db->query($query, array($id, $id, $id, $id, $id));
+
+ $type0_total = 0; $type0_settled = 0;
+ $type1_total = 0; $type1_settled = 0;
+
+ while ($row = $db->fetchByAssoc($result)) {
+ if ($row['type'] == '0') {
+ $type0_total = $row['total_value'];
+ $type0_settled = $row['total_settled'];
+ } else {
+ $type1_total = $row['total_value'];
+ $type1_settled = $row['total_settled'];
+ }
+ }
+
+ $result_value = $type1_settled - $type0_total + $type1_total - $type0_settled;
+ $cache[$cache_key] = $result_value;
+
+ return $result_value;
+}
+
+function getDateConditions($expired, $dates = null) {
+ $today = date('Y-m-d');
- $saldo = false;
- $settled = " t.settled!='1' AND ";
switch ($expired) {
- case 1 :
- $date = new DateTime ( date ( "Y-m-d" ) );
- $d = $date->format ( 'Y-m-d' );
- $payment_date = " payment_date <= '$d'";
- break;
- case 2 :
- $date_to = new DateTime ( date ( "Y-m-d" ) );
- $d_t = $date_to->format ( 'Y-m-d' );
- $date_from = new DateTime ( date ( "Y-m-d" ) );
- $date_from->modify ( '-30 days' );
- $d_f = $date_from->format ( 'Y-m-d' );
- $payment_date = " payment_date >= '$d_f' AND payment_date < '$d_t'";
- break;
- case 3 :
- $date_to = new DateTime ( date ( "Y-m-d" ) );
- $date_to->modify ( '-31 days' );
- $d_t = $date_to->format ( 'Y-m-d' );
- $date_from = new DateTime ( date ( "Y-m-d" ) );
- $date_from->modify ( '-60 days' );
- $d_f = $date_from->format ( 'Y-m-d' );
- $payment_date = " payment_date >= '$d_f' AND payment_date <= '$d_t'";
- break;
- case 4 :
- $date_to = new DateTime ( date ( "Y-m-d" ) );
- $date_to->modify ( '-61 days' );
- $d_t = $date_to->format ( 'Y-m-d' );
- $date_from = new DateTime ( date ( "Y-m-d" ) );
- $date_from->modify ( '-90 days' );
- $d_f = $date_from->format ( 'Y-m-d' );
- $payment_date = " payment_date >= '$d_f' AND payment_date <= '$d_t'";
- break;
- case 5 :
- $date_to = new DateTime ( date ( "Y-m-d" ) );
- $date_to->modify ( '-91 days' );
- $d_t = $date_to->format ( 'Y-m-d' );
- $date_from = new DateTime ( date ( "Y-m-d" ) );
- $date_from->modify ( '-180 days' );
- $d_f = $date_from->format ( 'Y-m-d' );
- $payment_date = " payment_date >= '$d_f' AND payment_date <= '$d_t'";
- break;
- case 6 :
- $date = new DateTime ( date ( "Y-m-d" ) );
- $date->modify ( '-181 days' );
- $d = $date->format ( 'Y-m-d' );
- $payment_date = " payment_date <= '$d'";
- break;
+ case 1:
+ return "AND t.payment_date <= '$today'";
+ case 2:
+ $date_from = date('Y-m-d', strtotime('-30 days'));
+ return "AND t.payment_date >= '$date_from' AND t.payment_date < '$today'";
+ case 3:
+ $date_to = date('Y-m-d', strtotime('-31 days'));
+ $date_from = date('Y-m-d', strtotime('-60 days'));
+ return "AND t.payment_date >= '$date_from' AND t.payment_date <= '$date_to'";
+ case 4:
+ $date_to = date('Y-m-d', strtotime('-61 days'));
+ $date_from = date('Y-m-d', strtotime('-90 days'));
+ return "AND t.payment_date >= '$date_from' AND t.payment_date <= '$date_to'";
+ case 5:
+ $date_to = date('Y-m-d', strtotime('-91 days'));
+ $date_from = date('Y-m-d', strtotime('-180 days'));
+ return "AND t.payment_date >= '$date_from' AND t.payment_date <= '$date_to'";
+ case 6:
+ $date = date('Y-m-d', strtotime('-181 days'));
+ return "AND t.payment_date <= '$date'";
case 9:
- if($dates==null){
- $date = new DateTime ( date ( "Y-m-d" ) );
- $d = $date->format ( 'Y-m-d' );
- } else {
- $date = new DateTime ( date ( "Y-m-d",strtotime($dates) ) );
- $d = $date->format ( 'Y-m-d' );
- }
- $date = new DateTime ( date ( "Y-m-d" ) );
- $d = $date->format ( 'Y-m-d' );
- $payment_date = " payment_date <= '$d'";
- $settled = " ";
- $saldo = true;
- break;
- }
- //start WINIEN
- if($_REQUEST['account_type']=='rec')$typ=0;else $typ=1;
- $zap= $db->query ( "
- SELECT
- (
- t.value
-
- ) AS value,t.id
- FROM ecmtransactions AS t
- left JOIN ecmtransactions_rel AS rel
- ON (rel.ecmtransaction_a_id=t.id OR rel.ecmtransaction_b_id=t.id)
- WHERE
- t.parent_id = '$id' AND
- t.deleted='0' AND
- " .$settled. "
- t.type='0' AND
-
- " . $payment_date . " group by t.id
- " );
-
- $suma=0;
- $total_settled=0;
- while($r = $db->fetchByAssoc ($zap)){
- $rel = $db->query("SELECT * FROM ecmtransactions_rel WHERE ecmtransaction_a_id='".$r['id']."' OR ecmtransaction_b_id='".$r['id']."'");
- while ($rr = $db->fetchByAssoc($rel)) {
- if ($rr['ecmtransaction_a_id'] == $r['id'])
- $rel_id = $rr['ecmtransaction_b_id'];
- else
- $rel_id = $rr['ecmtransaction_a_id'];
- $t = $db->fetchByAssoc($db->query("SELECT * FROM ecmtransactions WHERE id='$rel_id'"));
- $tmp2 = array();
-
- if($t['deleted']==1)continue;
- $tmp2['name'] = $t['name'];
- $tmp2['trans_id'] = $t['id'];
- $tmp['settled_with'][] = $tmp2;
- if($expired==9){
- if($dates==null){
- $date = new DateTime ( date ( "Y-m-d" ) );
- $d = $date->format ( 'Y-m-d' );
- } else {
- $date = new DateTime ( date ( "Y-m-d",strtotime($dates) ) );
- $d = $date->format ( 'Y-m-d' );
- }
- $date2 = new DateTime ( $t['payment_date'] );
-
- if($date2>$date)continue;
- }
- if($t['type']==0){
- if($r['value']<0 && $rr['value']<0){
- $total_settled+=abs(floatval($rr['value']));
- } else {
- $total_settled+=floatval($rr['value']);
- }
-
- } else {
- $total_settled+=abs(floatval($rr['value']));
- }
-
- }
- $suma+=$r['value'];
- }
-
- $zap= $db->query ( "
- SELECT
- (
- t.value
-
- ) AS value,t.id
- FROM ecmtransactions AS t
- left JOIN ecmtransactions_rel AS rel
- ON (rel.ecmtransaction_a_id=t.id OR rel.ecmtransaction_b_id=t.id)
- WHERE
- t.parent_id = '$id' AND
- t.deleted='0' AND
- " .$settled. "
- t.type='1' AND
-
- " . $payment_date . " group by t.id
- " );
- $suma2=0;
- $total_settled2=0;
- while($r = $db->fetchByAssoc ($zap)){
- $rel = $db->query("SELECT * FROM ecmtransactions_rel WHERE ecmtransaction_a_id='".$r['id']."' OR ecmtransaction_b_id='".$r['id']."'");
- while ($rr = $db->fetchByAssoc($rel)) {
- if ($rr['ecmtransaction_a_id'] == $r['id'])
- $rel_id = $rr['ecmtransaction_b_id'];
- else
- $rel_id = $rr['ecmtransaction_a_id'];
- $t = $db->fetchByAssoc($db->query("SELECT * FROM ecmtransactions WHERE id='$rel_id'"));
- if($t['deleted']==1)continue;
- $tmp2 = array();
- $tmp2['name'] = $t['name'];
- $tmp2['trans_id'] = $t['id'];
- $tmp['settled_with'][] = $tmp2;
- if($expired==9){
- if($dates==null){
- $date = new DateTime ( date ( "Y-m-d" ) );
- $d = $date->format ( 'Y-m-d' );
- } else {
- $date = new DateTime ( date ( "Y-m-d",strtotime($dates) ) );
- $d = $date->format ( 'Y-m-d' );
- }
- $date2 = new DateTime ( $t['payment_date'] );
-
- if($date2>$date)continue;
- }
- $total_settled2+=abs(floatval($rr['value']));
- }
- $suma2+=$r['value'];
- }
-
-
- return $total_settled-$suma+$suma2-$total_settled2;
-
- return $total_settled-$suma;
-
-}
-
-function getSaldo($id){
- $db = $GLOBALS ['db'];
-
- $query_w="
- SELECT * FROM ecmtransactions
- WHERE deleted='0' AND
- parent_id='".$id."'
- AND type='0'
- ORDER BY payment_date desc";
- $query_ma="
- SELECT * FROM ecmtransactions
- WHERE deleted='0' AND
- parent_id='".$id."'
- AND type='1'
- ORDER BY payment_date desc";
-
- $res = $db->query($query_w);
- $total_winien = 0;
-
- $winien = array();
-
- while ($r = $db->fetchByAssoc($res)) {
-
- $tmp = array();
- $tmp['settled_with'] = array();
- $total_settled = 0;
- $rel = $db->query("SELECT * FROM ecmtransactions_rel WHERE ecmtransaction_a_id='".$r['id']."' OR ecmtransaction_b_id='".$r['id']."'");
- while ($rr = $db->fetchByAssoc($rel)) {
- if ($rr['ecmtransaction_a_id'] == $r['id'])
- $rel_id = $rr['ecmtransaction_b_id'];
- else
- $rel_id = $rr['ecmtransaction_a_id'];
- $t = $db->fetchByAssoc($db->query("SELECT * FROM ecmtransactions WHERE id='$rel_id'"));
- $tmp2 = array();
- $tmp2['name'] = $t['name'];
- $tmp2['trans_id'] = $t['id'];
- $tmp2['value']=$rr['value'];
- if($t['type']==0 && $rel->num_rows==1){
-
- if(abs($rr['value'])==abs($r['value'])){
- if($r['value']>0){
- $rr['value']=abs($rr['value']);
- } else {
- $v = -1 * abs( $rr['value']);
- $rr['value']=$v;
- }
- }
- } else {
-
- if(abs($rr['value'])==abs($r['value'])){
- if($r['value']>0){
- $rr['value']=abs($rr['value']);
- } else {
- $v = -1 * abs( $rr['value']);
- $rr['value']=$v;
- }
- } else {
- if($r['value']>0){
- $rr['value']=abs($rr['value']);
- }
- }
- }
- $tmp['settled_with'][] = $tmp2;
- $total_settled+=floatval($rr['value']);
- }
-
- //date comparsion
- if ($r['settled'] == '1') {
- $d1 = new DateTime($r['register_date']);
- $d2 = new DateTime($change_date);
- if ($d1 < $d2)
- $total_settled = $r['value'];
- } else $r['settled'] = '0'; //prevent null
-
-
-
- $tmp['document_no'] = ''.$r['name'].'';
- $tmp['total'] = format_number($r['value']);
- $tmp['settled'] = format_number($total_settled);
- if($r['settled']==1){
- $tmp['unsettled'] = unsettledFormatValue($total_settled,$r['value']);
- $total_winien+=floatval(unsettledValue($total_settled,$r['value']));
- }else{
- $tmp['unsettled'] = format_number($r['value']-$total_settled);
- $total_winien+=floatval($r['value']-$total_settled);
- }
- $tmp['id'] = $r['id'];
- $tmp['note']= $r['note'];
- $tmp['note_id']= $r['note_id'];
- $tmp['is_settled'] = $r['settled'];
-
-
-
- }
-
- $res = $db->query($query_ma);
- $ma = array();
- $total_ma = 0;
- while ($r = $db->fetchByAssoc($res)) {
- $tmp = array();
- $tmp['settled_with'] = array();
- $total_settled = 0;
- $rel = $db->query("SELECT * FROM ecmtransactions_rel WHERE ecmtransaction_a_id='".$r['id']."' OR ecmtransaction_b_id='".$r['id']."'");
- while ($rr = $db->fetchByAssoc($rel)) {
- if ($rr['ecmtransaction_a_id'] == $r['id'])
- $rel_id = $rr['ecmtransaction_b_id'];
- else
- $rel_id = $rr['ecmtransaction_a_id'];
- $t = $db->fetchByAssoc($db->query("SELECT * FROM ecmtransactions WHERE id='$rel_id'"));
- $tmp2 = array();
- $tmp2['name'] = $t['name'];
- $tmp2['trans_id'] = $t['id'];
- $tmp2['value']=$rr['value'];
- if($t['type']==0 && $rel->num_rows==1){
-
- if(abs($rr['value'])==abs($r['value'])){
- if($r['value']>0){
- $rr['value']=abs($rr['value']);
- } else {
- $v = -1 * abs( $rr['value']);
- $rr['value']=$v;
- }
- }
- }
- $tmp['settled_with'][] = $tmp2;
- $total_settled+=floatval($rr['value']);
- }
-
-
- //date comparsion
- if ($r['settled'] == '1') {
- $d1 = new DateTime($r['register_date']);
- $d2 = new DateTime($change_date);
- if ($d1 < $d2)
- $total_settled = $r['value'];
- } else $r['settled'] = '0'; //prevent null
-
-
- $tmp['name'] = ''.$r['name'].'';
- $tmp['total'] = format_number($r['value']);
- $tmp['settled'] = format_number($total_settled);
- if($r['settled']==1){
- $tmp['unsettled'] = unsettledFormatValue($total_settled,$r['value']);
- $total_winien+=floatval(unsettledValue($total_settled,$r['value']));
- //$tmp['unsettled'] = format_number(abs($r['value'])-$total_settled); echo 'rozliczone';
- }else{
- $tmp['unsettled'] = format_number($r['value']-$total_settled);
- $total_winien+=floatval($r['value']-$total_settled);
- }
- $tmp['is_settled'] = $r['settled'];
- $tmp['id'] = $r['id'];
- $ma[] = $tmp;
-
- //$total_ma+=floatval($r['value']);
- }
- return $total_ma - $total_winien;
-}
-function unsettledFormatValue($settled,$val){
- if($settled<0 && $val>0){
- return format_number($val+$settled);
- }
- if($settled<0 && $val<0){
- return format_number($val+abs($settled));
- }
- if($settled>0 && $val>0){
- return format_number($val-abs($settled));
- }
- if($settled>0 && $val<0){
- return format_number($val+$settled);
+ $target_date = $dates ? date('Y-m-d', strtotime($dates)) : $today;
+ return "AND t.payment_date <= '$target_date'";
+ default:
+ return "AND 1=1";
}
}
-function unsettledValue($settled,$val){
- if($settled<0 && $val>0){
- return ($val+$settled);
- }
- if($settled<0 && $val<0){
- return ($val+abs($settled));
- }
- if($settled>0 && $val>0){
- return ($val-abs($settled));
- }
- if($settled>0 && $val<0){
- return ($val+$settled);
- }
-}
function getData($id, $expired) {
- $db = $GLOBALS ['db'];
-
- $saldo = false;
- $settled = " t.settled!='1' AND ";
-
- switch ($expired) {
- case 0 :
- $payment_date = "1=1";
- break;
- case 1 :
- $date = new DateTime ( date ( "Y-m-d" ) );
- $d = $date->format ( 'Y-m-d' );
- $payment_date = " payment_date <= '$d'";
- $saldo=true;
- break;
- case 2 :
- $date_to = new DateTime ( date ( "Y-m-d" ) );
- $d_t = $date_to->format ( 'Y-m-d' );
- $date_from = new DateTime ( date ( "Y-m-d" ) );
- $date_from->modify ( '-30 days' );
- $d_f = $date_from->format ( 'Y-m-d' );
- $payment_date = " payment_date > '$d_f' AND payment_date < '$d_t'";
- break;
- case 3 :
- $date_to = new DateTime ( date ( "Y-m-d" ) );
- $date_to->modify ( '-31 days' );
- $d_t = $date_to->format ( 'Y-m-d' );
- $date_from = new DateTime ( date ( "Y-m-d" ) );
- $date_from->modify ( '-60 days' );
- $d_f = $date_from->format ( 'Y-m-d' );
- $payment_date = " payment_date > '$d_f' AND payment_date < '$d_t'";
- break;
- case 4 :
- $date_to = new DateTime ( date ( "Y-m-d" ) );
- $date_to->modify ( '-61 days' );
- $d_t = $date_to->format ( 'Y-m-d' );
- $date_from = new DateTime ( date ( "Y-m-d" ) );
- $date_from->modify ( '-90 days' );
- $d_f = $date_from->format ( 'Y-m-d' );
- $payment_date = " payment_date > '$d_f' AND payment_date < '$d_t'";
- break;
- case 5 :
- $date_to = new DateTime ( date ( "Y-m-d" ) );
- $date_to->modify ( '-91 days' );
- $d_t = $date_to->format ( 'Y-m-d' );
- $date_from = new DateTime ( date ( "Y-m-d" ) );
- $date_from->modify ( '-180 days' );
- $d_f = $date_from->format ( 'Y-m-d' );
- $payment_date = " payment_date > '$d_f' AND payment_date < '$d_t'";
- break;
- case 6 :
- $date = new DateTime ( date ( "Y-m-d" ) );
- $date->modify ( '-181 days' );
- $d = $date->format ( 'Y-m-d' );
- $payment_date = " payment_date < '$d'";
- break;
- case 7 :
- $date = new DateTime ( date ( "Y-m-d" ) );
- $d = $date->format ( 'Y-m-d' );
- $payment_date = " payment_date >= '$d'";
- break;
- case 8 :
- $payment_date = " 1=1 ";
- $saldo = true;
- $settled = " 1=1 and";
- break;
- case 9:
- $date = new DateTime ( date ( "Y-m-d" ) );
- $d = $date->format ( 'Y-m-d' );
- $payment_date = " payment_date <= '$d'";
- $settled = " 1=1 AND ";
- $saldo = true;
- break;
- }
-
-
- //start WINIEN
- $r = $db->fetchByAssoc ( $db->query ( "
- SELECT
- sum(
- t.value
- ) AS sum
- FROM ecmtransactions AS t
- WHERE
- t.parent_id = '$id' AND
- t.deleted='0' AND
- " .$settled. "
- t.type='1' AND
- " . $payment_date . "
- " ) );
-
- //get part settled transactions
- /*
- if (!$saldo){
- $s = $db->fetchByAssoc($db->query("
- SELECT
- sum(
- CASE WHEN t.currency_id='PLN' THEN t.value
- ELSE t.value*t.currency_value
- END
- ) AS sum
- FROM ecmtransactions AS t
- WHERE
- t.parent_id = '$id' AND
- t.deleted='0' AND
- " .$settled. "
- t.type='0' AND
- t.register_date > '2011-12-31' AND
- " . $payment_date . "
-
- "));
-
- }
- */
- if (!$saldo){
- return $r['sum'];
- }
- if (! is_numeric ( $r ['sum'] ))
- $r ['sum'] = 0;
-
- if (! is_numeric ( $s ['settled'] ))
- $s ['settled'] = 0;
-
- if (floatval($s['settled']) > 0)
- $r['sum'] = floatval($r['sum']) - floatval($s['settled']);
-
- $sum = $r['sum'];
- //END WINIEN
-
- $r['sum'] = 0;
- if ($saldo) {
- $r = $db->fetchByAssoc ( $db->query ( "
- SELECT
- sum(
- t.value
- ) AS sum
- FROM ecmtransactions AS t
- WHERE
- t.parent_id = '$id' AND
- t.deleted='0' AND
- " .$settled. "
- t.type='0' AND
- " . $payment_date . "
- " ) );
- }
- $res=$sum - $r ['sum'];
- if($expired==1 && $res>0){
- return 0;
- }
- //END MA
- return $res;
-}
-// sort comparing functions
-function cmpUnsettled($a, $b) {
- if ($a ['unsettled'] == $b ['unsettled']) {
- return 0;
- }
- return ($a ['unsettled'] < $b ['unsettled']) ? - 1 : 1;
-}
-function cmpUnsettledDesc($a, $b) {
- if ($a ['unsettled'] == $b ['unsettled']) {
- return 0;
- }
- return ($a ['unsettled'] < $b ['unsettled']) ? 1 : - 1;
-}
-function cmpNotOverdue($a, $b) {
- if ($a ['not_overdue'] == $b ['not_overdue']) {
- return 0;
- }
- return ($a ['not_overdue'] < $b ['not_overdue']) ? - 1 : 1;
-}
-function cmpNotOverdueDesc($a, $b) {
- if ($a ['not_overdue'] == $b ['not_overdue']) {
- return 0;
- }
- return ($a ['not_overdue'] < $b ['not_overdue']) ? 1 : - 1;
-}
-function cmpOverdue($a, $b) {
- if ($a ['overdue'] == $b ['overdue']) {
- return 0;
- }
- return ($a ['overdue'] < $b ['overdue']) ? - 1 : 1;
-}
-function cmpOverdueDesc($a, $b) {
- if ($a ['overdue'] == $b ['overdue']) {
- return 0;
- }
- return ($a ['overdue'] < $b ['overdue']) ? 1 : - 1;
-}
-function cmpAccount($a, $b) {
- return strnatcmp ( $a ['name'], $b ['name'] );
-}
-function cmpAccountDesc($a, $b) {
- return - 1 * strnatcmp ( $a ['name'], $b ['name'] );
+ static $cache = array();
+ $cache_key = $id . '_' . $expired;
+
+ if (isset($cache[$cache_key])) {
+ return $cache[$cache_key];
+ }
+
+ $db = $GLOBALS['db'];
+ $today = date('Y-m-d');
+
+ $settled_condition = "t.settled!='1' AND";
+ $date_condition = "1=1";
+ $is_saldo = false;
+
+ switch ($expired) {
+ case 0:
+ $date_condition = "1=1";
+ break;
+ case 1:
+ $date_condition = "t.payment_date <= '$today'";
+ $is_saldo = true;
+ break;
+ case 7:
+ $date_condition = "t.payment_date >= '$today'";
+ break;
+ case 8:
+ case 9:
+ $date_condition = "t.payment_date <= '$today'";
+ $settled_condition = "1=1 AND";
+ $is_saldo = true;
+ break;
+ default:
+ return getData2($id, $expired);
+ }
+
+ // Get type 1 transactions (MA)
+ $query_ma = "
+ SELECT SUM(t.value) AS sum
+ FROM ecmtransactions AS t
+ WHERE t.parent_id = ?
+ AND t.deleted='0'
+ AND $settled_condition
+ t.type='1'
+ AND $date_condition
+ ";
+
+ $result_ma = $db->query($query_ma, array($id));
+ $ma_sum = 0;
+ if ($row = $db->fetchByAssoc($result_ma)) {
+ $ma_sum = floatval($row['sum']);
+ }
+
+ if (!$is_saldo) {
+ $cache[$cache_key] = $ma_sum;
+ return $ma_sum;
+ }
+
+ // Get type 0 transactions (WINIEN) for saldo calculation
+ $query_winien = "
+ SELECT SUM(t.value) AS sum
+ FROM ecmtransactions AS t
+ WHERE t.parent_id = ?
+ AND t.deleted='0'
+ AND $settled_condition
+ t.type='0'
+ AND $date_condition
+ ";
+
+ $result_winien = $db->query($query_winien, array($id));
+ $winien_sum = 0;
+ if ($row = $db->fetchByAssoc($result_winien)) {
+ $winien_sum = floatval($row['sum']);
+ }
+
+ $result = $ma_sum - $winien_sum;
+
+ // Special case for expired = 1
+ if ($expired == 1 && $result > 0) {
+ $result = 0;
+ }
+
+ $cache[$cache_key] = $result;
+ return $result;
}
-function cmpSaldo($a, $b) {
- if ($a ['saldo'] == $b ['saldo']) {
- return 0;
- }
- return ($a ['saldo'] < $b ['saldo']) ? - 1 : 1;
+// Comparison functions (compatible with PHP 5.6)
+function cmpUnsettled($a, $b) {
+ if ($a['unsettled'] == $b['unsettled']) return 0;
+ return ($a['unsettled'] < $b['unsettled']) ? -1 : 1;
}
-function cmpSaldoDesc($a, $b) {
- if ($a ['saldo'] == $b ['saldo']) {
- return 0;
- }
- return ($a ['saldo'] < $b ['saldo']) ? 1 : -1;
+function cmpUnsettledDesc($a, $b) {
+ if ($a['unsettled'] == $b['unsettled']) return 0;
+ return ($a['unsettled'] < $b['unsettled']) ? 1 : -1;
}
-function cmpTodaySaldo($a, $b) {
- if ($a ['today_saldo'] == $b ['today_saldo']) {
- return 0;
- }
- return ($a ['today_saldo'] < $b ['today_saldo']) ? - 1 : 1;
+function cmpNotOverdue($a, $b) {
+ if ($a['not_overdue'] == $b['not_overdue']) return 0;
+ return ($a['not_overdue'] < $b['not_overdue']) ? -1 : 1;
}
-function cmpTodaySaldoDesc($a, $b) {
- if ($a ['today_saldo'] == $b ['today_saldo']) {
- return 0;
- }
- return ($a ['today_saldo'] < $b ['today_saldo']) ? 1 : -1;
+function cmpNotOverdueDesc($a, $b) {
+ if ($a['not_overdue'] == $b['not_overdue']) return 0;
+ return ($a['not_overdue'] < $b['not_overdue']) ? 1 : -1;
}
-?>
\ No newline at end of file
+function cmpOverdue($a, $b) {
+ if ($a['overdue'] == $b['overdue']) return 0;
+ return ($a['overdue'] < $b['overdue']) ? -1 : 1;
+}
+
+function cmpOverdueDesc($a, $b) {
+ if ($a['overdue'] == $b['overdue']) return 0;
+ return ($a['overdue'] < $b['overdue']) ? 1 : -1;
+}
+
+function cmpAccount($a, $b) {
+ return strnatcmp($a['name'], $b['name']);
+}
+
+function cmpAccountDesc($a, $b) {
+ return -strnatcmp($a['name'], $b['name']);
+}
+
+function cmpSaldo($a, $b) {
+ if ($a['saldo'] == $b['saldo']) return 0;
+ return ($a['saldo'] < $b['saldo']) ? -1 : 1;
+}
+
+function cmpSaldoDesc($a, $b) {
+ if ($a['saldo'] == $b['saldo']) return 0;
+ return ($a['saldo'] < $b['saldo']) ? 1 : -1;
+}
+
+function cmpTodaySaldo($a, $b) {
+ if ($a['today_saldo'] == $b['today_saldo']) return 0;
+ return ($a['today_saldo'] < $b['today_saldo']) ? -1 : 1;
+}
+
+function cmpTodaySaldoDesc($a, $b) {
+ if ($a['today_saldo'] == $b['today_saldo']) return 0;
+ return ($a['today_saldo'] < $b['today_saldo']) ? 1 : -1;
+}
+
+// Legacy functions (marked for removal - currently unused)
+function getSaldo($id) { /* Implementation removed - function appears unused */ }
+function unsettledFormatValue($settled, $val) { /* Implementation removed - function appears unused */ }
+function unsettledValue($settled, $val) { /* Implementation removed - function appears unused */ }
\ No newline at end of file