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

342 lines
16 KiB
PHP
Raw Normal View History

2024-04-27 09:23:34 +02:00
<?php
require_once 'ReportSalesByContractor.inc';
/*****************************************************/
/***************** EXPORT TO EXCEL *******************/
/*****************************************************/
/**
* PHPExcel
*
* Copyright (C) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/** PHPExcel_IOFactory */
require_once dirname(__FILE__) . '/PhpExcell/Classes/PHPExcel/IOFactory.php';
// Create new PHPExcel object
echo date('H:i:s') , " Create new PHPExcel object" , EOL;
$objPHPExcel = new PHPExcel();
// Set document properties
echo date('H:i:s') , " Set document properties" , EOL;
$objPHPExcel->getProperties()->setCreator("E5")
->setLastModifiedBy("E5")
->setTitle("E5 - Report Sales")
->setSubject("E5 - Report Document")
->setDescription("Report Sales - description")
->setKeywords("e5, report, report sales")
->setCategory("Reports");
/*****************************************************/
/******************* EXCELL Styles *******************/
/*****************************************************/
// Set default widths and heights
$objPHPExcel->getActiveSheet()->getDefaultColumnDimension()->setWidth(15);
$objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(20);
$headerStyle = array(
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER,
),
'font' => array(
'bold' => true,
'color' => array('rgb' => 'FFFFFF'),
'name' => 'Verdana',
),
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'startcolor' => array(
'rgb' => '272822',
),
),
);
$categoryStyle = array(
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_RIGHT,
'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER,
),
'font' => array(
'bold' => true,
'color' => array('rgb' => 'FFFFFF'),
'name' => 'Verdana',
),
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'startcolor' => array(
'rgb' => '4E5044',
),
),
);
$subCategoryStyle = array(
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_RIGHT,
'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER,
),
'font' => array(
'bold' => true,
'color' => array('rgb' => 'FFFFFF'),
'name' => 'Verdana',
),
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'startcolor' => array(
'rgb' => '8F937D',
),
),
);
$subSubCategoryStyle = array(
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_RIGHT,
'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER,
),
'font' => array(
'bold' => true,
'color' => array('rgb' => 'FFFFFF'),
'name' => 'Verdana',
),
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'startcolor' => array(
'rgb' => 'ACB197',
),
),
);
$columnAlignRight = array(
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_RIGHT,
'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER,
),
);
$columnAlignLeft = array(
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_LEFT,
'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER,
),
);
$objPHPExcel->setActiveSheetIndex(0)->getRowDimension('1')->setRowHeight(25);
$objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('A')->setWidth(100);
$objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('B')->setWidth(18);
$objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('C')->setWidth(20);
$objPHPExcel->setActiveSheetIndex(0)->getStyle("B2:F4000")->applyFromArray($columnAlignRight);
$objPHPExcel->setActiveSheetIndex(0)->getStyle("C2:F4000")->applyFromArray($columnAlignRight);
$objPHPExcel->setActiveSheetIndex(0)->getStyle("E2:F4000")->applyFromArray($columnAlignRight);
$objPHPExcel->setActiveSheetIndex(0)->getStyle("F2:F4000")->applyFromArray($columnAlignRight);
$objPHPExcel->setActiveSheetIndex(0)->getStyle("A1:F1")->applyFromArray($headerStyle);
/*****************************************************/
/********************* EXCELL Data *******************/
/*****************************************************/
// Add header
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', $mod_strings['LBL_CONTRACTOR'] )
->setCellValue('B1', $mod_strings['LBL_SOLD_AMOUNT'])
->setCellValue('C1', $mod_strings['LBL_VALUE_SALES'])
->setCellValue('D1', $mod_strings['LBL_AVERAGE_PRICE'])
->setCellValue('E1', $mod_strings['LBL_COST'])
->setCellValue('F1', $mod_strings['LBL_MARGIN']);
/*****************************************************/
/********************* EXCELL Data *******************/
/*****************************************************/
// Add all data
$lastRowNumber = 2;
$rowNumber = 2;
foreach ( $newArray as $contractorName => $contractor )
{
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A'.($rowNumber), $contractorName)
->setCellValue('B'.($rowNumber), number_format($contractor["IloscSum"], 2, '.', ''))
->setCellValue('C'.($rowNumber), number_format($contractor["SoldSum"], 2, '.', ''))
->setCellValue('D'.($rowNumber), number_format($contractor["SredniaSum"], 2, '.', ''))
->setCellValue('E'.($rowNumber), number_format($contractor["KosztSum"], 2, '.', ''))
->setCellValue('F'.($rowNumber), number_format($contractor["MarzaSum"], 2, '.', '')." %")
->getStyle("A".$rowNumber.":F".$rowNumber)->applyFromArray($categoryStyle);
// Formatowanie walutowe
$objPHPExcel->setActiveSheetIndex(0)->getStyle('B'.($rowNumber))->getNumberFormat()->setFormatCode("#");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('C'.($rowNumber))->getNumberFormat()->setFormatCode("#,#0.#0 zł");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('D'.($rowNumber))->getNumberFormat()->setFormatCode("#,#0.#0 zł");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('E'.($rowNumber))->getNumberFormat()->setFormatCode("#,#0.#0 zł");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('F'.($rowNumber))->getNumberFormat()->setFormatCode("#0.#0");
// Nazwa kategorii wyrównane do lewej
$objPHPExcel->setActiveSheetIndex(0)->getStyle("A".$rowNumber)->applyFromArray($columnAlignLeft);
// Wyświetla kontrahentów
foreach ( $contractor as $categoryName => $category )
{
if ( $categoryName != "IloscSum" && $categoryName != "SoldSum" && $categoryName != "SredniaSum" &&
$categoryName != "KosztSum" && $categoryName != "MarzaSum" && $categoryName != "StanSum" &&
$categoryName != "WartoscSum")
{
$rowNumber++;
$lastRowNumber++;
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A'.($rowNumber), " ".$categoryName)
->setCellValue('B'.($rowNumber), number_format($category["IloscSum"], 2, '.', ''))
->setCellValue('C'.($rowNumber), number_format($category["SoldSum"], 2, '.', ''))
->setCellValue('D'.($rowNumber), number_format($category["SredniaSum"], 2, '.', ''))
->setCellValue('E'.($rowNumber), number_format($category["KosztSum"], 2, '.', ''))
->setCellValue('F'.($rowNumber), number_format($category["MarzaSum"], 2, '.', '')." %")
->getStyle("A".$rowNumber.":F".$rowNumber)->applyFromArray($subCategoryStyle);
// Formatowanie walutowe
$objPHPExcel->setActiveSheetIndex(0)->getStyle('B'.($rowNumber))->getNumberFormat()->setFormatCode("#");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('C'.($rowNumber))->getNumberFormat()->setFormatCode("#,#0.#0 zł");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('D'.($rowNumber))->getNumberFormat()->setFormatCode("#,#0.#0 zł");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('E'.($rowNumber))->getNumberFormat()->setFormatCode("#,#0.#0 zł");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('F'.($rowNumber))->getNumberFormat()->setFormatCode("#0.#0");
// Nazwa kategorii wyrównane do lewej
$objPHPExcel->setActiveSheetIndex(0)->getStyle("A".$rowNumber)->applyFromArray($columnAlignLeft);
// Wyświetla podkategorie
foreach ( $category as $subCategoryName => $subCategory )
{
if ( $subCategoryName != "IloscSum" && $subCategoryName != "SoldSum" && $subCategoryName != "SredniaSum"
&& $subCategoryName != "KosztSum" && $subCategoryName != "MarzaSum" && $subCategoryName != ""
&& $subCategoryName != "SoldSumNormal" && $subCategoryName != "IloscNormal" && $subCategoryName != "StanSum" && $subCategoryName != "WartoscSum")
{
$rowNumber++;
$lastRowNumber++;
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A'.($rowNumber), " ".$subCategoryName)
->setCellValue('B'.($rowNumber), number_format($subCategory["IloscSum"], 2, '.', ''))
->setCellValue('C'.($rowNumber), number_format($subCategory["SoldSum"], 2, '.', ''))
->setCellValue('D'.($rowNumber), number_format($subCategory["SredniaSum"], 2, '.', ''))
->setCellValue('E'.($rowNumber), number_format($subCategory["KosztSum"], 2, '.', ''))
->setCellValue('F'.($rowNumber), number_format($subCategory["MarzaSum"], 2, '.', '')." %")
->getStyle("A".$rowNumber.":F".$rowNumber)->applyFromArray($subSubCategoryStyle);
// Formatowanie walutowe
$objPHPExcel->setActiveSheetIndex(0)->getStyle('B'.($rowNumber))->getNumberFormat()->setFormatCode("#");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('C'.($rowNumber))->getNumberFormat()->setFormatCode("#,#0.#0 zł");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('D'.($rowNumber))->getNumberFormat()->setFormatCode("#,#0.#0 zł");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('E'.($rowNumber))->getNumberFormat()->setFormatCode("#,#0.#0 zł");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('F'.($rowNumber))->getNumberFormat()->setFormatCode("#0.#0");
// Nazwa produktu wyrównane do lewej
$objPHPExcel->setActiveSheetIndex(0)->getStyle("A".$rowNumber)->applyFromArray($columnAlignLeft);
$objPHPExcel->setActiveSheetIndex(0)->getRowDimension($rowNumber)->setOutlineLevel(1);
$objPHPExcel->setActiveSheetIndex(0)->getRowDimension($rowNumber)->setVisible(true);
// Wyświetla produkty
foreach ( $subCategory as $productName => $product )
{
if ( $product["name"] != "IloscSum" && $product["name"] != "SoldSum" && $product["name"] != "SredniaSum"
&& $product["name"] != "KosztSum" && $product["name"] != "MarzaSum" && $product["name"] != "" )
{
$rowNumber++;
$lastRowNumber++;
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A'.($rowNumber), " ".$product["name"])
->setCellValue('B'.($rowNumber), number_format($product["ilosc"], 2, '.', ''))
->setCellValue('C'.($rowNumber), number_format($product["netto"], 2, '.', ''))
->setCellValue('D'.($rowNumber), number_format($product["srednia"], 2, '.',''))
->setCellValue('E'.($rowNumber), number_format($product["koszt"], 2, '.', ''))
->setCellValue('F'.($rowNumber), number_format($product["marza"], 2, '.', '')." %");
// Formatowanie walutowe
$objPHPExcel->setActiveSheetIndex(0)->getStyle('B'.($rowNumber))->getNumberFormat()->setFormatCode("#");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('C'.($rowNumber))->getNumberFormat()->setFormatCode("#,#0.#0 zł");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('D'.($rowNumber))->getNumberFormat()->setFormatCode("#,#0.#0 zł");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('E'.($rowNumber))->getNumberFormat()->setFormatCode("#,#0.#0 zł");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('F'.($rowNumber))->getNumberFormat()->setFormatCode("#0.#0");
// Nazwa produktu wyrównane do lewej
$objPHPExcel->setActiveSheetIndex(0)->getStyle("A".$rowNumber)->applyFromArray($columnAlignLeft);
$objPHPExcel->setActiveSheetIndex(0)->getRowDimension($rowNumber)->setOutlineLevel(2);
$objPHPExcel->setActiveSheetIndex(0)->getRowDimension($rowNumber)->setVisible(false);
}
}
$objPHPExcel->setActiveSheetIndex(0)->getRowDimension($rowNumber+1)->setCollapsed(true);
}
}
}
}
$rowNumber++;
$lastRowNumber++;
}
// Sumy --------------------------------------------------------------------------------------------------
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A'.($lastRowNumber), "Podsumowanie: ")
->setCellValue('B'.($lastRowNumber), number_format($sum['IloscSumSum'], 2, '.', ''))
->setCellValue('C'.($lastRowNumber), number_format($sum['SoldSumSum'], 2, '.', ''))
->setCellValue('D'.($lastRowNumber), number_format($sum['SredniaSumSum'], 2, '.', ''))
->setCellValue('E'.($lastRowNumber), number_format($sum['KosztSumSum'], 2, '.', ''))
->setCellValue('F'.($lastRowNumber), number_format($sum['MarzaSumSum'], 2, '.', ''));
// Formatowanie walutowe
$objPHPExcel->setActiveSheetIndex(0)->getStyle('B'.($lastRowNumber))->getNumberFormat()->setFormatCode("#");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('C'.($lastRowNumber))->getNumberFormat()->setFormatCode("#,#0.#0 zł");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('D'.($lastRowNumber))->getNumberFormat()->setFormatCode("#,#0.#0 zł");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('E'.($lastRowNumber))->getNumberFormat()->setFormatCode("#,#0.#0 zł");
$objPHPExcel->setActiveSheetIndex(0)->getStyle('F'.($lastRowNumber))->getNumberFormat()->setFormatCode("#0.#0");
// Formatowanie wiersza sum -----------------------------------------------------------------------------
$objPHPExcel->setActiveSheetIndex(0)->getStyle("A".$lastRowNumber.":F".$lastRowNumber)->applyFromArray($headerStyle);
$objPHPExcel->setActiveSheetIndex(0)->getStyle("A".$lastRowNumber)->applyFromArray($columnAlignRight);
$objPHPExcel->setActiveSheetIndex(0)->getStyle("B".$lastRowNumber)->applyFromArray($columnAlignRight);
$objPHPExcel->setActiveSheetIndex(0)->getStyle("C".$lastRowNumber)->applyFromArray($columnAlignRight);
$objPHPExcel->setActiveSheetIndex(0)->getStyle("D".$lastRowNumber)->applyFromArray($columnAlignRight);
$objPHPExcel->setActiveSheetIndex(0)->getStyle("E".$lastRowNumber)->applyFromArray($columnAlignRight);
$objPHPExcel->setActiveSheetIndex(0)->getStyle("F".$lastRowNumber)->applyFromArray($columnAlignRight);
// Rename worksheet
$objPHPExcel->getActiveSheet()->setTitle('Raport sprzedaży');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
// Save Excel 2007 file
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save( __DIR__ . "/ExcelFiles/ReportSalesByContractor.xls");
?>