model = $model; } public function create($request = []) { //need invoice $data $number = Credit::getCreditNumber(); $credit_date = isset($request['credit_date']) ? $request['credit_date'] : \Carbon::now()->format("d.m.Y"); $credit_send_mail = isset($request['credit_send_mail']) ? true: false; $credit_number = Credit::createCreditNumber($number, $credit_date); $this->user_credit = new UserCredit(); $user_credit_items = $this->makeUserCredit(); $data = [ 'user' => $this->model, 'credit_date' => $credit_date, 'credit_number' => $credit_number, 'user_credits' => $this->user_credit, 'user_credit_items' => $user_credit_items, ]; $pdf = PDF::loadView('pdf.credit', $data); $pdf->setPaper('A4', 'portrait'); $dir = Credit::getCreditStorageDir($credit_date); if(!Storage::disk('public')->exists( $dir )){ Storage::disk('public')->makeDirectory($dir); //creates directory } $path = Storage::disk('public')->getAdapter()->getPathPrefix(); $filename = Credit::makeCreditFilename($credit_number); $pdf->save($path.$dir.$filename); $pdfMerger = new MyPDFMerger(); $pdfMerger->addPDF($path.$dir.$filename); $file = $pdfMerger->myMerge('string', $filename, 'template_invoice_de'); Storage::disk('public')->put($dir.$filename, $file); $this->user_credit->user_id = $this->model->id; $this->user_credit->year = \Carbon::parse($credit_date)->format('Y'); $this->user_credit->month = \Carbon::parse($credit_date)->format('n'); $this->user_credit->date = $credit_date; $this->user_credit->filename = $filename; $this->user_credit->dir = $dir; $this->user_credit->disk = 'public'; $this->user_credit->number = $number; $this->user_credit->full_number = $credit_number; $this->user_credit->save(); if($credit_send_mail){ Credit::sendCreditMail($this->user_credit); } $this->finishUserCredit($this->user_credit->id, $user_credit_items); return true; } private function finishUserCredit($user_credit_id, $user_credit_items){ //next credits Credit::makeNextCreditNumber(); //mark as payed //$UserCreditItems = UserCreditItem::where('user_id', $this->model->id)->wherePaid(false)->get(); foreach($user_credit_items as $user_credit_item){ $user_credit_item->paid = true; $user_credit_item->user_credit_id = $user_credit_id; $user_credit_item->save(); } } private function makeUserCredit(){ $this->user_credit->net = 0; $this->user_credit->infos = []; $infos = []; $user_credit_items = []; $UserCreditItems = UserCreditItem::where('user_id', $this->model->id)->wherePaid(false)->get(); foreach($UserCreditItems as $userCreditItem){ $user_credit_items[] = $userCreditItem; $infos[] = ['id' => $userCreditItem->id, 'credit' => $userCreditItem->credit]; $this->user_credit->net += $userCreditItem->credit; } /* taxable_sales //user tax 1 //umsatzsteuerpflichtig 2 // nicht umsatzsteuerpflichtig */ if($this->model->account){ $this->user_credit->taxable = $this->model->account->taxable_sales == 2 ? false : true; if($this->user_credit->taxable){ $this->user_credit->tax_rate = config('app.main_tax_rate'); $this->user_credit->total = round($this->user_credit->net * config('app.main_tax'), 2); $this->user_credit->tax = $this->user_credit->total - $this->user_credit->net; }else{ $this->user_credit->tax_rate = 0; $this->user_credit->total = $this->user_credit->net; $this->user_credit->tax = 0; } } $this->user_credit->infos = $infos; return $user_credit_items; } }