Files
crm.e5.pl/modules/EcmReports/CreateXLS2.php

424 lines
17 KiB
PHP
Raw Permalink Normal View History

2024-04-27 09:23:34 +02:00
<?php
include_once("modules/EcmReports/cache.php");
include_once("modules/EcmProductReports/vtigerConnector.php");
$vc=new vtigerConnector();
//$wc[]="purchaseorder.tracking_no!=''";
$vc->pp=99999;
$vc->where="(purchaseorder.postatus='Created' or purchaseorder.postatus='Approved' or purchaseorder.postatus='Delivered')";
$vc->getData();
$cnt=$vc->getCount();
$data=$vc->data;
$vd=$data;
function getValueByCode($data,$code,$status=""){
$r=mysql_fetch_array(mysql_query("select conversion_rate from currencies where name like 'USD'"));
for($i=0;$i<count($data);$i++){
if($data[$i]['productcode']==$code || $data[$i]['productcode']==$code."_S"){
if($status){
if($status==$data[$i]['postatus'])$value+=$r['conversion_rate']*$data[$i]['quantity']*$data[$i]['listprice']/0.8;
}
else $value+=$r['conversion_rate']*$data[$i]['quantity']*$data[$i]['listprice']/0.8;
}
}
return $value;
}
function getSumLast($account_id,$product_active){
$wh[]="e.register_date>'".date("Y-m-d",mktime()-12*30*24*3600)."'";
$wh[]="e.deleted='0'";
$wh[]="i.deleted='0'";
$wh[]="p.deleted='0'";
$wh[]="e.status='accepted'";
if($account_id)$wh[]="(e.parent_id='".$account_id."' or w.parent_id='".$account_id."')";
if($product_active && $product_active=="active")$wh[]="p.product_active='1'";
elseif($product_active && $product_active=="inactive")$wh[]="p.product_active='0'";
elseif($product_active && $product_active=="inactive")$wh=" and p.product_active='0'";
$w=mysql_query("select i.purchase_price,i.quantity,i.ecmproduct_id,p.product_category_id from ecminvoiceoutitems as i inner join ecminvoiceouts as e on e.id=i.ecminvoiceout_id inner join ecmproducts as p on i.ecmproduct_id=p.id where ".implode(" and ",$wh));
while($r=mysql_fetch_array($w)){
$arr[$r['product_category_id']]+=$r['purchase_price']*$r['quantity'];
$arr[$r['ecmproduct_id']]+=$r['purchase_price']*$r['quantity'];
}
return $arr;
}
set_time_limit(999999);
$year=$_GET['year'];
if(!$year)$year=(int)date("Y");
if($year==date(Y)){
$mmm=(int)date("m")-1;
}
else $mmm=12;
set_include_path('include/PHPExcel/');
include 'PHPExcel.php';
include 'PHPExcel/Writer/Excel2007.php';
include 'PHPExcel/IOFactory.php';
$objPHPExcel = new PHPExcel();
$objPHPExcel->getProperties()->setCreator("E5 CRM");
$objPHPExcel->getProperties()->setLastModifiedBy("E5 CRM");
$objPHPExcel->getProperties()->setTitle("Office 2007 PRICEBOOK");
$objPHPExcel->getProperties()->setSubject("Office 2007 PRICEBOOK");
$objPHPExcel->getProperties()->setDescription("PRICEBOOK");
$alf1="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for($i=0;$i<strlen($alf1);$i++){
$alf[]=$alf1[$i];
}
for($i=0;$i<strlen($alf1);$i++){
for($j=0;$j<strlen($alf1);$j++){
$alf[]=$alf1[$i].$alf1[$j];
}
}
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(80);
for($i=1;$i<=160;$i++){
$objPHPExcel->getActiveSheet()->getColumnDimension($alf[$i])->setWidth(30);
}
//ilosc poczatkowych kolumn
$pc=11;
//kolumny glowne
$objPHPExcel->getActiveSheet()->SetCellValue('A1','Name');
$objPHPExcel->getActiveSheet()->SetCellValue('B1','Inv qty');
$objPHPExcel->getActiveSheet()->SetCellValue('C1','Inv value');
$objPHPExcel->getActiveSheet()->SetCellValue('D1','Order value');
$objPHPExcel->getActiveSheet()->SetCellValue('E1','Order created value');
$objPHPExcel->getActiveSheet()->SetCellValue('F1','Order approved value');
$objPHPExcel->getActiveSheet()->SetCellValue('G1','Order delivered value');
$objPHPExcel->getActiveSheet()->SetCellValue('H1','Pur 12m');
$objPHPExcel->getActiveSheet()->SetCellValue('I1','Stock m');
$objPHPExcel->getActiveSheet()->SetCellValue('J1','Stock m + ord');
$objPHPExcel->getActiveSheet()->SetCellValue('K1','CBM');
//miesiace
$months=array("01","02","03","04","05","06","07","08","09","10","11","12");
$months_names=array("01"=>"January","02"=>"February","03"=>"March","04"=>"April","05"=>"May","06"=>"June","07"=>"July","08"=>"August","09"=>"September","10"=>"October","11"=>"November","12"=>"December");
//drukowanie kolumn miesiecy
for($i=0;$i<12;$i++){
$objPHPExcel->getActiveSheet()->SetCellValue($alf[8*$i+$pc].'1',$months_names[$months[$i]]." ".$year);
}
//drukowanie kolumn z wartosciami dla miesiecy
$m=2;
for($i=0;$i<=12;$i++){
$objPHPExcel->getActiveSheet()->SetCellValue($alf[8*$i+$pc].'2','Qty');
$objPHPExcel->getActiveSheet()->SetCellValue($alf[8*$i+$pc+1].'2','Avg qty');
$objPHPExcel->getActiveSheet()->SetCellValue($alf[8*$i+$pc+2].'2','Sales');
$objPHPExcel->getActiveSheet()->SetCellValue($alf[8*$i+$pc+3].'2','Avg sales');
$objPHPExcel->getActiveSheet()->SetCellValue($alf[8*$i+$pc+4].'2','Purchase');
$objPHPExcel->getActiveSheet()->SetCellValue($alf[8*$i+$pc+5].'2','Avg purchase');
$objPHPExcel->getActiveSheet()->SetCellValue($alf[8*$i+$pc+6].'2','Margin %');
$objPHPExcel->getActiveSheet()->SetCellValue($alf[8*$i+$pc+7].'2','CBM');
//$objPHPExcel->getActiveSheet()->SetCellValue($alf[8*$i+$pc+8].'2','Pred. sales');
//$objPHPExcel->getActiveSheet()->SetCellValue($alf[8*$i+$pc+9].'2','Pred. qty');
}
$m++;
if($_GET['category'])$cw=" and id='".$_GET['category']."'";
else $cw="";
$z="select name,id from ecmproductcategories where deleted='0'".$cw." order by name";
$w=$GLOBALS['db']->query($z);
$GLOBALS['db']->query("set names utf8");
$as=sum($year,$_REQUEST['account'],"","",$_REQUEST['active']);
$last=getSumLast($_REQUEST['account'],$_REQUEST['active']);
while($r=$GLOBALS['db']->fetchByAssoc($w)){
//nr kolumny
$col=0;
//zerowanie wartosci
$ems_qty_in_stock=0;
$stock_value=0;
$order_value=0;
$order_created_value=0;
$order_approved_value=0;
$order_delivered_value=0;
$cbm=0;
//wartosci do kategorii
$act="";
if($_REQUEST['active']=="active")$act=" and product_active='1'";
elseif($_REQUEST['active']=="active")$act=" and product_active='0'";
$zz="select ems_qty_in_stock,ems_price,carton_volume_meter as cvm,pieces_per_carton as ppc,code from ecmproducts where product_category_id='".$r['id']."' and deleted='0'".$act;
$ww=$GLOBALS['db']->query($zz);
while($rr=$GLOBALS['db']->fetchByAssoc($ww)){
$ems_qty_in_stock+=$rr['ems_qty_in_stock'];
$stock_value+=$rr['ems_qty_in_stock']*$rr['ems_price'];
@$cbm+=$rr['ems_qty_in_stock']*($rr['cvm']/$rr['ppc']);
$order_value+=getValueByCode($vd,$rr['code']);
$order_created_value+=getValueByCode($vd,$rr['code'],"Created");
$order_approved_value+=getValueByCode($vd,$rr['code'],"Approved");
$order_delivered_value+=getValueByCode($vd,$rr['code'],"Delivered");
}
//sumowanie
$cbm_total+=$cbm;
$ems_qty_in_stock_total+=$ems_qty_in_stock;
$stock_value_total+=$stock_value;
$order_value_total+=$order_value;
$order_created_value_total+=$order_created_value;
$order_approved_value_total+=$order_approved_value;
$order_delivered_value_total+=$order_delivered_value;
//wartosci sprzedazy i zakupu w grupach
$sumy=getSum($as,$year,"",$r['id']);
//sumowanie
$tot_pur+=$sumy['total_purchase'];
$stock_m=0;
$stock_m_order=0;
if($sumy['total_purchase'])$stock_m=@$stock_value/($last[$r['id']]/12);
if($sumy['total_purchase'])$stock_m_order=@($stock_value+$order_value)/($last[$r['id']]/12);
$stock_m_total+=$stock_m;
$stock_m_order_total+=$stock_m_order;
$pur12m+=$last[$r['id']];
//tworzenie kolumn
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$r['name']);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$ems_qty_in_stock);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$stock_value);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$order_value);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$order_created_value);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$order_approved_value);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$order_delivered_value);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$last[$r['id']]/12);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$stock_m);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$stock_m_order);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$cbm);
$avg_cat=0;
$avg_cat_qty=0;
$avg_cat_pur=0;
$sumy=getSum($as,$year,"",$r['id']);
$avg_cat+=$sumy["total"];
$summary_avg_cat+=$sumy['total'];
$avg_cat_pur+=$sumy["total_purchase"];
$summary_avg_cat_pur+=$sumy['total_purchase'];
$avg_cat_qty+=$sumy["qty"];
$summary_avg_cat_qty+=$sumy['qty'];
//tworzenie kolumn w miesiacach
for($i=0;$i<count($months);$i++){
$sum=getSum($as,$year."-".$months[$i],"",$r['id']);
$cat=$sum["total"];
$cat_pur=$sum["total_purchase"];
$cat_qty=$sum["qty"];
$cbm=$sum["cbm"];
if($cat)$margin=100*($cat-$cat_pur)/$cat;
else $margin=0;
if(!$cat)$cat=number_format(0,2,"",".");
$rvs=$GLOBALS['db']->fetchByAssoc($GLOBALS['db']->query("select value from ecmsalesreports_predictions_cat where account_id='".$_REQUEST['account']."' and year='".$year."' and month='".$i."' and bean_id='".$r['id']."' and type='sale'"));
$rvq=$GLOBALS['db']->fetchByAssoc($GLOBALS['db']->query("select value from ecmsalesreports_predictions_cat where account_id='".$_REQUEST['account']."' and year='".$year."' and month='".$i."' and bean_id='".$r['id']."' and type='qty'"));
if($rvs['value']<=0)$rvs['value']=$avg_cat/$mmm;
if($rvq['value']<=0)$rvq['value']=$avg_cat_qty/$mmm;
$ajax_cat=ajaxWindow($r['id'],$i,$rvs['value'],$_REQUEST['account'],"sale",$year);
@$ajax_cat_qty=ajaxWindow($r['id'],$i,$rvq['value'],$_REQUEST['account'],"qty",$year,($avg_cat/$avg_cat_qty));
$summary['total'][$year."-".$months[$i]]+=$cat;
$summary['total_purchase'][$year."-".$months[$i]]+=$cat_pur;
$summary['total_qty'][$year."-".$months[$i]]+=$cat_qty;
$summary['total_cbm'][$year."-".$months[$i]]+=$cbm;
$summary['total'][$year]+=$cat;
$summary['total_purchase'][$year]+=$cat_pur;
$summary['total_qty'][$year]+=$cat_qty;
$summary['total_cbm'][$year]+=$cbm;
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$cat_qty);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$avg_cat_qty/$mmm);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$cat);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$avg_cat/$mmm);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$cat_pur);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$avg_cat_pur/$mmm);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$margin);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$cbm);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$rvs['value']);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$rvq['value']);
}
//sumowanie wiersza
if($sumy["total_purchase"])$margin=100*($sumy["total"]-$sumy["total_purchase"])/$sumy["total"];
else $margin=0;
$cbm=$sumy["cbm"];
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,($sumy["qty"]/$mmm));
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$avg_cat_qty/$mmm);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$sumy["total"]);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$avg_cat/$mmm);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$sumy["total_purchase"]);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$avg_cat_pur/$mmm);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$margin);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$cbm);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$avg_cat/$mmm);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$avg_cat_qty/$mmm);
$m++;
if($_REQUEST['category']){
$col=0;
$as=sum($year,$_REQUEST['account'],"",$_REQUEST['category'],$_REQUEST['active']);
$act="";
if($_REQUEST['active']=="active")$act=" and product_active='1'";
elseif($_REQUEST['active']=="active")$act=" and product_active='0'";
$zz="select * from ecmproducts where product_category_id='".$_REQUEST['category']."' and deleted='0'".$act." order by code asc";
$ww=$GLOBALS['db']->query($zz);
while($rr=$GLOBALS['db']->fetchByAssoc($ww)){
$col=0;
$avg_p=0;
$avg_p_qty=0;
$avg_p_pur=0;
$sumy=getSum($as,$year,$rr['id'],$_REQUEST['category']);
for($i=0;$i<count($months);$i++){
$avg_p_qty+=$sumy["qty"];
$avg_p+=$sumy["total"];
$avg_p_pur+=$sumy["total_purchase"];
}
//$sumy=getSum($as,$year,$rr['id'],"");
$stock_m=0;
$stock_m_order=0;
$o_value=0;
$o_value+=getValueByCode($vd,$rr['code']);
$o_c_value=0;
$o_c_value+=getValueByCode($vd,$rr['code'],"Created");
$o_a_value=0;
$o_a_value+=getValueByCode($vd,$rr['code'],"Approved");
$o_d_value=0;
$o_d_value+=getValueByCode($vd,$rr['code'],"Delivered");
if($sumy['total_purchase'])$stock_m=@($rr['ems_qty_in_stock']*$rr['ems_price'])/($last[$rr['id']]/12);
if($sumy['total_purchase'])$stock_m_order=@(($rr['ems_qty_in_stock']*$rr['ems_price'])+$o_value)/($last[$rr['id']]/12);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$rr['name']);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$rr['ems_qty_in_stock']);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$rr['ems_qty_in_stock']*$rr['ems_price']);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$o_value);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$o_created_value);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$o_approved_value);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$o_delivered_value);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$last[$rr['id']]/12);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$stock_m);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$stock_m_order);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,($rr['ems_qty_in_stock']*($rr['cvm']/$rr['ppc'])));
for($i=0;$i<count($months);$i++){
$sum=getSum($as,$year."-".$months[$i],$rr['id'],$_REQUEST['category']);
$p_pur=$sum["total_purchase"];
$p_qty=$sum["qty"];
$p=$sum["total"];
$cbm=$sum["cbm"];
if($p)$margin=100*($p-$p_pur)/$p;
else $margin=0;
if(!$p)$p=number_format(0,2,",",".");
$rvs=$GLOBALS['db']->fetchByAssoc($GLOBALS['db']->query("select value from ecmsalesreports_predictions_cat where account_id='".$_REQUEST['account']."' and year='".$year."' and month='".$i."' and bean_id='".$rr['id']."' and type='sale'"));
$rvq=$GLOBALS['db']->fetchByAssoc($GLOBALS['db']->query("select value from ecmsalesreports_predictions_cat where account_id='".$_REQUEST['account']."' and year='".$year."' and month='".$i."' and bean_id='".$rr['id']."' and type='qty'"));
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$p_qty);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$avg_p_qty/$mmm);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$p);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$avg_p/$mmm);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$p_pur);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$avg_p_pur/$mmm);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$margin);
$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$cbm);
//$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$rvs['value']);
//$objPHPExcel->getActiveSheet()->SetCellValue($alf[$col++].$m,$rvq['value']);
}
$m++;
}
}
}
$objPHPExcel->getActiveSheet()->setTitle('Simple');
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->duplicateStyleArray(
array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'color' => array('argb' => 'F0F0F0')
),
'borders' => array(
'bottom' => array('style' => PHPExcel_Style_Border::BORDER_THIN),
'right' => array('style' => PHPExcel_Style_Border::BORDER_MEDIUM)
)
),
"A".($m).":EH".($m)
);
$objPHPExcel->getActiveSheet()->duplicateStyleArray(
array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'color' => array('argb' => 'BBDDFF')
),
'borders' => array(
'bottom' => array('style' => PHPExcel_Style_Border::BORDER_THIN),
'right' => array('style' => PHPExcel_Style_Border::BORDER_MEDIUM)
)
),
"DY1:EH".($m)
);
$objPHPExcel->getActiveSheet()->duplicateStyleArray(
array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'color' => array('argb' => '75BAFF')
),
'borders' => array(
'bottom' => array('style' => PHPExcel_Style_Border::BORDER_THIN),
'right' => array('style' => PHPExcel_Style_Border::BORDER_MEDIUM)
)
),
"DY".($m).":EH".($m)
);
$objPHPExcel->getActiveSheet()->duplicateStyleArray(
array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'color' => array('argb' => 'FFCCFFCC')
),
'borders' => array(
'bottom' => array('style' => PHPExcel_Style_Border::BORDER_THIN),
'right' => array('style' => PHPExcel_Style_Border::BORDER_MEDIUM)
)
),
"A1:EH1"
);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
chmod("cache/upload",0777);
$microtime=str_replace(".","",str_replace(" ","",microtime()));
$name="cache/upload/Report".$microtime.".xlsx";
$objWriter->save($name);
chmod($name,0777);
header("Location: ".$name);
?>