From: soufiane Date: Tue, 25 Jul 2023 08:52:28 +0000 (+0200) Subject: wait #6165 @6:30 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=f0213e1631111a1f537c3bba46bbd7b9e16bfa40;p=pmi.git wait #6165 @6:30 --- diff --git a/app/Http/Controllers/Admin/ProductBaseController.php b/app/Http/Controllers/Admin/ProductBaseController.php index 037d126..e9ff728 100644 --- a/app/Http/Controllers/Admin/ProductBaseController.php +++ b/app/Http/Controllers/Admin/ProductBaseController.php @@ -85,7 +85,7 @@ class ProductBaseController extends CubistMagicController { foreach ($fields as $key => $field) { // Ignore first and second row (SKU, ID) // Begin at third - $c = $key += 2; + $c = ($key + 2); $value = $rows[$c][$index]; if (in_array($field, ["basic_selling_price", "basic_purschase_price", "conversion"])) { @@ -100,6 +100,15 @@ class ProductBaseController extends CubistMagicController { $data[$id][$field] = $value; } } elseif ($row >= 9) { + try { + if(empty($colmns[6])) { + throw new Exception('Empty ref'); + } + } catch (Exception $e) { + $contentMail["details"][$filename][$sheet] = "[ERREUR] Référence manquante"; + continue; + } + if ($columns[0] && $columns[0] !== " ") { $optionId++; $specifications[$id][$optionId] = [ @@ -133,9 +142,14 @@ class ProductBaseController extends CubistMagicController { } + $product = Product::whereIn('id', $ids) + ->select('id') + ->get() + ->groupBy('id') + ->toArray(); + foreach ($ids as $sheet => $id) { - $product = Product::find($id); - if ($product) { + if ($product[$id]) { $changes = $this->storeAndReturnChanges($data); // Remove empty array from the changes diff --git a/app/Http/Controllers/AjaxController.php b/app/Http/Controllers/AjaxController.php index b04b3a4..aa0d9f3 100644 --- a/app/Http/Controllers/AjaxController.php +++ b/app/Http/Controllers/AjaxController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Models\ECommerceCommon; use App\Models\Order; use App\Models\Cart; use Cubist\Backpack\Facades\App; @@ -26,10 +27,13 @@ use Illuminate\Support\HtmlString; class AjaxController extends CubistFrontController { - protected static $_labels = ['firstname' => 'Prénom', + protected static $_labels = [ + 'company' => 'Société', + "tva" => "N° TVA", + "siren" => "SIREN", + 'firstname' => 'Prénom', 'name' => 'Nom', 'lastname' => 'Nom', - 'company' => 'Société', 'sku' => 'Numéro de série', 'ref' => 'Reference', 'phone' => 'Téléphone', @@ -108,6 +112,10 @@ class AjaxController extends CubistFrontController protected function _sendMail($validatedData, $page, $appendContents = [], $subject_ = "", $recipient = "") { $contents = []; + + $validatedData['tva'] = Client::getClientConnected()->vat; + $validatedData['siren'] = Client::getClientConnected()->siren; + foreach (self::$_labels as $key => $label) { if (isset($validatedData[$key])) { $contents[] = $label . ' : ' . $validatedData[$key]; @@ -279,44 +287,83 @@ class AjaxController extends CubistFrontController $data['status'] = 'new'; $data['locale'] = 'fr'; $data['products'] = []; - $productsMessage = ["Produits : \n----"]; + $productsMessage = ["\n\nProduits : \n"]; $index = 0; $indexMessage = 0; + $prices = []; foreach ($cartData as $id => $_data) { $indexMessage++; $optionsPrices = Product::optionPrice($id, $cartData_[$index]['ref'], $productsArray, true); $basicSellingPrice = $products[$id]['basic_selling_price']; + if($basicSellingPrice) { + $categoryProduct = $products[$id]['category']; + $discount = intval(Client::getDiscount($categoryProduct)); + $price = ECommerceCommon::priceWithDiscount($basicSellingPrice, $discount); + + if ($optionsPrices) { + $totalOptionPrice = Product::totalOptionPrice($optionsPrices[0], $cartData_[$index]['ref']); + $price = intval($price) + $totalOptionPrice; + } + $prices[] = floatval(($price * $_data)); + } + $data['products'][] = [ 'id' => $id, 'reference' => $cartData_[$index]['ref'], 'name' => $products[$id]['name'], 'quantity' => $_data, - 'price' => floatval($basicSellingPrice)." €" ?? 0 + 'price' => $price."€" ?? 0 ]; $productsMessage[] = 'Référence : ' . $cartData_[$index]['ref'] . "\n"; - $productsMessage[$indexMessage] .= 'Qté : ' . $_data . "\n"; + $productsMessage[$indexMessage] .= url("/{$products[$id]['slug']}")."\n"; $labelPrice = 'Prix unitaire HT : '; if($optionsPrices) { - foreach ($optionsPrices[1] as $v) { - $productsMessage[$indexMessage] .= $v . "\n"; + $productsMessage[$indexMessage] .= 'Prix de base : ' . $cartData_[$index]['basic_selling_price'] . "€ HT\n"; + foreach ($optionsPrices[1] as $key => $v) { + $productsMessage[$indexMessage] .= $v . " (+".array_values($optionsPrices[0])[0][$key]."€ HT)\n"; } - $totalOptionPrice = Product::totalOptionPrice($optionsPrices[0],$cartData_[$index]['ref']); - $data['products'][$index]['price'] = floatval($basicSellingPrice + $totalOptionPrice); $labelPrice = 'Prix unitaire HT (avec options) : '; } - $productsMessage[$indexMessage] .= $labelPrice.$data['products'][$index]['price'] . "€ \n"; - $productsMessage[$indexMessage] .= url("/{$products[$id]['slug']}")."\n"; - $productsMessage[$indexMessage] .= "----"; + $productsMessage[$indexMessage] .= $labelPrice.$price . "€ \n"; + $productsMessage[$indexMessage] .= 'Qté : ' . $_data . "\n\n"; + $productsMessage[$indexMessage] .= "----\n\n"; + //Information for order $index++; } + if($action === "order") { + $totalHT = array_reduce($prices, function($carry, $item) { return $carry + $item; }); + $totalHT += ($totalHT > 1000) ? 20 : 0; + $tva = ECommerceCommon::tva($totalHT); + $totalTTC = ECommerceCommon::totalTTC($totalHT); + + $productsMessage[$indexMessage] .= "Frais de ports : ".($totalHT > 1000 ? 20 : 0)."€\n"; + $productsMessage[$indexMessage] .= "Total HT : $totalHT"."€\n"; + $productsMessage[$indexMessage] .= "Montant TVA : $tva"."€\n"; + $productsMessage[$indexMessage] .= "Total TTC : $totalTTC"."€\n"; + $productsMessage[$indexMessage] .= "\n----\n\n"; + + $productsMessage[$indexMessage] .= "Adresse de facturation : \n"; + foreach (Client::getAddressByType("billing_address")[0] as $key => $info) { + $productsMessage[$indexMessage] .= $info; + $productsMessage[$indexMessage] .= !in_array($key, ["firstname","zipcode"]) ? "\n" : " "; + } + $productsMessage[$indexMessage] .= "\n----\n\n"; + $productsMessage[$indexMessage] .= "Adresse de livraison : \n"; + foreach (Client::getAddressByType("delivery_address")[0] as $key => $info) { + $productsMessage[$indexMessage] .= $info; + $productsMessage[$indexMessage] .= !in_array($key, ["firstname","zipcode"]) ? "\n" : " "; + } + $productsMessage[$indexMessage] .= "\n----\n"; + } + $data['products'] = json_encode($data['products']); unset($data['page']); unset($data['cart_data']); @@ -329,7 +376,7 @@ class AjaxController extends CubistFrontController $linkTo = 'Voir la demande en ligne : ' . url('/admin/quotes/' . $quote->id . '/edit'); }else { - $linkTo = 'Voir la commande en ligne : ' . url('/admin/order/' . $save->id . '/edit'); + $linkTo = 'Voir la commande en ligne : ' . url('/admin/order/' . $save->id . "/edit \n"); } $this->_sendMail($validatedData, $page, [implode("\r\n", $productsMessage), '', $linkTo], "Nouvelle commande"); diff --git a/app/Models/Cart.php b/app/Models/Cart.php index e115681..18e7634 100644 --- a/app/Models/Cart.php +++ b/app/Models/Cart.php @@ -64,7 +64,8 @@ class Cart extends ECommerceCommon } public static function hasNoEcommerceProductInCart(Request $request) { - $cartData = $request->session()->get('cart_items', []); + $items = $request->session()->get('cart_items', []); + $cartData = Product::getCartData($items); return sizeof(array_filter($cartData, function($n) { return empty($n['basic_selling_price']); })) > 0 ?? false; } } diff --git a/app/Models/Client.php b/app/Models/Client.php index 7d9a321..9fdb73b 100644 --- a/app/Models/Client.php +++ b/app/Models/Client.php @@ -113,6 +113,17 @@ class Client extends CubistMagicAbstractModel return self::getClientConnected()->discount ?? 'A'; } + public static function getAddressByType($type) { + $addresses = json_decode(self::getClientConnected()->address, true); + $addresses = array_values(array_filter($addresses, function ($n) use($type) { + return $n[$type]; + })); + unset($addresses[0]["name"]); + unset($addresses[0]["billing_address"]); + unset($addresses[0]["delivery_address"]); + return $addresses; + } + public static function getDiscount($categoryProduct, $categoryClient = false) { if(!$categoryClient) $categoryClient = self::getCategory(); diff --git a/app/Models/ECommerceCommon.php b/app/Models/ECommerceCommon.php index dce2a0b..7d93faa 100644 --- a/app/Models/ECommerceCommon.php +++ b/app/Models/ECommerceCommon.php @@ -42,6 +42,23 @@ class ECommerceCommon extends CubistMagicAbstractModel return self::all()->where('user_id', $userID)->toArray(); } + public static function priceWithDiscount($price, $discount) { + return ($price - (($price * $discount) / 100)); + } + public static function totalHT($price, $discount, $quantity) { + $t = self::priceWithDiscount($price, $discount) * $quantity; + $t += ($t > 1000) ? 20 : 0; + return $t; + } + + public static function totalTTC($totalHT) { + return $totalHT + self::tva($totalHT); + } + + public static function tva($totalHT) { + return $totalHT * 0.2; + } + public static function updateCartData($currentCartRef,$data = [], $productsInfosBase = []) { $opt = []; $total = []; diff --git a/app/Models/Product.php b/app/Models/Product.php index fc4b2a6..dfdafec 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -536,28 +536,30 @@ class Product extends CubistMagicPageModel return false; } + $counter = -1; foreach ($explodeRef as $key => $ref) { - $key -= 1; - if ($key > -1) { - $options_ = $options[$key]['options']; + if ($counter > -1) { + $options_ = $options[$counter]['options']; foreach ($options_ as $opt_) { if ($opt_["ref"] === $ref) { - $opt[$refs][] = $opt_["sale_price"] ?? 0; - $optDetails[] = ucfirst($options[$key]['name_fr']) . ' : ' . $ref; + $opt[$refs][] = $opt_["sale_price"]; + $optDetails[] = ucfirst($options[$counter]['name_fr']) . ' : ' . $ref; } } } + $counter++; } } - if($mailCondition) + if($mailCondition) { return [$opt, $optDetails]; - - return $opt; + } else { + return $opt; + } } public static function totalOptionPrice($optionPrice, $refs) { - return $optionPrice ? array_reduce($optionPrice[$refs], function ($carry, $item) { + return $optionPrice ? array_reduce(array_values($optionPrice)[0], function ($carry, $item) { return $carry + $item; }) : 0; } diff --git a/resources/views/components/item-cart-order.blade.php b/resources/views/components/item-cart-order.blade.php index 90c8201..291feba 100644 --- a/resources/views/components/item-cart-order.blade.php +++ b/resources/views/components/item-cart-order.blade.php @@ -5,7 +5,7 @@

{{ __('Date de commande') }}

-

{{ \Carbon\Carbon::parse($item['created_at'])->isoFormat("DD/MM/Y") }}

+

{{ \Carbon\Carbon::parse($item['request_date'])->isoFormat("DD/MM/Y") }}

{{ __('Numéro de commande') }}