public function store() { $rules = array('year' => 'required', 'month' => 'required'); $validator = Validator::make(Input::all(), $rules); // process the login if ($validator->fails()) { return Redirect::to('invoicing')->withErrors($validator); } else { $clients = Client::All(); $bill_date = Input::get('year') . '-' . Input::get('month') . '-' . cal_days_in_month(CAL_GREGORIAN, Input::get('month'), Input::get('year')); $bill_date_first_day = Carbon::createFromDate(Input::get('year'), Input::get('month'), 1); $bill_date_last_day = clone $bill_date_first_day; $bill_date_last_day = $bill_date_last_day->addMonth(); foreach ($clients as $client) { foreach ($client->agreements as $agreement) { $nds = 0; $commission_sum = 0; $without_nds = 0; $with_nds = 0; $debt = 0; $pred_with_nds = 0; $with_nds_delivery = 0; $repayments = 0; foreach ($agreement->relations as $relation) { if ($agreement->account == FALSE) { foreach ($relation->deliveries as $delivery) { if ($delivery->status == 'Профинансирована') { $pred_with_nds = $delivery->dailyChargeCommission()->where('handler', false)->whereDate('created_at', '<', $bill_date_first_day)->sum('with_nds'); $repayments = $delivery->dailyChargeCommission()->where('handler', true)->whereDate('created_at', '<', $bill_date_last_day)->sum('with_nds'); $with_nds_delivery = $delivery->dailyChargeCommission()->where('handler', false)->whereYear('created_at', '=', Input::get('year'))->whereMonth('created_at', '=', Input::get('month'))->sum('with_nds'); if ($repayments > $pred_with_nds) { if ($repayments >= $with_nds_delivery + $pred_with_nds) { $debt += 0; } else { $debt += $with_nds_delivery - ($repayments - $pred_with_nds); } } else { $debt += $with_nds_delivery; } $with_nds += $with_nds_delivery; $nds += $delivery->dailyChargeCommission()->where('handler', false)->whereYear('created_at', '=', Input::get('year'))->whereMonth('created_at', '=', Input::get('month'))->sum('nds'); $without_nds += $delivery->dailyChargeCommission()->where('handler', false)->whereYear('created_at', '=', Input::get('year'))->whereMonth('created_at', '=', Input::get('month'))->sum('without_nds'); $bill_date = Input::get('year') . '-' . Input::get('month') . '-' . cal_days_in_month(CAL_GREGORIAN, Input::get('month'), Input::get('year')); } } } else { foreach ($relation->deliveries as $delivery) { if ($delivery->date_of_payment != NULL and $delivery->date_of_payment->year == Input::get('year') and $delivery->date_of_payment->month == Input::get('month') and $delivery->status == 'Профинансирована') { foreach ($delivery->dailyChargeCommission->where('handler', false) as $commission) { $nds += $delivery->dailyChargeCommission()->where('handler', false)->sum('nds'); $without_nds += $delivery->dailyChargeCommission()->where('handler', false)->sum('without_nds'); $with_nds += $delivery->dailyChargeCommission()->where('handler', false)->sum('with_nds'); $bill_date = $delivery->date_of_payment; $debt = 0; } } } } } if ($with_nds != 0) { $bill = new Bill(); $bill->bill_date = $bill_date; $bill->agreement_id = $agreement->id; $bill->nds = $nds; $bill->with_nds = $with_nds; $bill->without_nds = $without_nds; $bill->client_id = $client->id; $bill->debt = $debt; $bill->save(); } } } } }