query($queryUsers); while ($rowUser = $db->fetchByAssoc($rowsUsers)) { $users["first"] = $rowUser["first"]; $users["last"] = $rowUser["last"]; $users["id"] = $rowUser["id"]; $datausers[] = $users; } if ($searchBy == "contractor") { $groupBy = "name"; } else { $groupBy = "id"; } if ($searchBy == "product") { $query = "SELECT pozycja.name, pozycja.ecmproduct_id as 'id', faktura.parent_id as 'parent_id', produkt.code as 'code', faktura.type as 'type', sum( CASE WHEN faktura.type!='correct' THEN CASE WHEN faktura.currency_value_nbp is null or faktura.currency_value_nbp='' or faktura.currency_value_nbp=0 THEN pozycja.total_netto ELSE pozycja.total_netto*faktura.currency_value_nbp END ELSE CASE WHEN pozycja.old_ecminvoiceoutitem_id IS null OR pozycja.old_ecminvoiceoutitem_id='' THEN 0 ELSE CASE WHEN faktura.currency_value_nbp is null or faktura.currency_value_nbp='' or faktura.currency_value_nbp=0 THEN pozycja.total_netto-pozycja.old_total_netto ELSE (pozycja.total_netto-pozycja.old_total_netto)*faktura.currency_value_nbp END END END ) as netto, sum( CASE WHEN faktura.type!='correct' THEN pozycja.quantity ELSE pozycja.quantity_corrected END ) as ilosc,"; if ($reportSales === 1) { $query .= " sum( CASE WHEN faktura.type!='correct' THEN produkt.cena_produkcyjna*pozycja.quantity ELSE produkt.cena_produkcyjna*pozycja.quantity_corrected END ) as koszt"; } else { $query .= " sum( CASE WHEN faktura.type!='correct' THEN pozycja.price_purchase*pozycja.quantity ELSE pozycja.price_purchase*pozycja.quantity_corrected END ) as koszt"; } $query .= " FROM ecminvoiceoutitems pozycja JOIN ecminvoiceouts faktura ON pozycja.ecminvoiceout_id = faktura.id LEFT JOIN ecmproducts produkt ON pozycja.ecmproduct_id = produkt.id WHERE faktura.register_date BETWEEN '" . $date_from_to_query->format('Y-m-d') . "' AND '" . $date_to_to_query->format('Y-m-d') . "' and faktura.type like '" . $searchByType . "' and faktura.canceled = 0 and faktura.deleted= 0"; if ($selectPdfType != "") $query .= " and faktura.pdf_type='$selectPdfType'"; $query .= " and pozycja.deleted= 0 "; if ($group_ks != '%') { $query .= "AND produkt.group_ks LIKE '$group_ks'"; } $query .= "GROUP BY pozycja.id COLLATE utf8_polish_ci;"; } else if ($searchBy == "contractor") { $query = "SELECT faktura.parent_name as 'name', faktura.parent_id as 'parent_id', pozycja.name as 'product_name', pozycja.ecmproduct_id as 'id', faktura.type as 'type', acco.parent_id as 'parent2', faktura.parent_name as 'parent', sum( CASE WHEN faktura.type!='correct' THEN CASE WHEN faktura.currency_value_nbp is null or faktura.currency_value_nbp='' or faktura.currency_value_nbp=0 THEN pozycja.total_netto ELSE pozycja.total_netto*faktura.currency_value_nbp END ELSE CASE WHEN faktura.currency_value_nbp is null or faktura.currency_value_nbp='' or faktura.currency_value_nbp=0 THEN pozycja.total_netto_corrected ELSE pozycja.total_netto_corrected * faktura.currency_value_nbp END END ) as netto, sum( CASE WHEN faktura.type!='correct' THEN pozycja.quantity ELSE pozycja.quantity_corrected END ) as ilosc,"; if ($reportSales === 1) { $query .= " sum( CASE WHEN faktura.type!='correct' THEN produkt.cena_produkcyjna*pozycja.quantity ELSE 0 END ) as koszt"; } else { $query .= " sum( CASE WHEN faktura.type!='correct' THEN pozycja.price_purchase*pozycja.quantity ELSE 0 END ) as koszt"; } $query .= " FROM ecminvoiceoutitems pozycja JOIN ecminvoiceouts faktura ON pozycja.ecminvoiceout_id = faktura.id LEFT JOIN ecmproducts produkt ON pozycja.ecmproduct_id = produkt.id JOIN accounts acco ON acco.id = faktura.parent_id WHERE faktura.register_date BETWEEN '" . $date_from_to_query->format('Y-m-d') . "' AND '" . $date_to_to_query->format('Y-m-d') . "' and faktura.type like '" . $searchByType . "' and faktura.canceled = 0 and faktura.deleted= 0"; if ($selectPdfType != "") $query .= " and faktura.pdf_type='$selectPdfType'"; $query .= " and pozycja.deleted= 0 and produkt.group_ks LIKE '$group_ks'"; $query .= "GROUP BY pozycja.id COLLATE utf8_polish_ci;"; } //echo $query; /*****************************************************/ /*************** GET DATA FROM DB*********************/ /*****************************************************/ $rows = $db->query($query); // prepare data for Smarty while ($r = $db->fetchByAssoc($rows)) { $row = prepareRow($r, $selectUser, $searchBy); if ($row != null) { $data[] = $row; } } if (1 == 1) { // E-Commerce data $ecommercerows = getEcommerceData($date_from_to_query, $date_to_to_query, 'allegro', $searchByType, $searchBy); foreach ($ecommercerows as $r) { $row = prepareRow($r, $selectUser, $group_media_saturn_holding); if ($row) { $data[] = $row; } } $ecommercerows = getEcommerceData($date_from_to_query, $date_to_to_query, 'shop', $searchByType, $searchBy); foreach ($ecommercerows as $r) { $row = prepareRow($r, $selectUser, $group_media_saturn_holding); if ($row) { $data[] = $row; } } } if ($searchBy != "") { ////////////////// SUM ///////////////////////////////// foreach ($data as $key => &$element) { if ($element["netto"] != 0) { $categoryArray[$element["kategoria"] == "" ? "Inne" : $element["kategoria"]][$element["podkategoria"] == "" ? "Reszta" : $element["podkategoria"]][$key] = $element; } else { //echo "Nie przechodzi:
"; //print_r( $element ); } } foreach ($categoryArray as $key => &$element) { foreach ($element as $keyy => &$elementt) { foreach ($elementt as $keyyy => &$elementtt) { $sumSub["IloscSum"][$key] += $elementtt["ilosc"]; $sumSub["SoldSum"][$key] += $elementtt["netto"]; //if($elementtt["type"]=="normal") //{ $sumSub["SoldSumNormal"][$key] += $elementtt["netto"]; $sumSub["IloscNormal"][$key] += $elementtt["ilosc"]; //}else{ // $sumSub["SoldSumNormal"][$key] += 0; //$sumSub["IloscNormal"][$key] += 0; // } $sumSub["KosztSum"][$key] += $elementtt["koszt"]; $sumSub2["IloscSum"][$key][$keyy] += $elementtt["ilosc"]; $sumSub2["SoldSum"][$key][$keyy] += $elementtt["netto"]; //if($elementtt["type"]=="normal") //{ $sumSub2["SoldSumNormal"][$key][$keyy] += $elementtt["netto"]; $sumSub2["IloscNormal"][$key][$keyy] += $elementtt["ilosc"]; //}else{ // $sumSub2["SoldSumNormal"][$key][$keyy] += 0; // $sumSub2["IloscNormal"][$key][$keyy] += 0; //} $sumSub2["KosztSum"][$key][$keyy] += $elementtt["koszt"]; } $categoryArray[$key][$keyy]["IloscSum2"] = $sumSub2["IloscSum"][$key][$keyy]; $categoryArray[$key][$keyy]["SoldSum2"] = $sumSub2["SoldSum"][$key][$keyy]; $categoryArray[$key][$keyy]["SoldSumNormal2"] = $sumSub2["SoldSumNormal"][$key][$keyy]; $categoryArray[$key][$keyy]["IloscNormal2"] = $sumSub2["IloscNormal"][$key][$keyy]; $categoryArray[$key][$keyy]["KosztSum2"] = $sumSub2["KosztSum"][$key][$keyy]; } $categoryArray[$key]["IloscSum"] = $sumSub["IloscSum"][$key]; $categoryArray[$key]["SoldSum"] = $sumSub["SoldSum"][$key]; $categoryArray[$key]["SoldSumNormal"] = $sumSub["SoldSumNormal"][$key]; $categoryArray[$key]["IloscNormal"] = $sumSub["IloscNormal"][$key]; $categoryArray[$key]["KosztSum"] = $sumSub["KosztSum"][$key]; } foreach ($categoryArray as $key => &$element) { $sum["IloscSumSum"] += $sumSub["IloscSum"][$key]; $sum["SoldSumSum"] += $sumSub["SoldSum"][$key]; $sum["SoldSumSumNormal"] += $sumSub["SoldSumNormal"][$key]; $sum["IloscNormal"] += $sumSub["IloscNormal"][$key]; $sum["KosztSumSum"] += $sumSub["KosztSum"][$key]; } $sum["SredniaSumSum"] = $sum["SoldSumSumNormal"] / $sum["IloscNormal"]; $sum["MarzaSumSum"] = ($sum["SoldSumSumNormal"] - $sum["KosztSumSum"]) / $sum["SoldSumSumNormal"] * 100; function cmp($a, $b) { if ($a['name'] == $b['name']) { return 0; } return ($a['name'] < $b['name']) ? -1 : 1; } function cmp2($a, $b) { if ($a['id'] == $b['id']) { return 0; } return ($a['id'] < $b['id']) ? -1 : 1; } // grupowanie po kontrahentach foreach ($categoryArray as $key1 => &$element1) { foreach ($element1 as $key2 => &$element2) { $tmp2[$key1][$key2]["IloscSum2"] = $categoryArray[$key1][$key2]["IloscSum2"]; $tmp2[$key1][$key2]["SoldSum2"] = $categoryArray[$key1][$key2]["SoldSum2"]; $tmp2[$key1][$key2]["SoldSumNormal2"] = $categoryArray[$key1][$key2]["SoldSumNormal2"]; $tmp2[$key1][$key2]["IloscNormal2"] = $categoryArray[$key1][$key2]["IloscNormal2"]; $tmp2[$key1][$key2]["KosztSum2"] = $categoryArray[$key1][$key2]["KosztSum2"]; if ($searchBy == "contractor") { usort($element2, "cmp"); } else { usort($element2, "cmp2"); } $i = 0; $tmp2[$key1][$key2][0] = array('name' => null); foreach ($element2 as $count => &$element3) { if ($element3[$groupBy] != $tmp2[$key1][$key2][$i][$groupBy]) { if ($tmp2[$key1][$key2][$i][$groupBy] != null) { $i++; } $tmp2[$key1][$key2][$i]["id"] = $element3["id"]; $tmp2[$key1][$key2][$i]["name"] = $element3["name"]; $tmp2[$key1][$key2][$i]["code"] = $element3["code"]; $tmp2[$key1][$key2][$i]["parent_id"] = $element3["parent_id"]; } //if($element3["type"]=="normal") //{ $tmp2[$key1][$key2][$i]["nettoNormal"] += $element3["netto"]; $tmp2[$key1][$key2][$i]["IloscNormal"] += $element3["ilosc"]; //} $tmp2[$key1][$key2][$i]["ilosc"] += $element3["ilosc"]; $tmp2[$key1][$key2][$i]["netto"] += $element3["netto"]; $tmp2[$key1][$key2][$i]["koszt"] += $element3["koszt"]; } $tmp2[$key1]["IloscSum"] = $categoryArray[$key1]["IloscSum"]; $tmp2[$key1]["SoldSum"] = $categoryArray[$key1]["SoldSum"]; $tmp2[$key1]["SoldSumNormal"] = $categoryArray[$key1]["SoldSumNormal"]; $tmp2[$key1]["IloscNormal"] = $categoryArray[$key1]["IloscNormal"]; $tmp2[$key1]["KosztSum"] = $categoryArray[$key1]["KosztSum"]; $sumSub2["MarzaSum"][$key1][$key2] = ($tmp2[$key1][$key2]["SoldSumNormal2"] - $tmp2[$key1][$key2]["KosztSum2"]) / $tmp2[$key1][$key2]["SoldSumNormal2"] * 100; $sumSub2["SredniaSum"][$key1][$key2] = $tmp2[$key1][$key2]["SoldSumNormal2"] / $tmp2[$key1][$key2]["IloscNormal2"]; if ($key2 == "Reszta") { if (is_array($sumSub2["SredniaSum"][$key1][$key2]) || $sumSub2["SredniaSum"][$key1][$key2] == '') { $sumSub2["SredniaSum"][$key1][$key2] = 0; } } $count1++; $tmp2[$key1][$key2]["SredniaSum2"] = $sumSub2["SredniaSum"][$key1][$key2]; $tmp2[$key1][$key2]["MarzaSum2"] = $sumSub2["MarzaSum"][$key1][$key2]; } $sumSub["MarzaSum"][$key1] = ($tmp2[$key1]["SoldSumNormal"] - $tmp2[$key1]["KosztSum"]) / $tmp2[$key1]["SoldSumNormal"] * 100; $sumSub["SredniaSum"][$key1] = $tmp2[$key1]["SoldSumNormal"] / $tmp2[$key1]["IloscNormal"]; $tmp2[$key1]["SredniaSum"] = $sumSub["SredniaSum"][$key1]; $tmp2[$key1]["MarzaSum"] = $sumSub["MarzaSum"][$key1]; $categoryArray1 = $tmp2; } ////////////////// SORT sumSub ///////////////////////////////// foreach ($categoryArray1 as $key1 => &$element) { foreach ($element as $key2 => &$elements) { foreach ($element as $key3 => &$element2) { if ($sumSub2["SoldSum"][$key1][$key2] > $sumSub2["SoldSum"][$key1][$key3]) { $tmp = $sumSub2["SoldSum"][$key1][$key2]; $sumSub2["SoldSum"][$key1][$key2] = $sumSub2["SoldSum"][$key1][$key3]; $sumSub2["SoldSum"][$key1][$key3] = $tmp; } } } } foreach ($sumSub["SoldSum"] as $key1 => &$element) { foreach ($sumSub["SoldSum"] as $key2 => &$element2) { if ($sumSub["SoldSum"][$key1] > $sumSub["SoldSum"][$key2]) { $tmp = $sumSub["SoldSum"][$key1]; $sumSub["SoldSum"][$key1] = $sumSub["SoldSum"][$key2]; $sumSub["SoldSum"][$key2] = $tmp; } } } ////////////////// SORT array ///////////////////////////////// $newArray2; foreach ($sumSub["SoldSum"] as $key1 => &$element1) { foreach ($categoryArray1 as $key2 => &$element2) { if ($sumSub["SoldSum"][$key1] == $categoryArray1[$key2]["SoldSum"]) { $newArray2[$key2] = $categoryArray1[$key2]; } } } $newArray1; foreach ($newArray2 as $key1 => &$element1) { foreach ($element1 as $key2 => &$element2) { foreach ($element1 as $key3 => &$element3) { if ($sumSub2["SoldSum"][$key1][$key2] == $newArray2[$key1][$key3]["SoldSum2"]) { $newArray1[$key1][$key3] = $newArray2[$key1][$key3]; } } } } //wyliczanie dokładne marży i średniej dla produktów foreach ($newArray1 as $key1 => &$element1) { foreach ($element1 as $key2 => &$element2) { foreach ($element2 as $key3 => &$element3) { $newArray1[$key1][$key2][$key3]["marza"] = ($newArray1[$key1][$key2][$key3]["nettoNormal"] - $newArray1[$key1][$key2][$key3]["koszt"]) / $newArray1[$key1][$key2][$key3]["nettoNormal"] * 100; $newArray1[$key1][$key2][$key3]["srednia"] = $newArray1[$key1][$key2][$key3]["nettoNormal"] / $newArray1[$key1][$key2][$key3]["IloscNormal"]; } } } } function prepareRow($r, $selectUser, $searchBy) { $db = $GLOBALS['db']; $row = array(); $row["id"] = $r["id"]; if ($r["parent2"] == 1249) $row["name"] = "Media Saturn Holding"; else $row["name"] = $r["name"]; $row["code"] = $r["code"]; $row["parent_id"] = $r["parent_id"]; $row["type"] = $r["type"]; $userBool = 1; if ($selectUser != "") { $userBool = 0; $querySelectUsers = "SELECT user.id, first_name as 'first', last_name as 'last' FROM accounts acc JOIN users user ON acc.assigned_user_id=user.id WHERE acc.id='" . $r["parent_id"] . "';"; $rowsSelectUsers = $db->query($querySelectUsers); while ($rowSelectUser = $db->fetchByAssoc($rowsSelectUsers)) { if ($rowSelectUser["id"] == $selectUser) { $userBool = 1; } else { $userBool = 0; } } } if ($userBool == 1) { if ($searchBy == "contractor") { $row["product_name"] = $r["product_name"]; } else { $row["product_name"] = $r["name"]; } $querySubCategory = "SELECT category.name as 'podkategoria' FROM ecmproductcategories_bean bean JOIN ecmproductcategories category ON bean.ecmproductcategory_id = category.id WHERE bean.bean_id='" . $row["id"] . "' and bean.position = '1' and bean.deleted = '0' and category.deleted = '0';"; $rowsSubCategory = $db->query($querySubCategory); while ($rowSubCategory = $db->fetchByAssoc($rowsSubCategory)) { $row["podkategoria"] = $rowSubCategory["podkategoria"]; } $queryCategory = "SELECT category.name as 'kategoria' FROM ecmproductcategories_bean bean JOIN ecmproductcategories category ON bean.ecmproductcategory_id = category.id WHERE bean.bean_id='" . $row["id"] . "' and bean.position = '0' and bean.deleted = '0' and category.deleted = '0';"; $rowscategory = $db->query($queryCategory); while ($rowcategory = $db->fetchByAssoc($rowscategory)) { $row["kategoria"] = $rowcategory["kategoria"]; } $row["ilosc"] = $r["ilosc"]; $row["netto"] = $r["netto"]; $row["srednia"] = $row["netto"] / $row["ilosc"]; $row["koszt"] = $r["koszt"]; //if($row["netto"]>$row["koszt"]) //{ $row["marza"] = ($row["netto"] - $row["koszt"]) / ($row["netto"]) * 100; //}else{ //$row["marza"] = 0; //} return $row; } return null; } function getEcommerceData($date_from_to_query, $date_to_to_query, $type, $inv_type, $searchBy) { $db = $GLOBALS['db']; $data = []; if ($inv_type == 'correct') { $inv_type = 'correcting'; } if ($searchBy == 'product') { $query = " SELECT ip.ecmproduct_id AS id, p.name, p.code, SUM(CASE WHEN i.type ='normal' THEN ip.price_netto * ip.quantity ELSE (ip.price_netto * ip.quantity) - (ipc.price_netto * ipc.quantity) END) AS netto, SUM(CASE WHEN i.type ='normal' THEN ip.quantity ELSE ip.quantity - ipc.quantity END) AS ilosc FROM ecommerce_invoices_products AS ip INNER JOIN ecmproducts AS p ON p.id = ip.ecmproduct_id INNER JOIN ecommerce_invoices AS i ON i.id = ip.invoice_id LEFT JOIN ecommerce_invoices_products AS ipc ON ipc.invoice_id = i.corrected_invoice_id AND ipc.ecmproduct_id = ip.ecmproduct_id WHERE i.register_date BETWEEN '" . $date_from_to_query->format('Y-m-d') . "' AND '" . $date_to_to_query->format('Y-m-d') . "' AND i.origin = '$type' AND i.type LIKE '$inv_type' GROUP BY ip.ecmproduct_id"; } else { if ($type == 'allegro') { $parentName = 'Allegro'; } else { $parentName = 'ABC-Czystosci.pl'; } $query = " SELECT ip.ecmproduct_id AS id, p.name AS product_name, '$parentName' AS name, p.code, SUM(CASE WHEN i.type ='normal' THEN ip.price_netto * ip.quantity ELSE (ip.price_netto * ip.quantity) - (ipc.price_netto * ipc.quantity) END) AS netto, SUM(CASE WHEN i.type ='normal' THEN ip.quantity ELSE ip.quantity - ipc.quantity END) AS ilosc FROM ecommerce_invoices_products AS ip INNER JOIN ecmproducts AS p ON p.id = ip.ecmproduct_id INNER JOIN ecommerce_invoices AS i ON i.id = ip.invoice_id LEFT JOIN ecommerce_invoices_products AS ipc ON ipc.invoice_id = i.corrected_invoice_id AND ipc.ecmproduct_id = ip.ecmproduct_id WHERE i.register_date BETWEEN '" . $date_from_to_query->format('Y-m-d') . "' AND '" . $date_to_to_query->format('Y-m-d') . "' AND i.origin = '$type' AND i.type LIKE '$inv_type' GROUP BY ip.ecmproduct_id"; } $rows = $db->query($query); while ($r = $db->fetchByAssoc($rows)) { if ($type == 'allegro') { $r['parent'] = "Allegro"; $r['parent_id'] = "allegro"; $r['contructor_id'] = "allegro"; } else if ($type == 'shop') { $r['parent'] = "ABC-Czystosci.pl"; $r['parent_id'] = "abc-czystosci.pl"; $r['contructor_id'] = "abc-czystosci.pl"; } $q = " SELECT AVG(i.price) AS sell_price FROM ecmstockdocoutitems AS i INNER JOIN ecmstockdocouts AS o ON i.ecmstockdocout_id = o.id WHERE i.ecmproduct_id = '{$r['id']}' AND o.delivery_date BETWEEN '{$date_from_to_query->format('Y-m-d')}' AND '{$date_to_to_query->format('Y-m-d')}' AND o.parent_id = 'b5612f7f-85e5-f930-293e-62cead14b424' "; $price = $db->query($q); $price = $db->fetchByAssoc($price); $r['koszt'] = $price['sell_price'] * $r['ilosc']; $data[] = $r; } return $data; }