parent_id = 'a711623a-0217-41bd-ecf6-664c84553473'; $invoice->parent_name = 'Twinpol DE'; $invoice->parent_nip = '367123377'; } if ($type == 'CZ') { $invoice->parent_id = 'bf60a128-0b62-4154-c21f-6797718a6354'; $invoice->parent_name = 'Twinpol CZ'; $invoice->parent_nip = 'CZ687253791'; } $invoice->parent_address_street = 'Aleja Lipowa 48'; $invoice->parent_address_postalcode = '87-126'; $invoice->parent_address_city = 'Obrowo'; $invoice->type = 'correct'; $date = '31.01.2025'; $invoice->register_date = $date; $invoice->sell_date = $date; $invoice->validtill_date = $date; $invoice->payment_date = $invoice->register_date; $invoice->payment_date_days = 0; $invoice->payment_method = '1568e47e-1732-e0ad-0000-67b6377f26df'; $invoice->pdf_type = "K"; $invoice->currency_id = 'PLN'; global $current_user; $invoice->created_by = $current_user->id; $invoice->assigned_user_id = $current_user->id; $invoice->wz_id = ''; $invoice->wz_name = ''; $invoice->position_list = groupProductsAndFindFV($products, $invoice->parent_id, $date); $invoiceId = $invoice->position_list[0]['old_ecminvoiceout_id']; foreach ($invoice->position_list as $p) { if ($p['old_ecminvoiceout_id'] != $invoiceId) { die('Different ecminvoiceout_id in position_list'); } } $invoice->id = $invoice->position_list[0]['old_ecminvoiceout_id']; var_dump($invoice->position_list); if ($DO_REAL_SAVE) { $id = $invoice->save(); echo $id; } } function groupProductsAndFindFV($products, $client, $date) { $db = $GLOBALS['db']; $position_list = []; foreach ($products as $p) { // if last character is dot, remove it if (substr($p[10], -1) == '.') { $p[10] = substr($p[10], 0, -1); } $fromDb = $db->fetchByAssoc($db->query("SELECT id, name, code, product_category_id, unit_id FROM ecmproducts WHERE code = '$p[10]' OR amazon_code = '$p[10]'")); if ($fromDb == false) { var_dump($p); continue; } $prod = searchProduct($fromDb['id'], $position_list); if ($prod) { $prod['quantity'] += intval($p[11]); $prod['total_netto'] += floatval(str_replace(",", ".", $p[17])); foreach ($position_list as $key => $value) { if ($value['product_id'] == $prod['product_id']) { $position_list[$key] = $prod; } } } else { $prod['product_id'] = $fromDb['id']; $prod['name'] = $fromDb['name']; $prod['product_code'] = $fromDb['code']; $prod['quantity'] = intval($p[11]); $prod['total_netto'] = floatval(str_replace(",", ".", $p[17])); $prod['total_vat'] = 0; $prod['ecmvat_id'] = '9b783d21-5548-6653-e1d6-49610eb3f9dd'; $prod['ecmvat_name'] = '0%'; $prod['ecmvat_value'] = 0; $prod['ecmproductcategory_id'] = $fromDb['product_category_id']; $prod['dd_unit_id'] = $fromDb['unit_id']; global $app_list_strings; $prod['dd_unit_name'] = $app_list_strings['ecmproducts_unit_dom'][$fromDb['unit_id']]; $position_list[] = $prod; } } // find FV $date = explode(".", $date); $date = $date[2] . '-' . $date[1] . '-' . $date[0]; $final_list = []; var_dump($position_list); foreach ($position_list as $prod) { $qty = $prod['quantity']; $prodId = $prod['product_id']; $query = " SELECT ii.*, i.id AS invoiceId FROM ecminvoiceoutitems AS ii INNER JOIN ecminvoiceouts AS i ON i.id = ii.ecminvoiceout_id WHERE ii.quantity >= $qty AND ii.ecmproduct_id = '$prodId' AND i.type = 'normal' AND i.parent_id = '$client' AND i.register_date < '$date' ORDER BY i.register_date DESC LIMIT 0,1 "; $fromFV = $db->fetchByAssoc($db->query($query)); if ($fromFV == null) { die('Nie znaleziono produktu'. $query); } $prod['product_itemold_id'] = $fromFV['id']; $prod['old_total_netto'] = floatval($fromFV['total_netto']); $prod['old_total_vat'] = floatval($fromFV['total_vat']); $prod['old_total_brutto'] = floatval($fromFV['total_brutto']); $prod['old_quantity'] = floatval($fromFV['quantity']); $prod['total_netto'] = $prod['old_total_netto'] - $prod['total_netto']; $prod['quantity'] = $prod['old_quantity'] - $prod['quantity']; $prod['price_netto'] = $prod['total_netto'] / $prod['quantity']; $prod['price_brutto'] = $prod['price_netto']; $prod['price_start'] = $prod['price_netto']; $prod['total_netto'] = $prod['quantity'] * $prod['price_netto']; $prod['total_brutto'] = $prod['total_netto']; $prod['old_ecminvoiceout_id'] = $fromFV['invoiceId']; $final_list[] = $prod; $fromFV['old_ecminvoiceout_id'] = $fromFV['invoiceId']; $fromFV['product_corrected'] = 'true'; $final_list[] = $fromFV; } return $final_list; } function searchProduct($productId, $products) { foreach ($products as $p) { if ($p['product_id'] == $productId) { return $p; } } return false; }