company->db); if (count($this->old_invoice) > 0) { $this->existingInventoryAdjustment(); } return $this->newInventoryAdjustment(); } public function handleDeletedInvoice() { MultiDB::setDb($this->company->db); // foreach ($this->invoice->line_items as $item) { // $p = Product::where('product_key', $item->product_key)->where('company_id', $this->company->id)->first(); // if (! $p) { // continue; // } // $p->in_stock_quantity += $item->quantity; // $p->saveQuietly(); // } collect($this->invoice->line_items)->filter(function ($item) { return $item->type_id == '1'; })->each(function ($i) { $p = Product::where('product_key', $i->product_key)->where('company_id', $this->company->id)->first(); if ($p) { $p->in_stock_quantity += $i->quantity; $p->saveQuietly(); } }); } public function handleRestoredInvoice() { MultiDB::setDb($this->company->db); // foreach ($this->invoice->line_items as $item) { // $p = Product::where('product_key', $item->product_key)->where('company_id', $this->company->id)->first(); // if (! $p) { // continue; // } // $p->in_stock_quantity -= $item->quantity; // $p->saveQuietly(); // } collect($this->invoice->line_items)->filter(function ($item) { return $item->type_id == '1'; })->each(function ($i) { $p = Product::where('product_key', $i->product_key)->where('company_id', $this->company->id)->first(); if ($p) { $p->in_stock_quantity -= $i->quantity; $p->saveQuietly(); } }); } public function middleware() { return [new WithoutOverlapping($this->company->company_key)]; } private function newInventoryAdjustment() { // $line_items = $this->invoice->line_items; // foreach ($line_items as $item) { // $p = Product::where('product_key', $item->product_key)->where('company_id', $this->company->id)->where('in_stock_quantity', '>', 0)->first(); // if (! $p) { // continue; // } // $p->in_stock_quantity -= $item->quantity; // $p->saveQuietly(); // if ($this->company->stock_notification && $p->stock_notification && $p->stock_notification_threshold && $p->in_stock_quantity <= $p->stock_notification_threshold) { // $this->notifyStockLevels($p, 'product'); // } elseif ($this->company->stock_notification && $p->stock_notification && $this->company->inventory_notification_threshold && $p->in_stock_quantity <= $this->company->inventory_notification_threshold) { // $this->notifyStocklevels($p, 'company'); // } // } collect($this->invoice->line_items)->filter(function ($item) { return $item->type_id == '1'; })->each(function ($i) { $p = Product::where('product_key', $i->product_key)->where('company_id', $this->company->id)->first(); if ($p) { $p->in_stock_quantity -= $i->quantity; $p->saveQuietly(); if ($this->company->stock_notification && $p->stock_notification && $p->stock_notification_threshold && $p->in_stock_quantity <= $p->stock_notification_threshold) { $this->notifyStockLevels($p, 'product'); } elseif ($this->company->stock_notification && $p->stock_notification && $this->company->inventory_notification_threshold && $p->in_stock_quantity <= $this->company->inventory_notification_threshold) { $this->notifyStocklevels($p, 'company'); } } }); } private function existingInventoryAdjustment() { // foreach ($this->old_invoice as $item) { // $p = Product::where('product_key', $item->product_key)->where('company_id', $this->company->id)->first(); // if (! $p) { // continue; // } // $p->in_stock_quantity += $item->quantity; // $p->saveQuietly(); // } collect($this->invoice->line_items)->filter(function ($item) { return $item->type_id == '1'; })->each(function ($i) { $p = Product::where('product_key', $i->product_key)->where('company_id', $this->company->id)->first(); if ($p) { $p->in_stock_quantity += $i->quantity; $p->saveQuietly(); } }); } private function notifyStocklevels(Product $product, string $notification_level) { $nmo = new NinjaMailerObject; $nmo->mailable = new NinjaMailer((new InventoryNotificationObject($product, $notification_level))->build()); $nmo->company = $this->company; $nmo->settings = $this->company->settings; $this->company->company_users->each(function ($cu) use ($product, $nmo) { if ($this->checkNotificationExists($cu, $product, ['inventory_all', 'inventory_user'])) { $nmo->to_user = $cu->user; NinjaMailerJob::dispatch($nmo); } }); } }