public function updateStockTakeData() { // Validate Input. $validator = Validator::make(Input::all(), array('stocktake' => 'required')); if ($validator->fails()) { return response()->json(['error' => 'Informacion incompleta!']); } // Check that user is part of authorized staff. if (Auth::user()->Type != 1) { // If they are unauthorized no point in returning anything. return response()->json(array()); } // Get the branch of the current worker. $worker = Worker::find(Auth::user()->TypeId); $branchId = $worker->BranchId; $cashbox = Cashbox::where('BranchId', '=', $branchId)->where('Close', '=', null)->where('UserId', '=', Auth::user()->Id)->first(); if (!$cashbox) { $response['state'] = 'Error'; $response['error'] = 'Es necesario tener la caja abierta para realizar esta accion!'; return response()->json($response); } // Let's loop through the stocktake breakdown and start making necessary changes. foreach (Input::get('stocktake') as $item) { $breakdown = StockTakeBreakdown::find($item['id']); // Compare current state to submitted state and that difference is more or less than 0. if ($breakdown->State != $item['state'] && $breakdown->Difference != 0) { // If we are changing state make sure to undo any previous changes if we have to. if ($breakdown->State > 1 && $breakdown->State < 4) { if ($breakdown->State == 2) { // Get the salebreakdown. $salebreakdown = SaleBreakdown::find(json_decode($breakdown->ExtraData)->salebreakdownId); // Now the sale. $sale = Sale::find($salebreakdown->SaleId); // Now the transaction. $transaction = CashboxTransaction::find($sale->TransactionId); // Now delete them all. $transaction->delete(); $sale->delete(); $salebreakdown->delete(); $breakdown->ExtraData = ''; $breakdown->save(); } $product = Stock::where('Code', '=', $breakdown->Code)->where('BranchId', '=', $branchId)->first(); $product->Quantity -= $breakdown->Difference; $product->save(); } // Make changes. if ($item['state'] == 2) { // Get the product. $product = Stock::where('Code', '=', $breakdown->Code)->where('BranchId', '=', $branchId)->first(); // Now make the sale. if ($breakdown->Difference > 0) { // Make an empty transaction. $transaction = CashboxTransaction::create(array('CashboxId' => $cashbox->Id, 'DateTime' => date('Y-m-d H:i:s'), 'Type' => 10, 'Amount' => 0, 'Reason' => 'Correccion de Inventario.')); // Now make the sale so we can reflect the difference. $sale = Sale::create(array('Created' => date('Y-m-d H:i:s'), 'WorkerId' => $worker->Id, 'Value' => 0, 'Tax' => 0, 'Card' => 0, 'TransactionId' => $transaction->Id, 'BranchId' => $branchId, 'Credit' => 0, 'CreditorId' => 0, 'CreditorType' => 1, 'Cancelled' => 1)); $salebreakdown = SaleBreakdown::create(array('SaleId' => $sale->Id, 'Code' => $breakdown->Code, 'Quantity' => -1 * $breakdown->Difference, 'Cost' => $product->AverageCost, 'Price' => 0, 'ExtraData' => json_encode(array('stocktakeBreakdownId' => $breakdown->Id)))); $product->Quantity += $breakdown->Difference; $product->save(); $breakdown->ExtraData = json_encode(array('salebreakdownId' => $salebreakdown->Id)); $breakdown->save(); } else { if ($breakdown->Difference < 0) { // Make an empty transaction. $transaction = CashboxTransaction::create(array('CashboxId' => $cashbox->Id, 'DateTime' => date('Y-m-d H:i:s'), 'Type' => 10, 'Amount' => 0, 'Reason' => 'Correccion de Inventario.')); // Now make the sale so we can reflect the difference. $sale = Sale::create(array('Created' => date('Y-m-d H:i:s'), 'WorkerId' => $worker->Id, 'Value' => 0, 'Tax' => 0, 'Card' => 0, 'TransactionId' => $transaction->Id, 'BranchId' => $branchId, 'Credit' => 0, 'CreditorId' => 0, 'CreditorType' => 1, 'Cancelled' => 1)); $salebreakdown = SaleBreakdown::create(array('SaleId' => $sale->Id, 'Code' => $breakdown->Code, 'Quantity' => -1 * $breakdown->Difference, 'Cost' => $product->AverageCost, 'Price' => 0, 'ExtraData' => json_encode(array('stocktakeBreakdownId' => $breakdown->Id)))); $product->Quantity += $breakdown->Difference; $product->save(); $breakdown->ExtraData = json_encode(array('salebreakdownId' => $salebreakdown->Id)); $breakdown->save(); } } } else { if ($item['state'] == 3) { // Get the product. $product = Stock::where('Code', '=', $breakdown->Code)->where('BranchId', '=', $branchId)->first(); $product->Quantity += $breakdown->Difference; $product->save(); } } } // Now update breakdown State. $breakdown->State = $item['state']; $breakdown->save(); } $response['state'] = 'Success'; return response()->json($response); }