diff --git a/app/Http/Controllers/PurchaseOrderController.php b/app/Http/Controllers/PurchaseOrderController.php index c09095c5191c..26005706f7fb 100644 --- a/app/Http/Controllers/PurchaseOrderController.php +++ b/app/Http/Controllers/PurchaseOrderController.php @@ -644,6 +644,12 @@ class PurchaseOrderController extends BaseController } break; + case 'add_to_inventory': + + $purchase_order->service()->add_to_inventory(); + + return $this->itemResponse($purchase_order); + case 'expense': if($purchase_order->expense()->exists()) diff --git a/app/Http/Requests/Expense/StoreExpenseRequest.php b/app/Http/Requests/Expense/StoreExpenseRequest.php index 4166e87b41be..06acabff9c97 100644 --- a/app/Http/Requests/Expense/StoreExpenseRequest.php +++ b/app/Http/Requests/Expense/StoreExpenseRequest.php @@ -14,6 +14,7 @@ namespace App\Http\Requests\Expense; use App\Http\Requests\Request; use App\Http\ValidationRules\Expense\UniqueExpenseNumberRule; use App\Models\Expense; +use App\Models\PurchaseOrder; use App\Utils\Traits\MakesHash; use Illuminate\Validation\Rule; @@ -41,6 +42,9 @@ class StoreExpenseRequest extends Request if(!empty($this->client_id)) $rules['client_id'] = 'bail|sometimes|exists:clients,id,company_id,'.auth()->user()->company()->id; + if(!empty($this->purchase_order_id)) + $rules['purchase_order_id'] = 'bail|sometimes|exists:purchase_orders,id,company_id,'.auth()->user()->company()->id; + return $this->globalRules($rules); } @@ -58,6 +62,10 @@ class StoreExpenseRequest extends Request $input['currency_id'] = (string)auth()->user()->company()->settings->currency_id; } + if (! array_key_exists('purchase_order_id', $input) || strlen($input['purchase_order_id']) == 0) { + $input['purchase_order_id'] = $this->decodePrimaryKey($input['purchase_order_id']); + } + if(array_key_exists('color', $input) && is_null($input['color'])) $input['color'] = ''; diff --git a/app/Models/Expense.php b/app/Models/Expense.php index fe748816b6b7..c36a8f67cbb2 100644 --- a/app/Models/Expense.php +++ b/app/Models/Expense.php @@ -56,6 +56,7 @@ class Expense extends BaseModel 'tax_amount3', 'uses_inclusive_taxes', 'calculate_tax_by_amount', + 'purchase_order_id', ]; protected $casts = [ diff --git a/app/Services/PurchaseOrder/PurchaseOrderInventory.php b/app/Services/PurchaseOrder/PurchaseOrderInventory.php new file mode 100644 index 000000000000..928d5162eca4 --- /dev/null +++ b/app/Services/PurchaseOrder/PurchaseOrderInventory.php @@ -0,0 +1,54 @@ +purchase_order = $purchase_order; + } + + public function run() + { + + $line_items = $this->purchase_order->line_items; + + foreach($line_items as $item) + { + + $p = Product::where('product_key', $item->product_key)->where('company_id', $this->purchase_order->company_id)->first(); + + if(!$p) + continue; + + $p->in_stock_quantity += $item->quantity; + $p->saveQuietly(); + + } + + return $this->purchase_order; + + } + +} diff --git a/app/Services/PurchaseOrder/PurchaseOrderService.php b/app/Services/PurchaseOrder/PurchaseOrderService.php index 161585011264..0f96f1d6031e 100644 --- a/app/Services/PurchaseOrder/PurchaseOrderService.php +++ b/app/Services/PurchaseOrder/PurchaseOrderService.php @@ -116,6 +116,13 @@ class PurchaseOrderService return $this; } + public function add_to_inventory() + { + $this->purchase_order (new PurchaseOrderInventory($this->purchase_order))->run(); + + return $this; + } + public function expense() { $this->markSent();