model = $model; } public function create($request = []) { //need invoice $data $credit_number = isset($request['credit_number']) ? $request['credit_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($credit_number, $credit_date); $user_credits = $this->makeUserCredit(); $data = [ 'user' => $this->model, 'credit_date' => $credit_date, 'credit_number' => $credit_number, 'user_credits' => $user_credits, ]; $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); $credit_file = [ 'filename' => $filename, 'dir' => $dir, 'disk' => 'public', 'invoice_number' => $credit_number, 'credit_date' => $credit_date, ]; $user_credit = UserCredit::create([ 'auth_user_id' => $this->model->id, 'net' => $user_credits->net, 'tax_rate' => $user_credits->tax_rate, 'tax' => $user_credits->tax, 'total' => $user_credits->total, 'date' => $credit_date, 'credit' => $credit_file, 'user_margins' => $user_credits->margins, ]); if($credit_send_mail){ Credit::sendCreditMail($user_credit); } $this->finishUserCredit($user_credit); return true; //return $pdf->stream('invoice.pdf'); //return $this->output($path.$dir, $filename); } private function finishUserCredit($user_credit){ //next number Credit::makeNextCreditNumber(); //mark as payed $ShoppingOrderMargins = UserMarign::getOrderFromPartnerCommissionByID($this->model->id); foreach($ShoppingOrderMargins as $ShoppingOrderMargin){ $ShoppingOrderMargin->partner_commission_paid = true; $ShoppingOrderMargin->user_credit_id = $user_credit->id; $ShoppingOrderMargin->save(); } } private function makeUserCredit(){ $ret = new \stdClass(); $ret->net = 0; $ShoppingOrderMargins = UserMarign::getOrderFromPartnerCommissionByID($this->model->id); foreach($ShoppingOrderMargins as $ShoppingOrderMargin){ $margin = new \stdClass(); $margin->id = $ShoppingOrderMargin->id; $margin->net = $ShoppingOrderMargin->net_partner_commission; $margin->reference = $ShoppingOrderMargin->shopping_order->getLastShoppingPayment('reference'); $margin->firstname = $ShoppingOrderMargin->shopping_order->shopping_user->billing_firstname; $margin->lastname = $ShoppingOrderMargin->shopping_order->shopping_user->billing_lastname; $margin->created_at = $ShoppingOrderMargin->shopping_order->created_at->format("d.m.Y"); $ret->margins[] = $margin; $ret->net += $ShoppingOrderMargin->net_partner_commission; } /* taxable_sales //user tax 1 //umsatzsteuerpflichtig 2 // nicht umsatzsteuerpflichtig */ if($this->model->account){ $ret->taxable = $this->model->account->taxable_sales == 2 ? false : false; if($ret->taxable){ $ret->tax_rate = config('app.main_tax_number'); $ret->total = round($ret->net * config('app.main_tax'), 2); $ret->tax = $ret->total - $ret->net; }else{ $ret->tax_rate = 0; $ret->total = $ret->net; $ret->tax = 0; } } return $ret; } }