0)) { $result = ""; while ($num > 36) { $digit = floor($num / 36); $result .= chr(64+$digit); $num -= $digit*36; } $result .= chr(64+$num); return $result; } return false; } require_once("/var/www/html/pdoDbSettings.php"); $pdo = getConnectedPDO(); $prodCatsAr = array( "42ac50da-efa0-9baa-51cc-50efc73a1fc6"=>"Перчатки",//1. Перчатки хлопчатобумажные "b7ece599-c211-52fd-2f30-5c21f1a851ca"=>"1-ый и 2-ой облив",//1-ый и 2-ой облив "d2ca8d1d-e078-4276-c733-5488539d35e6"=>"Стрейч пленка",//Стрейч пленка "c5d5d05c-a672-08bb-5f3b-59cb95299ef3"=>"Ветошь",//Ветошь "11c0b754-1d90-b446-897f-50f0127599d9"=>"Рукавицы",//Рукавицы брезентовые (Б) "35187def-c640-b3a7-49b6-50f0132a19f4"=>"Рукавицы",//Рукавицы Х/Б с ПВХ (ПВХ) "42491a8d-5c94-a75f-93d9-59cb986b64ba"=>"Вафельное полотно",//Вафельное полотно "56e605af-31df-9377-5322-50f0124b66d1"=>"Рукавицы",//5. Рукавицы "6ff329ee-e7fc-20c0-6112-50f01331b43a"=>"Рукавицы",//Рукавицы утепленные (У) "736d038b-2a67-9b28-8826-599fdb712ce7"=>"Рукавицы",//Непрайсовые позиции "838e02dc-b7a3-8925-01de-50f012fed81c"=>"Рукавицы",//Рукавицы Х/Б с брезентовым наладонником (БН) "8bc1b69f-4587-53de-9833-50efc755f01c"=>"Перчатки",//Стандартные перчатки "9d64752a-9e76-1cd4-1745-5d8492a98899"=>"Рукавицы",//Стандартные "a5b4998f-c711-a7e2-9763-50f013aa6159"=>"Рукавицы",//Рукавицы Х/Б с двойным наладонником (ХБ) "b8d58f4e-e6f3-bdf7-936c-599fdedd4a3c"=>"Перчатки"//Непрайсовые позиции // "e76d9a86-2eaa-3a1e-4d22-599fe82188cb"=>"Рукавицы",//Удалённые рукавицы ); //$prodCatsAr = array( // "b7ece599-c211-52fd-2f30-5c21f1a851ca"=>"1-ый и 2-ой облив",//1-ый и 2-ой облив //); $storeHousesAr = array( "b31e659f-9cf5-f1fc-69f4-58d2193e3165"=>"Волгоград",//Волгоград "b01b9d51-6f5e-5a8b-265c-5aa8e9606ffc"=>"Волгоград",//ВолгоградОпт "4427d09b-ad34-ee44-6927-5feb104e7065"=>"Вологда",//Вологда "1a564d26-ceb0-e648-1032-5feb11212fcc"=>"Вологда",//ВологдаОпт "4b17e5a9-65be-6ee2-3d0f-587f6d4ead7d"=>"Воронеж",//Воронеж "348b0147-5292-9deb-12d4-5aa8ea7cb04a"=>"Воронеж",//ВоронежОпт "595a4245-1533-aaec-6bf6-521f64e63dc7"=>"Екатеринбург",//Екатеринбург "98cd55ab-44bf-ac55-5226-5aa8eabea1a1"=>"Екатеринбург",//ЕкатеринбургОпт "6c5e57b7-01d2-66df-84be-59d356a9b000"=>"Иваново",//Иваново "4977d392-e516-7dca-1b8a-5aa8ebb3193a"=>"Иваново",//ИвановоОпт "c0137333-f5c8-d984-0dcb-57ac638d9325"=>"Казань",//Казань "961933e6-f469-9d49-badb-5aa8eb979738"=>"Казань",//КазаньОпт "b7e0524f-009b-8baf-a92b-5d7f2c1148d7"=>"Калининград",//Калининград "bbab1405-aacb-cd67-fc5e-5d7f2d082ae3"=>"Калининград",//КалининградОпт "a2e4eff4-6f7c-bbc5-eab1-5f19451a0c02"=>"Киров",//Киров "9f821559-4540-9ddd-65d6-5f1945f4e7ae"=>"Киров",//КировОпт "f190b8ce-5c0c-ce37-9189-59a7c51743fd"=>"Краснодар",//Краснодар "856d1bfe-f0b6-2005-7ea3-5aa8fa85c345"=>"Краснодар",//КраснодарОпт "2d5e4c1d-871e-0457-1a2a-59f18a49b156"=>"Красноярск",//Красноярск "4135e5ce-ad10-49fc-16e8-5aa8fbae4634"=>"Красноярск",//КрасноярскОпт "6bc70599-a010-8693-9852-521f63ec00d0"=>"Москва",//Москва "aba42502-f34d-a98c-5bb2-5aa8fd409444"=>"Москва",//МоскваОпт "8e4b5aed-651f-807e-bc2e-5800d4ac75ac"=>"Нижний Новгород",//Нижний Новгород "efb4a69b-a2f9-0644-0610-5aa8fd0a3356"=>"Нижний Новгород",//Нижний НовгородОпт "53597ab1-4d5d-9b3c-82a4-5253b77a0bd2"=>"Новосибирск",//Новосибирск "7b14f7fe-10b6-e0cc-7c87-5aa8fe446eb3"=>"Новосибирск",//НовосибирскОпт "f075eecb-a163-7161-ec46-54f03999ef45"=>"Омск",//Омск "c4ca938e-ef80-5904-1ebd-5aa8fe5de911"=>"Омск",//ОмскОпт "254df18c-3d66-257d-4e66-59faf2ee9230"=>"Орел",//Орел "80aefcd3-e0c1-7f6a-c3c7-5aa8fe855750"=>"Орел",//ОрелОпт "58418df6-9e44-9901-8ff3-5f439faf5fbf"=>"Оренбург",//Оренбург "b468effe-b9e9-caa7-7c67-5f439f5d1231"=>"Оренбург",//ОренбургОпт "3df5eab7-5b1c-3999-9490-5a1562c46b51"=>"Пенза",//Пенза "ae2ad3c2-c1b7-0806-e302-5aa8ff74057a"=>"Пенза",//ПензаОпт "98d94d42-8438-e9b4-3eae-56b1a4c0a84f"=>"Пермь",//Пермь "57b1055a-1ba4-bc33-3773-5aa8ff4e2fc0"=>"Пермь",//ПермьОпт "bbbbe93e-d2ad-411b-78b8-592d20335ac0"=>"Ростов-на-Дону",//Ростов-на-Дону "2eec68d4-2545-fbc0-f5fe-5aa900db041a"=>"Ростов-на-Дону",//Ростов-на-ДонуОпт "7357efdd-4652-7fa7-4083-578f49a12d2f"=>"Самара",//Самара "ca14da09-c5a1-815b-2972-5aa900c1b0cd"=>"Самара",//СамараОпт "2de333f7-d1a1-e28e-a0b8-521f63631816"=>"Санкт-Петербург",//Санкт-Петербург "ddfdc9bc-54a6-8109-ffd8-5aa90103f3a5"=>"Санкт-Петербург",//Санкт-ПетербургОпт "c9721509-c42b-dcd4-1ffe-58905cc33644"=>"Саратов",//Саратов "973101d6-4afb-7676-035c-5aa901cecfa9"=>"Саратов",//СаратовОпт "13966dbc-6439-575e-14c4-6012626ab7a8"=>"Симферополь",//Симферополь "8d67c6d8-a607-431a-8dbf-60126b3d409a"=>"Симферополь",//СимферопольОпт "26307b43-3463-8acf-76a1-5f75aec8b5a5"=>"Сочи",//Сочи "e2aca205-0762-f842-28cf-5f76c6a8e15f"=>"Сочи",//СочиОпт // "37a12683-aaf4-4614-ad9e-59ccb7c54856"=>"",//Спецзаказ Иваново // "7a7f6dd9-70e7-9bef-6f2a-609b7c7c8f6f"=>"Тверь",//Тверь // "b103578a-ad3f-c22f-5c28-609b7f8f07eb"=>"Тверь",//ТверьОпт "66be57bc-a3d0-ed67-a309-55239f93f1ed"=>"Тюмень",//Тюмень "45f29e7c-2148-9c0f-401b-5aa9015a2be9"=>"Тюмень",//ТюменьОпт "4d9372ee-4b35-9852-ea9a-5a156179644e"=>"Ульяновск",//Ульяновск "4da5ab47-6cc6-9166-8f26-5aa90212ac33"=>"Ульяновск",//УльяновскОпт "3ac51b9c-17e8-4ca5-ca8c-521f662231fc"=>"Уфа",//Уфа "8e848b90-5cd8-4532-e228-5aa9029b133d"=>"Уфа",//УфаОпт "d604e5f2-0fdf-2f51-5472-521f6404b43a"=>"Челябинск",//Челябинск "df056ff1-953f-00bf-8440-5aa902c45374"=>"Челябинск",//ЧелябинскОпт ); $excludeGoodsAr = array(//Товары которые требуется исключить из отчёта "c0c7a7ac-c733-a127-9b8a-54c895848b41",//Стретч-плёнка вторичная 20мкрн., 1.8кг нетто, ш.500 мм., (ручная) "7181078c-ab11-1f42-18a5-5f3bbb325614"//Стретч-плёнка вторичная (черная) 20мкрн.,1.8кг нетто, ш.500 мм., (ручная) ); $storeHousesNamesAr = array_values(array_unique($storeHousesAr));//Массив имён городов для которых формируется отчёт $storeHousesNamesArLen = count($storeHousesNamesAr);//Количество элементов в массиве имён городов $prodCatsNamesAr = array_values(array_unique($prodCatsAr));//Массив имён категоий товаров для которых формируется отчёт $prodCatsNamesArLen = count($prodCatsNamesAr);//Количество элементов в массиве имён категорий товаров $totalQuantityAr = array();//Массив суммарного количества проданного товара по всем складам для категории $totalCost = array();//Массив суммарной стоимости проданного товара по всем складам для категории $cityProductQuantityAr = array();//Массив количества проданных товаров по складам и по категорям товаров $cityProductCostAr = array();//Массив суммы на которую проданы товары по определённому складу и категориям товаров for ($i=0;$i<$storeHousesNamesArLen;$i++) { for ($j=0;$j<$prodCatsNamesArLen;$j++) { $cityProductQuantityAr[$i][$j] = 0; $cityProductCostAr[$i][$j] = 0; } } for ($i=0;$i<$prodCatsNamesArLen;$i++) { $totalQuantityAr[$i] = 0; $totalCost[$i] = 0; } $sql = "SELECT `opportunities`.`id`, `opportunities`.`storehouse_id`, `productsale`.`count`, `productsale`.`amount`, `product`.`id` as `product_id`, `product`.`category_id` FROM `opportunities` INNER JOIN `productsale` ON `opportunities`.`id` = `productsale`.`opportunity_id` INNER JOIN `product` ON `productsale`.`product_id` = `product`.`id` WHERE (`opportunities`.`date_closed` BETWEEN '$dateBegingSQL' AND '$dateEnd') AND (`opportunities`.`sales_stage` IN ('Order send','Closed Won')) AND (`opportunities`.`deleted` = 0) AND (`productsale`.`deleted` = 0) AND (`product`.`deleted` = 0) AND (`product`.`category_id` IN ('" . implode(array_keys($prodCatsAr),"','") . "'))"; $stmp = $pdo->prepare($sql); //echo "$sql\n"; $stmp->execute(); $i = 0; while ($row = $stmp->fetch()) { if (!in_array($row["product_id"],$excludeGoodsAr)) { $cityProductQuantityAr[$keyCity = array_search($storeHousesAr[$row["storehouse_id"]],$storeHousesNamesAr)][$keyCat = array_search($prodCatsAr[$row["category_id"]],$prodCatsNamesAr)] += $row["count"]; $cityProductCostAr[$keyCity][$keyCat] += $row["amount"]; $i++;//var_dump($row); } } //var_dump($cityProductQuantityAr);echo "";var_dump($cityProductCostAr); $dateBeging = date("d.m.Y",$dateBeging); $dateEnd = date("d.m.Y",$time); echo "\n"; echo "Город\n"; for ($i=0;$i<$prodCatsNamesArLen;$i++) { echo "" . $prodCatsNamesAr[$i] . "\n"; } echo "\n"; echo "\n"; for ($i=0;$i<$prodCatsNamesArLen;$i++) { echo "Количество\n"; echo "Сумма\n"; } echo "\n"; for ($i=0;$i<$storeHousesNamesArLen;$i++) { echo "\n"; echo "" . $storeHousesNamesAr[$i] . "\n"; for ($j=0;$j<$prodCatsNamesArLen;$j++) { echo "" . $cityProductQuantityAr[$i][$j] . "\n" . $cityProductCostAr[$i][$j] . "\n"; $totalQuantityAr[$j] += $cityProductQuantityAr[$i][$j]; $totalCost[$j] += $cityProductCostAr[$i][$j]; } echo "\n"; } echo "\n"; require_once "/var/www/html/nikolaevevge/Classes/PHPExcel.php"; require_once "/var/www/html/nikolaevevge/Classes/PHPExcel/Writer/Excel2007.php"; $xls = new PHPExcel(); $xls->getProperties()->setTitle("Отчёт о продажах за неделю"); $xls->getProperties()->setSubject("Отчёт о продажах за неделю"); $xls->getProperties()->setCreator("Робот CRM"); //$xls->getProperties()->setManager("Руководитель"); $xls->getProperties()->setCompany("Лидер Текс"); //$xls->getProperties()->setCategory("Группа"); $xls->getProperties()->setKeywords("Отчёт, продажи, неделя"); //$xls->getProperties()->setDescription("Примечания"); //$xls->getProperties()->setLastModifiedBy("Автор изменений"); //$xls->getProperties()->setCreated("25.03.2019"); $xls->setActiveSheetIndex(0); $sheet = $xls->getActiveSheet(); $sheet->setTitle('Продажи'); $sheet->setCellValue("A1","Отчёт по продажам за период $dateBeging - $dateEnd"); $sheet->mergeCells("A1:G1"); for ($i=0;$i<$prodCatsNamesArLen;$i++) { $sheet->mergeCells(excelCol(($i+1)*2)."3:" . excelCol((($i+1)*2)+1) . "3"); $sheet->setCellValue(excelCol(($i+1)*2)."3",$prodCatsNamesAr[$i]); $sheet->getStyle(excelCol(($i+1)*2)."3")->getFont()->setBold(true); //echo (excelCol(($i+1)*2)."3:" . excelCol((($i+1)*2)+1) . "3"); //echo excelCol((($i+1)*2)+1) . "3:" . excelCol((($i+1)*2)+1) . "3"; //echo excelCol(($i+1)*2)."3:" . excelCol((($i+1)*2)+1) . "3"; } $sheet->setCellValue("A3","Город"); $sheet->getColumnDimension("A")->setWidth(25); for ($i=0;$i<$prodCatsNamesArLen;$i++) { $sheet->setCellValue(excelCol(($i+1)*2)."4","Количество"); $sheet->setCellValue(excelCol((($i+1)*2)+1)."4","Сумма"); $sheet->getColumnDimension(excelCol(($i+1)*2))->setWidth(13); $sheet->getColumnDimension(excelCol((($i+1)*2)+1))->setWidth(13); } for ($i=0;$i<$storeHousesNamesArLen;$i++) { $sheet->setCellValue("A".($i+5),$storeHousesNamesAr[$i]); $sheet->getStyle("A".($i+5))->getFont()->setBold(true); for ($j=0;$j<$prodCatsNamesArLen;$j++) { $sheet->setCellValue(excelCol(($j+1)*2).($i+5),$cityProductQuantityAr[$i][$j]); $sheet->setCellValue(excelCol((($j+1)*2)+1).($i+5),$cityProductCostAr[$i][$j]); } } $sheet->setCellValue("A".($i+5),"Итого"); $sheet->getStyle("A".($i+5))->getFont()->setBold(true); for ($j=0;$j<$prodCatsNamesArLen;$j++) {//Итого $sheet->setCellValue(excelCol(($j+1)*2).($i+5),$totalQuantityAr[$j]); $sheet->setCellValue(excelCol((($j+1)*2)+1).($i+5),$totalCost[$j]); } $border = array( "borders" => array( "allborders" => array( "style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("rgb" => "000000") ) ) ); $sheet->getStyle("A3:M33")->applyFromArray($border); //Стретч-плёнка вторичная 20мкрн., 1.8кг нетто, ш.500 мм., (ручная) - c0c7a7ac-c733-a127-9b8a-54c895848b41 //Стретч-плёнка вторичная (черная) 20мкрн.,1.8кг нетто, ш.500 мм., (ручная) - 7181078c-ab11-1f42-18a5-5f3bbb325614 $sheet->setCellValue("A35","Примечание: из отчёта исключены товары: Стретч-плёнка вторичная 20мкрн., 1.8кг нетто, ш.500 мм., (ручная) и Стретч-плёнка вторичная (черная) 20мкрн.,1.8кг нетто, ш.500 мм., (ручная)"); $sheet->mergeCells("A35:W35"); $name = str_replace(".","-","salesReport$dateEnd").".xlsx"; $fileDir = "/var/www/html/reportsToMail/weeklySales/"; $fileAdr = "$fileDir$name"; $objWriter = new PHPExcel_Writer_Excel2007($xls); $objWriter->save($fileAdr); $thm = "Сформирован отчёт о продажах за период $dateBeging - $dateEnd."; $html = "Сформирован отчёт о продажах за период $dateBeging - $dateEnd.Отчёт находится в приложенном к письму файле."; $mail_to = "lygin.viktor@siz37.ru";//krylov.pavel@siz37.ru $mail_to2 = "yalovenko.andrey@siz37.ru"; $fp = fopen($fileAdr,"rb"); if (!$fp) { print "Cannot open file"; exit(); } $file = fread($fp, filesize($fileAdr)); fclose($fp); $EOL = "\r\n"; // ограничитель строк, некоторые почтовые сервера требуют \n - подобрать опытным путём $boundary = "--".md5(uniqid(time())); // любая строка, которой не будет ниже в потоке данных. $headers = "MIME-Version: 1.0;$EOL"; $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"$EOL"; $headers .= "From: robot@siz37.ru"; $multipart = "--$boundary$EOL"; $multipart .= "Content-Type: text/html; charset=UTF-8$EOL"; $multipart .= "Content-Transfer-Encoding: base64$EOL"; $multipart .= $EOL; // раздел между заголовками и телом html-части $multipart .= chunk_split(base64_encode($html)); $multipart .= "$EOL--$boundary$EOL"; $multipart .= "Content-Type: application/octet-stream; name=\"$name\"$EOL"; $multipart .= "Content-Transfer-Encoding: base64$EOL"; $multipart .= "Content-Disposition: attachment; filename=\"$name\"$EOL"; $multipart .= $EOL; // раздел между заголовками и телом прикрепленного файла $multipart .= chunk_split(base64_encode($file)); $multipart .= "$EOL--$boundary--$EOL"; mail($mail_to, $thm, $multipart, $headers); mail($mail_to2, $thm, $multipart, $headers);