347 lines
9.8 KiB
PHP
347 lines
9.8 KiB
PHP
<?php
|
|
if (! defined ( 'sugarEntry' ) || ! sugarEntry)
|
|
die ( 'Not A Valid Entry Point' );
|
|
|
|
global $mod_strings;
|
|
|
|
$summary = new Summary();
|
|
|
|
if($_REQUEST['account_type']=='1'){
|
|
$data=$summary->getDataForAccountsType('0');
|
|
}
|
|
if($_REQUEST['account_type']=='0'){
|
|
$data=$summary->getDataForAccountsType('1');
|
|
}
|
|
if($_REQUEST['account_type']=='2'){
|
|
$data=$summary->getDataForAccountsType('2');
|
|
}
|
|
|
|
$ss = new Sugar_Smarty ();
|
|
|
|
$ss->assign ( "MOD", $mod_strings );
|
|
$ss->assign ("SUM",$summary->sumData($data));
|
|
$ss->assign ( "DATA", $data );
|
|
$ss->assign ("account_type", $_REQUEST['account_type']);
|
|
|
|
echo $ss->display ( 'modules/EcmPaymentStates/tpls/summaryFast.html' );
|
|
|
|
|
|
class Summary {
|
|
public $db;
|
|
|
|
public function __construct() {
|
|
$this->db = $GLOBALS ['db'];
|
|
}
|
|
|
|
public function sumPartiallySettledOverpayRelA($dateFrom, $dateTo,$type) {
|
|
$query = "
|
|
SELECT
|
|
ecmtransactions.parent_id,
|
|
SUM(ecmtransactions_rel.value) AS settledA
|
|
FROM
|
|
ecmtransactions_rel
|
|
INNER JOIN
|
|
ecmtransactions ON ecmtransactions.id = ecmtransactions_rel.ecmtransaction_a_id
|
|
WHERE
|
|
ecmtransactions.deleted = 0
|
|
AND ecmtransactions.settled = 0
|
|
AND ecmtransactions.type = '".$type."'
|
|
";
|
|
if($dateTo == null){
|
|
$query.=" and ecmtransactions.payment_date < '".$dateFrom->format("Y-m-d")."'" ;
|
|
}else if($dateFrom== null){
|
|
$query.=" and ecmtransactions.payment_date > '".$dateTo->format("Y-m-d")."'" ;
|
|
}else {
|
|
$query.=" AND ecmtransactions.payment_date > '".$dateTo->format("Y-m-d")."' and ecmtransactions.payment_date < '".$dateFrom->format("Y-m-d")."'";
|
|
|
|
}
|
|
|
|
$query.="
|
|
GROUP BY ecmtransactions.parent_id
|
|
";
|
|
|
|
$result= $this->db->query($query);
|
|
|
|
$data=[];
|
|
while($row = $this->db->fetchByAssoc($result)){
|
|
$data[$row['parent_id']]['settledA']=$row['settledA'];
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
public function sumPartiallySettledOverpayRelB($dateFrom, $dateTo,$type) {
|
|
$query = "
|
|
SELECT
|
|
ecmtransactions.parent_id,
|
|
SUM(ecmtransactions_rel.value) AS settledB
|
|
FROM
|
|
ecmtransactions_rel
|
|
INNER JOIN
|
|
ecmtransactions ON ecmtransactions.id = ecmtransactions_rel.ecmtransaction_b_id
|
|
WHERE
|
|
ecmtransactions.deleted = 0
|
|
AND ecmtransactions.settled = 0
|
|
AND ecmtransactions.type = '".$type."'";
|
|
if($dateTo == null){
|
|
$query.=" and ecmtransactions.payment_date < '".$dateFrom->format("Y-m-d")."'" ;
|
|
}else if($dateFrom== null){
|
|
$query.=" and ecmtransactions.payment_date > '".$dateTo->format("Y-m-d")."'" ;
|
|
}else {
|
|
$query.=" AND ecmtransactions.payment_date > '".$dateTo->format("Y-m-d")."' and ecmtransactions.payment_date < '".$dateFrom->format("Y-m-d")."'";
|
|
|
|
}
|
|
$query.="
|
|
GROUP BY ecmtransactions.parent_id
|
|
";
|
|
|
|
$result= $this->db->query($query);
|
|
|
|
$data=[];
|
|
while($row = $this->db->fetchByAssoc($result)){
|
|
$data[$row['parent_id']]['settledB']=$row['settledB'];
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
public function sumOverpay($dateFrom, $dateTo,$type) {
|
|
$query = "
|
|
SELECT
|
|
parent_id,SUM(value) AS value
|
|
FROM
|
|
ecmtransactions
|
|
WHERE
|
|
deleted = 0
|
|
AND settled = 0
|
|
AND type = '".$type."'";
|
|
if($dateTo == null){
|
|
$query.=" and payment_date < '".$dateFrom->format("Y-m-d")."'" ;
|
|
}else if($dateFrom== null){
|
|
$query.=" and payment_date > '".$dateTo->format("Y-m-d")."'" ;
|
|
}else {
|
|
$query.=" AND payment_date > '".$dateTo->format("Y-m-d")."' and payment_date < '".$dateFrom->format("Y-m-d")."'";
|
|
|
|
}
|
|
|
|
$query.= "GROUP BY parent_id
|
|
";
|
|
|
|
$result= $this->db->query($query);
|
|
|
|
$data=[];
|
|
|
|
while($row = $this->db->fetchByAssoc($result)){
|
|
$data[$row['parent_id']]['value']=$row['value'];
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
public function mergeArraysOverpayValue(&$data1,&$data2,&$data3,$name){
|
|
$data=[];
|
|
foreach ($data1 as $key=>$row){
|
|
$data[$key]['value']=$row['value'];
|
|
}
|
|
|
|
foreach ($data2 as $key=>$row){
|
|
$data[$key]['settledA']=$row['settledA'];
|
|
}
|
|
|
|
foreach ($data3 as $key=>$row){
|
|
$data[$key]['settledB']=$row['settledB'];
|
|
}
|
|
|
|
foreach ($data as $key=>$row){
|
|
$data[$key][$name]=$data[$key]['value']-$data[$key]['settledA']-$data[$key]['settledB'];
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
public function sumOverpayRange($dateFrom, $dateTo,$type,$name) {
|
|
$data1=$this->sumOverpay($dateFrom, $dateTo,$type);
|
|
$data2=$this->sumPartiallySettledOverpayRelA($dateFrom, $dateTo,$type);
|
|
$data3=$this->sumPartiallySettledOverpayRelB($dateFrom, $dateTo,$type);
|
|
$data= $this->mergeArraysOverpayValue($data1, $data2,$data3,$name);
|
|
|
|
return $data;
|
|
}
|
|
|
|
|
|
|
|
public function sumSaldoNotSettled(){
|
|
$query = "
|
|
SELECT
|
|
SUM(CASE
|
|
WHEN type = 1 THEN value
|
|
ELSE - value
|
|
END) as not_settled,
|
|
parent_id
|
|
FROM
|
|
ecmtransactions
|
|
WHERE
|
|
deleted = 0
|
|
AND register_date > '2011-12-31' and settled!='1'
|
|
GROUP BY parent_id
|
|
ORDER by parent_name ASC
|
|
";
|
|
|
|
$result= $this->db->query($query);
|
|
|
|
$data=[];
|
|
while($row = $this->db->fetchByAssoc($result)){
|
|
$data[$row['parent_id']]['not_settled']=$row['not_settled'];
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
public function getDataForAccountsType($type){
|
|
$type_2=$type;
|
|
if($type==2){
|
|
$type=0;
|
|
$type_2=2;
|
|
}
|
|
$data1=$this->sumOverpayRange(new DateTime(),(new \DateTime())->modify('-30 day'),$type,'overpay_1_30');
|
|
$data2=$this->sumOverpayRange((new \DateTime())->modify('-31 day'),(new \DateTime())->modify('-60 day'),$type,'overpay_31_60');
|
|
$data3=$this->sumOverpayRange((new \DateTime())->modify('-61 day'),(new \DateTime())->modify('-90 day'),$type,'overpay_61_90');
|
|
$data4=$this->sumOverpayRange((new \DateTime())->modify('-91 day'),(new \DateTime())->modify('-180 day'),$type,'overpay_91_180');
|
|
$data5=$this->sumOverpayRange((new \DateTime())->modify('-181 day'),null,$type,'overpay_181');
|
|
$data6=$this->sumOverpayRange(new DateTime(),null,$type,'overpay');
|
|
|
|
$data7=$this->sumSaldoNotSettled();
|
|
|
|
$data8=$this->sumOverpayRange((new \DateTime())->modify('+30 day'),new DateTime(),$type,'not_overpay_1_30');
|
|
$data9=$this->sumOverpayRange((new \DateTime())->modify('+60 day'),(new \DateTime())->modify('+31 day'),$type,'not_overpay_31_60');
|
|
$data10=$this->sumOverpayRange(null,(new \DateTime())->modify('+61 day'),$type,'not_overpay_61');
|
|
$data11=$this->sumOverpayRange(null,new DateTime(),$type,'not_overpay');
|
|
|
|
$data = $this->mergeResults($data1, $data2, $data3, $data4, $data5, $data6,$data7,$data8,$data9,$data10,$data11);
|
|
|
|
$data = $this->getParentData($data,$type_2);
|
|
|
|
return $data;
|
|
|
|
}
|
|
|
|
public function getParentData(&$data,$type){
|
|
foreach ($data as $key=>$row){
|
|
if($key==""){
|
|
unset($data[$key]);
|
|
} else {
|
|
|
|
$result=$this->db->query("select id,name,account_type from accounts where id = '".$key."' and deleted=0");
|
|
$account=$this->db->fetchByAssoc($result);
|
|
if($account['id']!=""){
|
|
$data[$key]['parent_name']=$account['name'];
|
|
$data[$key]['parent_id']=$account['id'];
|
|
} else {
|
|
unset($data[$key]);
|
|
}
|
|
|
|
|
|
if($type==0){
|
|
if($account['account_type']!="rec"){
|
|
|
|
unset($data[$key]);
|
|
}
|
|
}
|
|
if($type==1) {
|
|
if($account['account_type']!="sup"){
|
|
|
|
unset($data[$key]);
|
|
}
|
|
}
|
|
if($type==2) {
|
|
if($account['account_type']!="ind"){
|
|
|
|
unset($data[$key]);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
public function sumData(&$data){
|
|
$sumData=[];
|
|
$sumData['overpay_1_30']=0;
|
|
$sumData['overpay_31_60']=0;
|
|
$sumData['overpay_61_90']=0;
|
|
$sumData['overpay_91_180']=0;
|
|
$sumData['overpay_181']=0;
|
|
$sumData['overpay']=0;
|
|
$sumData['not_settled']=0;
|
|
$sumData['not_overpay_1_30']=0;
|
|
$sumData['not_overpay_31_60']=0;
|
|
$sumData['not_overpay_61']=0;
|
|
$sumData['not_overpay']=0;
|
|
foreach ($data as $key =>$row){
|
|
$sumData['overpay_1_30']+=$row['overpay_1_30'];
|
|
$sumData['overpay_31_60']+=$row['overpay_31_60'];
|
|
$sumData['overpay_61_90']+=$row['overpay_61_90'];
|
|
$sumData['overpay_91_180']+=$row['overpay_91_180'];
|
|
$sumData['overpay_181']+=$row['overpay_181'];
|
|
$sumData['overpay']+=$row['overpay'];
|
|
$sumData['not_settled']+=$row['not_settled'];
|
|
$sumData['not_overpay_1_30']+=$row['not_overpay_1_30'];
|
|
$sumData['not_overpay_31_60']+=$row['not_overpay_31_60'];
|
|
$sumData['not_overpay_61']+=$row['not_overpay_61'];
|
|
$sumData['not_overpay']+=$row['not_overpay'];
|
|
}
|
|
|
|
return $sumData;
|
|
}
|
|
|
|
public function mergeResults(&$data1,&$data2,&$data3,&$data4,&$data5,&$data6,&$data7,&$data8,&$data9,&$data10,&$data11){
|
|
$data=[];
|
|
foreach ($data1 as $key=>$row){
|
|
$data[$key]['overpay_1_30']=$row['overpay_1_30'];
|
|
}
|
|
|
|
foreach ($data2 as $key=>$row){
|
|
$data[$key]['overpay_31_60']=$row['overpay_31_60'];
|
|
}
|
|
|
|
foreach ($data3 as $key=>$row){
|
|
$data[$key]['overpay_61_90']=$row['overpay_61_90'];
|
|
}
|
|
foreach ($data4 as $key=>$row){
|
|
$data[$key]['overpay_91_180']=$row['overpay_91_180'];
|
|
}
|
|
|
|
foreach ($data5 as $key=>$row){
|
|
$data[$key]['overpay_181']=$row['overpay_181'];
|
|
}
|
|
|
|
foreach ($data6 as $key=>$row){
|
|
$data[$key]['overpay']=$row['overpay'];
|
|
}
|
|
|
|
foreach ($data7 as $key=>$row){
|
|
$data[$key]['not_settled']=$row['not_settled'];
|
|
}
|
|
|
|
foreach ($data8 as $key=>$row){
|
|
$data[$key]['not_overpay_1_30']=$row['not_overpay_1_30'];
|
|
}
|
|
|
|
foreach ($data9 as $key=>$row){
|
|
$data[$key]['not_overpay_31_60']=$row['not_overpay_31_60'];
|
|
}
|
|
|
|
foreach ($data10 as $key=>$row){
|
|
$data[$key]['not_overpay_61']=$row['not_overpay_61'];
|
|
}
|
|
|
|
foreach ($data11 as $key=>$row){
|
|
$data[$key]['not_overpay']=$row['not_overpay'];
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
}
|
|
?>
|