diff --git a/services/nginx/app/routes/economicInvoiceRoute.php b/services/nginx/app/routes/economicInvoiceRoute.php index 0ef22cfd..45a34bf8 100644 --- a/services/nginx/app/routes/economicInvoiceRoute.php +++ b/services/nginx/app/routes/economicInvoiceRoute.php @@ -252,22 +252,42 @@ class economicInvoiceRoute // This is a note for the invoice // // (?) = Optional - $line = 'Truck Wash - ' . $department_name . ', ' . $order->created_at->value(); + $economic_invoice_draft->addLineTEXT("[ " . $order->created_at->value() . ' ' . $department_name . ' #' . $order->id . " ]"); // If there's a reference, add it to the invoice - if ($order->reference->value() !== '') - $line .= ', Ref: ' . $order->reference->value(); + if ($order->reference->value() !== '') { + $economic_invoice_draft->addLineTEXT('Reference:'); + // Add "# " in the beginning of each line (If there's more than one line, otherwise we just add the prefix once) + if (str_contains($order->reference->value(), "\n")) { + foreach ( explode("\n", $order->reference->value()) as $line ) { + $economic_invoice_draft->addLineTEXT('# ' . $line); + } + } else { + $economic_invoice_draft->addLineTEXT('# ' . $order->reference->value()); + } + } // Add the registration numbers (if any) - if ($order->reg_1->value() !== '') - $line .= ', Reg 1: ' . strtoupper($order->reg_1->value()); + $line_reg = ''; + if ($order->reg_1->value() !== '') { + $line_reg .= 'Reg 1: ' . strtoupper($order->reg_1->value()); + } if ($order->reg_2->value() !== '') - $line .= ', Reg 2: ' . strtoupper($order->reg_2->value()); + $line_reg .= ', Reg 2: ' . strtoupper($order->reg_2->value()); if ($order->reg_3->value() !== '') - $line .= ', Reg 3: ' . strtoupper($order->reg_3->value()); + $line_reg .= ', Reg 3: ' . strtoupper($order->reg_3->value()); // Add the line to the invoice - $economic_invoice_draft->addLineTEXT($line); + $economic_invoice_draft->addLineTEXT($line_reg); // If there's a note, add it to the invoice - if ($order->notes->value() !== '') - $economic_invoice_draft->addLineTEXT((string)$order->notes->value()); + if ($order->notes->value() !== '') { + $economic_invoice_draft->addLineTEXT('Notat:'); + // Add "# " in the beginning of each line (If there's more than one line, otherwise we just add the prefix once) + if (str_contains($order->notes->value(), "\n")) { + foreach ( explode("\n", $order->notes->value()) as $line ) { + $economic_invoice_draft->addLineTEXT('# ' . $line); + } + } else { + $economic_invoice_draft->addLineTEXT('# ' . $order->notes->value()); + } + } } /** @@ -287,50 +307,80 @@ class economicInvoiceRoute // (!?) = Should be added if the customer requires it // Example: // Tankcleaning 4 spulehoveder, Ref: 123456, Reg 1: ABC123, Reg 2: DEF456, Reg 3: GHI789, Note: This is a note, Discount: -100 DKK (20%) - $line = $order_item['product']['name']; - - // If there's a reference, add it to the line - if ($order_item['reference'] !== '') - $line .= ', Ref: ' . $order_item['reference']; - - // Add the registration numbers (if they exist, and the customer requires it) - if ($customer->doesUserHaveAttribute('requiresRegistrationNumbersInvoice')) { - $line .= ', Reg 1: ' . strtoupper($order->reg_1->value()); - $line .= ', Reg 2: ' . strtoupper($order->reg_2->value()); - $line .= ', Reg 3: ' . strtoupper($order->reg_3->value()); - } - - // If there's a note, add it to the line - if ($order_item['notes'] !== '') - $line .= ', Note: ' . $order_item['notes']; - - // Calculate the discount percentage - $discountPercentage = round((($order_item['product']['price'] - $order_item['price']) / $order_item['product']['price']) * 100, 2); - - // If the price is different from the product price, add it to the line - if ($order_item['price'] !== $order_item['product']['price']) - $line .= ', Discount: ' . ($order_item['price'] - $order_item['product']['price']) . ' DKK (~' . $discountPercentage . '%)'; - // Get the department $department = $order->getDepartmentByOrderId($order->id); $economic_department_id = $department['economic_department_id']; $economic_dimension_id = $department['economic_dimension_id']; + // Add an empty line to the invoice + $economic_invoice_draft->addLineTEXT(''); + // Add the line to the invoice $economic_invoice_draft->addLine( (string)$order_item['product']['economic_product_id'], - (string)$line, + (string)$order_item['product']['name'] . ' #' . $order_item['id'], (int)$quantity, (int)$order_item['price'], 0, // Since we can't be specific about the discount, we set it to 0. (The API has a limit of 2 decimals, and that's not enough for our needs) (int)$economic_department_id ?? 0, (int)$economic_dimension_id ?? 0 // If the department is not set, we'll set it to 0 ); + // Calculate the discount percentage + $discountPercentage = round((($order_item['product']['price'] - $order_item['price']) / $order_item['product']['price']) * 100, 0); + + // If the price is different from the product price, add it to the line + if ($order_item['price'] !== $order_item['product']['price']) + $economic_invoice_draft->addLineTEXT('Rabat: ' . ($order_item['price'] - $order_item['product']['price']) . ' DKK (' . $discountPercentage . '%)'); + + // If there's a reference, add it to the line + if ($order_item['reference'] !== '') { + $economic_invoice_draft->addLineTEXT('Reference:'); + // Add "# " in the beginning of each line (If there's more than one line, otherwise we just add the prefix once) + if (str_contains($order_item['reference'], "\n")) { + foreach ( explode("\n", $order_item['reference']) as $line ) { + $economic_invoice_draft->addLineTEXT('# ' . $line); + } + } else { + $economic_invoice_draft->addLineTEXT('# ' . $order_item['reference']); + } + } + + // Add the registration numbers (if they exist, and the customer requires it) + if ($customer->doesUserHaveAttribute('requiresRegistrationNumbersInvoice')) { + $line_reg = ''; + if ($order->reg_1->value() !== '') { + $line_reg .= 'Reg 1: ' . strtoupper($order->reg_1->value()); + } + if ($order->reg_2->value() !== '') { + $line_reg .= ', Reg 2: ' . strtoupper($order->reg_2->value()); + } + if ($order->reg_3->value() !== '') { + $line_reg .= ', Reg 3: ' . strtoupper($order->reg_3->value()); + } + $economic_invoice_draft->addLineTEXT($line_reg); + } + + // If there's a note, add it to the line + if ($order_item['notes'] !== '') { + $economic_invoice_draft->addLineTEXT('Notat:'); + // Add "# " in the beginning of each line (If there's more than one line, otherwise we just add the prefix once) + if (str_contains($order_item['notes'], "\n")) { + foreach ( explode("\n", $order_item['notes']) as $line ) { + $economic_invoice_draft->addLineTEXT('# ' . $line); + } + } else { + $economic_invoice_draft->addLineTEXT('# ' . $order_item['notes']); + } + } + } function addOrderToInvoiceDraft(int $economic_invoice_draft_id, orders_o $order, users_o $customer, array $order_items): object { $economic_invoice_draft = (new economic_invoice_draft_mo()); + // Add two empty lines to the invoice, to separate the orders + $economic_invoice_draft->addLineTEXT(''); + $economic_invoice_draft->addLineTEXT(''); // Add the department, date, reference $this->addTheDepartmentDateReference($economic_invoice_draft, $order->getDepartmentByOrderId($order->id)['name'], $order); // Add the lines to the invoice