Rechnungen + Gutschriften

This commit is contained in:
Kevin Adametz 2021-03-31 17:58:25 +02:00
parent 39ef16686a
commit 35ae3da244
33 changed files with 2834 additions and 34 deletions

View file

@ -0,0 +1,122 @@
<?php
namespace App\Repositories;
use PDF;
use Storage;
use App\Services\Invoice;
use App\Services\MyPDFMerger;
use App\Services\UserMarign;
use App\Models\UserCredit;
use App\User;
class CreditRepository extends BaseRepository {
public function __construct(User $model)
{
$this->model = $model;
}
public function create($request = [])
{
//need invoice $data
$credit_number = isset($request['credit_number']) ? $request['credit_number'] : Invoice::getInvoiceNumber();
$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 = Invoice::createInvoiceNumber($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 = Invoice::getCreditStorageDir($credit_date);
if(!Storage::disk('public')->exists( $dir )){
Storage::disk('public')->makeDirectory($dir); //creates directory
}
$path = Storage::disk('public')->getAdapter()->getPathPrefix();
$filename = Invoice::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,
];
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){
//Invoice::sendInvoiceMail($this->model);
}
//Invoice::makeNextInvoiceNumber();
return true;
//return $pdf->stream('invoice.pdf');
//return $this->output($path.$dir, $filename);
}
private function makeUserCredit(){
$ret = new \stdClass();
$ret->net = 0;
$UserMarigns = UserMarign::getOrderFromPartnerCommissionByID($this->model->id);
foreach($UserMarigns as $UserMarign){
$margin = new \stdClass();
$margin->id = $UserMarign->id;
$margin->net = $UserMarign->net_partner_commission;
$margin->reference = $UserMarign->shopping_order->getLastShoppingPayment('reference');
$margin->firstname = $UserMarign->shopping_order->shopping_user->billing_firstname;
$margin->lastname = $UserMarign->shopping_order->shopping_user->billing_lastname;
$margin->created_at = $UserMarign->shopping_order->created_at->format("d.m.Y");
$ret->margins[] = $margin;
$ret->net += $UserMarign->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;
}
}