public function postSaveReceiveAll()
 {
     $transactionId = 0;
     $ruless = array('party_id' => 'required', 'branch_id' => 'required', 'account_category_id' => 'required', 'account_name_id' => 'required', 'payment_method' => 'required', 'amount' => 'required');
     $validate = Validator::make(Input::all(), $ruless);
     if ($validate->fails()) {
         var_dump($validate);
         die;
         return Redirect::to('sales/index/')->withErrors($validate);
     } else {
         //$this->setReceiveSalePaymentAll();
         //return Redirect::to('sales/index');
         //$salesreturn = new SalesReturn();
         //$this->setSalesReturnData($salesreturn);
         //automatically reduce sales payment starts
         $return_amount = Input::get('amount');
         $remaining_amount = $return_amount;
         //var_dump($remaining_amount);
         $partyId = Input::get('party_id');
         if ($remaining_amount > 0) {
             $invoiceId = PurchaseInvoice::where('party_id', '=', $partyId)->get();
             foreach ($invoiceId as $invid) {
                 $detailsPrice = 0;
                 $paid = 0;
                 $saleDetails = PurchaseInvoiceDetail::where('detail_invoice_id', '=', $invid->invoice_id)->get();
                 $transactions = Transaction::where('invoice_id', '=', $invid->invoice_id)->where('payment_method', '=', 'Check')->where('type', '=', 'Payment')->where('cheque_status', '=', 1)->get();
                 foreach ($saleDetails as $saleDetail) {
                     $detailsPrice = $detailsPrice + $saleDetail->price * $saleDetail->quantity;
                 }
                 foreach ($transactions as $transaction) {
                     $paid = $paid + $transaction->amount;
                 }
                 $transactions2 = Transaction::where('invoice_id', '=', $invid->invoice_id)->where('type', '=', 'Payment')->where('payment_method', '!=', 'Check')->get();
                 foreach ($transactions2 as $transaction) {
                     $paid = $paid + $transaction->amount;
                 }
                 $difference = $detailsPrice - $paid;
                 //echo $difference; die();
                 if ($difference > 0) {
                     //echo 'greater than 0 difference';
                     if ($remaining_amount <= $difference) {
                         if ($remaining_amount > 0) {
                             $sale = PurchaseInvoice::find($invid->id);
                             if ($remaining_amount < $difference) {
                                 $sale->status = "Partial";
                             } elseif ($remaining_amount == $difference) {
                                 $sale->status = "Completed";
                             }
                             $transaction = new Transaction();
                             $transaction->invoice_id = $invid->invoice_id;
                             $transaction->amount = $remaining_amount;
                             $transaction->type = 'Payment';
                             $transaction->payment_method = Input::get('payment_method');
                             $transaction->account_category_id = Input::get('account_category_id');
                             $transaction->remarks = Input::get('remarks');
                             $transaction->account_name_id = Input::get('account_name_id');
                             $transaction->user_id = Session::get('user_id');
                             $transaction->cheque_no = Input::get('cheque_no');
                             $branch = PurchaseInvoiceDetail::where('detail_invoice_id', '=', $invid->invoice_id)->first();
                             $transaction->branch_id = $branch->branch_id;
                             $transaction->cheque_date = Input::get('cheque_date');
                             $transaction->cheque_bank = Input::get('cheque_bank');
                             if ($transaction->payment_method != "Check") {
                                 $accountPayment = NameOfAccount::find(Input::get('account_name_id'));
                                 $accountPayment->opening_balance = $accountPayment->opening_balance - $remaining_amount;
                                 $accountPayment->save();
                             }
                             $transaction->save();
                             $transactionId = $transaction->id;
                             $remaining_amount = 0;
                         }
                     } elseif ($remaining_amount > $difference) {
                         if ($remaining_amount > 0) {
                             $sale = PurchaseInvoice::find($invid->id);
                             $sale->status = "Completed";
                             $toBePaid = $remaining_amount - $difference;
                             $transaction = new Transaction();
                             $transaction->invoice_id = $invid->invoice_id;
                             $transaction->amount = $difference;
                             $transaction->type = 'Payment';
                             $transaction->payment_method = Input::get('payment_method');
                             $transaction->account_category_id = Input::get('account_category_id');
                             $transaction->remarks = Input::get('remarks');
                             $transaction->account_name_id = Input::get('account_name_id');
                             $transaction->user_id = Session::get('user_id');
                             $transaction->cheque_no = Input::get('cheque_no');
                             $branch = PurchaseInvoiceDetail::where('detail_invoice_id', '=', $invid->invoice_id)->first();
                             $transaction->branch_id = $branch->branch_id;
                             $transaction->cheque_date = Input::get('cheque_date');
                             $transaction->cheque_bank = Input::get('cheque_bank');
                             if ($transaction->payment_method != "Check") {
                                 $accountPayment = NameOfAccount::find(Input::get('account_name_id'));
                                 $accountPayment->opening_balance = $accountPayment->opening_balance - $difference;
                                 $accountPayment->save();
                             }
                             $transaction->save();
                             $transactionId = $transaction->id;
                             $remaining_amount = $toBePaid;
                         }
                     }
                     $sale->save();
                 }
             }
         }
         /*if($remaining_amount>0)
           {
               echo "How come its possible! Consult with DEVELOPERS!!!";
           }*/
         //automatically reduce sales payment ends
         return Redirect::to('purchases/voucher/' . $transactionId);
     }
 }
 private function setPurchasePayment()
 {
     $accountPayment = NameOfAccount::find(Input::get('account_name_id'));
     if ($accountPayment->opening_balance >= Input::get('amount')) {
         $purchases[0] = PurchaseInvoice::where('invoice_id', '=', Input::get('invoice_id'))->get();
         $purchaseTransaction = new Transaction();
         $purchaseTransaction->account_category_id = Input::get('account_category_id');
         $purchaseTransaction->account_name_id = Input::get('account_name_id');
         $purchaseTransaction->amount = Input::get('amount');
         $purchaseTransaction->remarks = Input::get('remarks');
         $purchaseTransaction->user_id = Session::get('user_id');
         $purchaseTransaction->type = "Payment";
         $purchaseTransaction->payment_method = Input::get('payment_method');
         $purchaseTransaction->invoice_id = Input::get('invoice_id');
         $purchaseTransaction->cheque_no = Input::get('cheque_no');
         $totalAmount = 0;
         $totalPrice = 0;
         $purchaseDetails = PurchaseInvoiceDetail::where('detail_invoice_id', '=', $purchaseTransaction->invoice_id)->get();
         $transactions = Transaction::where('invoice_id', '=', $purchaseTransaction->invoice_id)->get();
         foreach ($purchaseDetails as $purchaseDetail) {
             $totalPrice = $totalPrice + $purchaseDetail->price * $purchaseDetail->quantity;
         }
         foreach ($transactions as $transaction) {
             $totalAmount = $totalAmount + $transaction->amount;
         }
         $purchaseInvoice = PurchaseInvoice::find($purchases[0][0]['id']);
         if ($totalAmount == $totalPrice) {
             $purchaseInvoice->status = "Completed";
         } else {
             $purchaseInvoice->status = "Partial";
         }
         $purchaseInvoice->save();
         $purchaseTransaction->save();
         $accountPayment->opening_balance = $accountPayment->opening_balance - Input::get('amount');
         $accountPayment->save();
         Session::flash('message', 'Payment has been Successfully Cleared.');
     } else {
         Session::flash('message', 'You dont have Enough Balance');
     }
 }