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; } } ?>