diff --git a/Modules/Product/Http/Requests/ProductCreateRequest.php b/Modules/Product/Http/Requests/ProductCreateRequest.php index c65e3f12..865721f8 100644 --- a/Modules/Product/Http/Requests/ProductCreateRequest.php +++ b/Modules/Product/Http/Requests/ProductCreateRequest.php @@ -22,7 +22,7 @@ class ProductCreateRequest extends FormRequest 'product_cost' => ['required', 'numeric', 'max:2147483647'], 'product_price' => ['required', 'numeric', 'max:2147483647'], 'product_stock_alert' => ['required', 'integer', 'min:0'], - 'product_order_tax' => ['nullable', 'integer', 'min:1'], + 'product_order_tax' => ['nullable', 'integer', 'min:0', 'max:100'], 'product_tax_type' => ['nullable', 'integer'], 'product_note' => ['nullable', 'string', 'max:1000'], 'category_id' => ['required', 'integer'] diff --git a/Modules/Product/Http/Requests/ProductUpdateRequest.php b/Modules/Product/Http/Requests/ProductUpdateRequest.php index 65287dd0..fd4d5377 100644 --- a/Modules/Product/Http/Requests/ProductUpdateRequest.php +++ b/Modules/Product/Http/Requests/ProductUpdateRequest.php @@ -23,7 +23,7 @@ class ProductUpdateRequest extends FormRequest 'product_cost' => ['required', 'numeric', 'max:2147483647'], 'product_price' => ['required', 'numeric', 'max:2147483647'], 'product_stock_alert' => ['required', 'integer', 'min:0'], - 'product_order_tax' => ['nullable', 'integer', 'min:1'], + 'product_order_tax' => ['nullable', 'integer', 'min:0', 'max:100'], 'product_tax_type' => ['nullable', 'integer'], 'product_note' => ['nullable', 'string', 'max:1000'], 'category_id' => ['required', 'integer'] diff --git a/Modules/Product/Resources/views/products/create.blade.php b/Modules/Product/Resources/views/products/create.blade.php index c07f72d4..193beaed 100644 --- a/Modules/Product/Resources/views/products/create.blade.php +++ b/Modules/Product/Resources/views/products/create.blade.php @@ -95,7 +95,7 @@
- +
diff --git a/Modules/Product/Resources/views/products/edit.blade.php b/Modules/Product/Resources/views/products/edit.blade.php index 307c17c7..920911d5 100644 --- a/Modules/Product/Resources/views/products/edit.blade.php +++ b/Modules/Product/Resources/views/products/edit.blade.php @@ -104,14 +104,14 @@
- +
diff --git a/Modules/Sale/Http/Controllers/SaleController.php b/Modules/Sale/Http/Controllers/SaleController.php index 0f1ff2d4..a62477dd 100644 --- a/Modules/Sale/Http/Controllers/SaleController.php +++ b/Modules/Sale/Http/Controllers/SaleController.php @@ -76,6 +76,7 @@ class SaleController extends Controller 'unit_price' => $cart_item->options->unit_price * 100, 'sub_total' => $cart_item->options->sub_total * 100, 'product_discount_amount' => $cart_item->options->product_discount * 100, + 'product_discount_type' => $cart_item->options->product_discount_type, 'product_tax_amount' => $cart_item->options->product_tax * 100, ]); @@ -121,6 +122,7 @@ class SaleController extends Controller 'weight' => 1, 'options' => [ 'product_discount' => $sale_detail->product_discount_amount, + 'product_discount_type' => $sale_detail->product_discount_type, 'sub_total' => $sale_detail->sub_total, 'code' => $sale_detail->product_code, 'stock' => Product::findOrFail($sale_detail->product_id)->product_quantity, @@ -185,6 +187,7 @@ class SaleController extends Controller 'unit_price' => $cart_item->options->unit_price * 100, 'sub_total' => $cart_item->options->sub_total * 100, 'product_discount_amount' => $cart_item->options->product_discount * 100, + 'product_discount_type' => $cart_item->options->product_discount_type, 'product_tax_amount' => $cart_item->options->product_tax * 100, ]); @@ -207,5 +210,11 @@ class SaleController extends Controller public function destroy(Sale $sale) { abort_if(Gate::denies('delete_sales'), 403); + + $sale->delete(); + + toast('Sale Deleted!', 'warning'); + + return redirect()->route('sales.index'); } } diff --git a/Modules/Sale/Resources/views/edit.blade.php b/Modules/Sale/Resources/views/edit.blade.php index 08d0b2bd..51b7b69b 100644 --- a/Modules/Sale/Resources/views/edit.blade.php +++ b/Modules/Sale/Resources/views/edit.blade.php @@ -55,7 +55,7 @@
- +
diff --git a/Modules/Sale/Resources/views/partials/actions.blade.php b/Modules/Sale/Resources/views/partials/actions.blade.php index 80f27521..34c55d1a 100644 --- a/Modules/Sale/Resources/views/partials/actions.blade.php +++ b/Modules/Sale/Resources/views/partials/actions.blade.php @@ -1,24 +1,30 @@ -@can('edit_sales') - - - -@endcan -@can('show_sales') - - - -@endcan -@can('delete_sales') - -@endcan + +
diff --git a/Modules/User/Database/Seeders/PermissionsTableSeeder.php b/Modules/User/Database/Seeders/PermissionsTableSeeder.php index e221aed3..0ae5ab51 100644 --- a/Modules/User/Database/Seeders/PermissionsTableSeeder.php +++ b/Modules/User/Database/Seeders/PermissionsTableSeeder.php @@ -52,6 +52,12 @@ class PermissionsTableSeeder extends Seeder 'show_suppliers', 'edit_suppliers', 'delete_suppliers', + //Sales + 'access_sales', + 'create_sales', + 'show_sales', + 'edit_sales', + 'delete_sales', //Currencies 'access_currencies', 'create_currencies', diff --git a/app/Http/Livewire/ProductCart.php b/app/Http/Livewire/ProductCart.php index 165cdb2a..56c14054 100644 --- a/app/Http/Livewire/ProductCart.php +++ b/app/Http/Livewire/ProductCart.php @@ -9,7 +9,7 @@ use Livewire\Component; class ProductCart extends Component { - public $listeners = ['productSelected']; + public $listeners = ['productSelected', 'discountModalRefresh']; public $cart_instance; public $global_discount; @@ -19,28 +19,32 @@ class ProductCart extends Component public $check_quantity; public $discount_type; public $item_discount; - public $sale; + public $data; - public function mount($cartInstance, $sale = null) { + public function mount($cartInstance, $data = null) { $this->cart_instance = $cartInstance; - if ($sale) { - $this->sale = $sale; + if ($data) { + $this->data = $data; - $this->global_discount = $sale->discount_percentage; - $this->global_tax = $sale->tax_percentage; - $this->shipping = $sale->shipping_amount; + $this->global_discount = $data->discount_percentage; + $this->global_tax = $data->tax_percentage; + $this->shipping = $data->shipping_amount; $this->updatedGlobalTax(); $this->updatedGlobalDiscount(); - $sale_details = $this->sale->saleDetails; + $cart_items = Cart::instance($this->cart_instance)->content(); - foreach ($sale_details as $sale_detail) { - $this->check_quantity[$sale_detail->product_id] = [$sale_detail->product->product_quantity]; - $this->quantity[$sale_detail->product_id] = $sale_detail->quantity; - $this->discount_type[$sale_detail->product_id] = 'fixed'; - $this->item_discount[$sale_detail->product_id] = $sale_detail->product_discount_amount; + foreach ($cart_items as $cart_item) { + $this->check_quantity[$cart_item->id] = [$cart_item->options->stock]; + $this->quantity[$cart_item->id] = $cart_item->qty; + $this->discount_type[$cart_item->id] = $cart_item->options->product_discount_type; + if ($cart_item->options->product_discount_type == 'fixed') { + $this->item_discount[$cart_item->id] = $cart_item->options->product_discount; + } elseif($cart_item->options->product_discount_type == 'percentage') { + $this->item_discount[$cart_item->id] = 100 * ($cart_item->options->product_discount / $cart_item->price); + } } } else { $this->global_discount = 0; @@ -81,6 +85,7 @@ class ProductCart extends Component 'weight' => 1, 'options' => [ 'product_discount' => 0.00, + 'product_discount_type' => 'fixed', 'sub_total' => $this->calculate($product)['sub_total'], 'code' => $product['product_code'], 'stock' => $product['product_quantity'], @@ -100,11 +105,11 @@ class ProductCart extends Component } public function updatedGlobalTax() { - Cart::instance($this->cart_instance)->setGlobalTax((integer)$this->global_tax); + Cart::instance($this->cart_instance)->setGlobalTax((integer) $this->global_tax); } public function updatedGlobalDiscount() { - Cart::instance($this->cart_instance)->setGlobalDiscount((integer)$this->global_discount); + Cart::instance($this->cart_instance)->setGlobalDiscount((integer) $this->global_discount); } public function updateQuantity($row_id, $product_id) { @@ -125,25 +130,44 @@ class ProductCart extends Component 'product_tax' => $cart_item->options->product_tax, 'unit_price' => $cart_item->options->unit_price, 'product_discount' => $cart_item->options->product_discount, + 'product_discount_type' => $cart_item->options->product_discount_type, ] ]); } + public function updatedDiscountType($value, $name) { + $this->item_discount[$name] = 0; + } + + public function discountModalRefresh($product_id, $row_id) { + $this->updateQuantity($row_id, $product_id); + } + public function setProductDiscount($row_id, $product_id) { $cart_item = Cart::instance($this->cart_instance)->get($row_id); if ($this->discount_type[$product_id] == 'fixed') { - Cart::instance($this->cart_instance)->update($row_id, ['price' => ($cart_item->price + $cart_item->options->product_discount) - $this->item_discount[$product_id]]); + Cart::instance($this->cart_instance) + ->update($row_id, [ + 'price' => ($cart_item->price + $cart_item->options->product_discount) - $this->item_discount[$product_id] + ]); - Cart::instance($this->cart_instance)->update($row_id, ['options' => [ - 'sub_total' => $cart_item->price * $cart_item->qty, - 'code' => $cart_item->options->code, - 'stock' => $cart_item->options->stock, - 'product_tax' => $cart_item->options->product_tax, - 'unit_price' => $cart_item->options->unit_price, - 'product_discount' => $this->item_discount[$product_id], - ]]); + $discount_amount = $this->item_discount[$product_id]; + + $this->updateCartOptions($row_id, $product_id, $cart_item, $discount_amount); } + elseif ($this->discount_type[$product_id] == 'percentage') { + $discount_amount = $cart_item->price * ($this->item_discount[$product_id] / 100); + + Cart::instance($this->cart_instance) + ->update($row_id, [ + 'price' => ($cart_item->price + $cart_item->options->product_discount) - (($cart_item->price * $this->item_discount[$product_id] / 100)) + ]); + + $this->updateCartOptions($row_id, $product_id, $cart_item, $discount_amount); + } + + session()->flash('discount_message' . $product_id, 'Discount added to the product!'); } public function calculate($product) { @@ -173,4 +197,16 @@ class ProductCart extends Component return ['price' => $price, 'unit_price' => $unit_price, 'product_tax' => $product_tax, 'sub_total' => $sub_total]; } + + public function updateCartOptions($row_id, $product_id, $cart_item, $discount_amount) { + Cart::instance($this->cart_instance)->update($row_id, ['options' => [ + 'sub_total' => $cart_item->price * $cart_item->qty, + 'code' => $cart_item->options->code, + 'stock' => $cart_item->options->stock, + 'product_tax' => $cart_item->options->product_tax, + 'unit_price' => $cart_item->options->unit_price, + 'product_discount' => $discount_amount, + 'product_discount_type' => $this->discount_type[$product_id], + ]]); + } } diff --git a/resources/views/livewire/includes/product-cart-modal.blade.php b/resources/views/livewire/includes/product-cart-modal.blade.php index b7484dba..d91d3a4a 100644 --- a/resources/views/livewire/includes/product-cart-modal.blade.php +++ b/resources/views/livewire/includes/product-cart-modal.blade.php @@ -1,5 +1,5 @@ - + @@ -20,15 +20,31 @@