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

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