Files
crm.e5.pl/modules/EcmPaymentStates/summaryNew.php
2024-04-27 09:23:34 +02:00

334 lines
11 KiB
PHP

<?php
if (! defined ( 'sugarEntry' ) || ! sugarEntry)
die ( 'Not A Valid Entry Point' );
//echo '<h1>Salda są aktualnia przebudowywane - mogą pokazywać złe wartości - MZ</h1>';
// prepare data
$db = $GLOBALS ['db'];
if ($_REQUEST['account_type'])
$account_type = $_REQUEST['account_type'];
else
$account_type = '';
// get list of accounts
$clients = $db->query ( "SELECT distinct parent_id FROM ecmtransactions WHERE settled!='1' AND deleted='0' ORDER BY parent_name" );
// arrays to handle data for SMARTY
$data = array ();
$sum = array ();
$sum ['unsettled'] = 0;
$sum ['not_overdue'] = 0;
$sum ['overdue'] = 0;
$sum ['2'] = 0; // 1..30
$sum ['3'] = 0; // 31..60
$sum ['4'] = 0; // 61..90
$sum ['5'] = 0; // 91..180
$sum ['6'] = 0; // 180..
$sum ['8'] = 0;
$sum ['9'] = 0;
$sum ['10'] = 0;
while ( $c = $db->fetchByAssoc ( $clients ) ) {
$row = array ();
$row['id'] = $c['parent_id'];
$acc= new Account();
$acc->retrieve($c['parent_id']);
if ($_REQUEST['account_type']=='1' && $acc->account_type=='sup') continue; //odbiorcy
if ($_REQUEST['account_type']=='2' && $acc->account_type=='rec') continue; //dostawcy
//if($account_type!='' && $acc->account_type!=$account_type) continue;
$row ['name'] = $db->fetchByAssoc ( $db->query ( "SELECT name FROM accounts WHERE id='" . $c ['parent_id'] . "'" ) )['name'];
$row ['unsettled'] = getData ( $c ['parent_id'], 0 );
$row ['not_overdue'] = getData ( $c ['parent_id'], 7 );
$row ['overdue'] = getData ( $c ['parent_id'], 1 );
$row ['2'] = getData ( $c ['parent_id'], 2 ); // 1..30
$row ['3'] = getData ( $c ['parent_id'], 3 ); // 31..60
$row ['4'] = getData ( $c ['parent_id'], 4 ); // 61..90
$row ['5'] = getData ( $c ['parent_id'], 5 ); // 91..180
$row ['6'] = getData ( $c ['parent_id'], 6 ); // 180..
$row ['8'] = getData ( $c ['parent_id'], 8 );
$row ['9'] = getData ( $c ['parent_id'], 9 );
$row ['10'] = getData ( $c ['parent_id'], 10 );
$sum ['unsettled'] += $row ['unsettled'];
$sum ['not_overdue'] += $row ['not_overdue'];
$sum ['overdue'] += $row ['overdue'];
$sum ['2'] += $row ['2']; // 1..30
$sum ['3'] += $row ['3']; // 31..60
$sum ['4'] += $row ['4']; // 61..90
$sum ['5'] += $row ['5']; // 91..180
$sum ['6'] += $row ['6']; // 180..
$sum ['8'] += $row ['8'];
$sum ['9'] += $row ['9'];
$sum ['10'] += $row ['10'];
$data [] = $row;
}
// format sum
$sum ['unsettled'] = format_number ( $sum ['unsettled'] );
$sum ['not_overdue'] = format_number ( $sum ['not_overdue'] );
$sum ['overdue'] = format_number ( $sum ['overdue'] );
$sum ['2'] = format_number ( $sum ['2'] ); // 1..30
$sum ['3'] = format_number ( $sum ['3'] ); // 31..60
$sum ['4'] = format_number ( $sum ['4'] ); // 61..90
$sum ['5'] = format_number ( $sum ['5'] ); // 91..180
$sum ['6'] = format_number ( $sum ['6'] ); // 180..
$sum ['8'] = format_number ( $sum ['8'] );
$sum ['9'] = format_number ( $sum ['9'] );
$sum ['10'] = format_number ( $sum ['10'] );
// sort
$sort = array ();
if ($_REQUEST ['sort'] && $_REQUEST ['sort'] != '')
switch ($_REQUEST ['sort']) {
case 'unsettled' :
if ($_REQUEST ['sortType'] == 'asc') {
usort ( $data, "cmpUnsettled" );
$sort ['unsettled'] = 'desc'; // now is asc, so next is desc
}
if ($_REQUEST ['sortType'] == 'desc') {
usort ( $data, "cmpUnsettledDesc" );
$sort ['unsettled'] = 'asc'; // same story
}
break;
case 'account' :
if ($_REQUEST ['sortType'] == 'asc') {
usort ( $data, "cmpAccount" );
$sort ['account'] = 'desc'; // now is asc, so next is desc
}
if ($_REQUEST ['sortType'] == 'desc') {
usort ( $data, "cmpAccountDesc" );
$sort ['account'] = 'asc'; // same story
}
break;
case 'not_overdue' :
if ($_REQUEST ['sortType'] == 'asc') {
usort ( $data, "cmpNotOverdue" );
$sort ['not_overdue'] = 'desc'; // now is asc, so next is desc
}
if ($_REQUEST ['sortType'] == 'desc') {
usort ( $data, "cmpNotOverdueDesc" );
$sort ['not_overdue'] = 'asc'; // same story
}
break;
case 'overdue' :
if ($_REQUEST ['sortType'] == 'asc') {
usort ( $data, "cmpOverdue" );
$sort ['overdue'] = 'desc'; // now is asc, so next is desc
}
if ($_REQUEST ['sortType'] == 'desc') {
usort ( $data, "cmpOverdueDesc" );
$sort ['overdue'] = 'asc'; // same story
}
break;
}
// format data
foreach ( $data as $key => $row ) {
// format numbers
$row ['unsettled'] = format_number ( $row ['unsettled'] );
$row ['not_overdue'] = format_number ( $row ['not_overdue'] );
$row ['overdue'] = format_number ( $row ['overdue'] );
$row ['2'] = format_number ( $row ['2'] ); // 1..30
$row ['3'] = format_number ( $row ['3'] ); // 31..60
$row ['4'] = format_number ( $row ['4'] ); // 61..90
$row ['5'] = format_number ( $row ['5'] ); // 91..180
$row ['6'] = format_number ( $row ['6'] ); // 180..
$row ['8'] = format_number ( $row ['8'] );
$row ['9'] = format_number ( $row ['9'] );
$row ['10'] = format_number ( $row ['10'] );
$data [$key] = $row;
}
// create & execute smarty
$ss = new Sugar_Smarty ();
global $mod_strings;
$ss->assign ( "MOD", $mod_strings );
$ss->assign ( "DATA", $data );
$ss->assign("account_type", $account_type);
$ss->assign ( "SUM", $sum );
$ss->assign ( "SORT", $sort );
echo $ss->display ( 'modules/EcmPaymentStates/tpls/summary.tpl' );
// helper functions
function getData($id, $expired) {
$db = $GLOBALS ['db'];
//if ($id != '54976fa6-14cb-ea85-22e1-53b55d379a33') return 0;
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'";
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 BETWEEN '$d_f' AND '$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 BETWEEN '$d_f' AND '$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 BETWEEN '$d_f' AND '$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 BETWEEN '$d_f' AND '$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 :
$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 BETWEEN '$d_t' AND '$d_f'";
break;
case 9 :
$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 BETWEEN '$d_t' AND '$d_f'";
break;
case 10 :
$date = new DateTime ( date ( "Y-m-d" ) );
$date->modify ( '+61 days');
$d = $date->format ( 'Y-m-d' );
$payment_date = " payment_date >= '$d'";
break;
}
$r = $db->fetchByAssoc ( $db->query ( "
SELECT
sum(
CASE WHEN (t.currency_id = 'PLN' OR t.currency_id = '' OR t.currency_id IS NULL) 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
(t.settled!='1' OR settled IS NULL) AND
t.register_date > '2011-12-31' AND
" . $payment_date . "
" ) );
//get part settled transactions
$s = $db->fetchByAssoc($db->query("
SELECT
sum(
CASE WHEN (t.currency_id = 'PLN' OR t.currency_id = '' OR t.currency_id IS NULL) THEN rel.value
ELSE rel.value*t.currency_value
END
) AS settled, t.id
FROM ecmtransactions_rel AS rel
INNER JOIN ecmtransactions AS t
ON (rel.ecmtransaction_b_id = t.id OR rel.ecmtransaction_a_id = t.id)
WHERE
t.parent_id = '$id' AND
t.deleted='0' AND
(t.settled!='1' OR settled IS NULL) AND
t.register_date > '2011-12-31' AND
" . $payment_date . "
"));
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']);
return $r ['sum'];
}
// 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'] );
}
?>