mivita/app/Http/Controllers/PaymentTaxAdvisorController.php
Kevin Adametz bfa3bb1df4 08 2024
2024-08-05 12:05:24 +02:00

246 lines
No EOL
7.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers;
use Auth;
use Request;
use ZipArchive;
use App\Models\UserInvoice;
use App\Services\HTMLHelper;
use App\Exports\UserTeamExport;
use App\Http\Controllers\Controller;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Support\Facades\Storage;
class PaymentTaxAdvisorController extends Controller
{
private $BUKey = [
1 => 8120, //für Kunden aus der Schweiz
11 => 8125, //Steuerfreie EU-Lieferungen
2 => 8300, //Erlöse mit 7 % meistens für Käufe mit Aloe Vera
3 => 8400, //Regulär mit 19 %
];
private $accountKey = [
'A'=>'10000',
'B'=>'10100',
'C'=>'10200',
'D'=>'10300',
'E'=>'10400',
'F'=>'10500',
'G'=>'10600',
'H'=>'10700',
'I'=>'10800',
'J'=>'10900',
'K'=>'11000',
'L'=>'11100',
'M'=>'11200',
'N'=>'11300',
'O'=>'11400',
'P'=>'11500',
'Q'=>'11600',
'R'=>'11700',
'S'=>'11800',
'SCH'=>'11900',
'T'=>'12000',
'U'=>'12100',
'V'=>'12200',
'W'=>'12300',
'X'=>'12400',
'Y'=>'12500',
'Z'=>'12600'
];
public function __construct()
{
$this->middleware('admin');
}
public function index()
{
$this->setFilterVars();
$data = [
'filter_months' => HTMLHelper::getTransMonths(),
'filter_years' => HTMLHelper::getYearRange(2023),
];
return view('admin.payment.taxadvisor', $data);
}
public function createZip($filesToZip)
{
$zip = new ZipArchive;
$zipFileName = 'mysample.zip';
$path = storage_path().'/app/public/zip/';
if ($zip->open($path.$zipFileName, ZipArchive::CREATE) === TRUE) {
foreach ($filesToZip as $file) {
$zip->addFile($file, basename($file));
}
$zip->close();
return response()->download($path.$zipFileName)->deleteFileAfterSend(true);
} else {
return "Failed to create the zip file.";
}
}
public function download(){
$query = $this->initSearch();
$files = [];
$user_invoices = $query->get();
foreach ($user_invoices as $user_invoice) {
$filename = $user_invoice->filename;
$disk = $user_invoice->disk;
$path = $user_invoice->getDownloadPath();
if (Storage::disk($disk)->exists($path)) {
$file = Storage::disk($disk)->get($path);
$pdf_path = storage_path().'/app/public/'.$path;
$files[] = $pdf_path;
}
}
return $this->createZip($files);
dd("asd");
if(Request::get('action') === "export"){
$objects = $this->initSearch(false);
$columns = [];
$filename = "mivita-absatzmengen-".session('payment_taxadvisor_filter_month').'_'.session('payment_taxadvisor_filter_year')."-export";
$headers = array(
'#',
'Produkt',
'Artikelnummer',
'Menge',
);
if($objects){
foreach ($objects as $key => $obj){
$columns[] = array(
'id' => $key,
'name' => $obj['name'],
'number' => $obj['number'],
'value' => $obj['value'],
);
}
}
return Excel::download(new UserTeamExport($columns, $headers), $filename.'.xls');
}
}
private function setFilterVars(){
if(!session('payment_taxadvisor_filter_month')){
session(['payment_taxadvisor_filter_month' => intval(date('m'))]);
}
if(!session('payment_taxadvisor_filter_year')){
session(['payment_taxadvisor_filter_year' => intval(date('Y'))]);
}
if(Request::get('payment_taxadvisor_filter_month')){
session(['payment_taxadvisor_filter_month' => Request::get('payment_taxadvisor_filter_month')]);
}
if(Request::get('payment_taxadvisor_filter_year')){
session(['payment_taxadvisor_filter_year' => Request::get('payment_taxadvisor_filter_year')]);
}
}
private function initSearch()
{
$this->setFilterVars();
$query = UserInvoice::with('shopping_order')->with('shopping_order.shopping_user')->select('user_invoices.*')
->where('user_invoices.month', '=', Request::get('payment_taxadvisor_filter_month'))
->where('user_invoices.year', '=', Request::get('payment_taxadvisor_filter_year'));
return $query;
}
public function datatable(){
$query = $this->initSearch();
return \DataTables::eloquent($query)
->addColumn('id', function (UserInvoice $UserInvoice) {
return $UserInvoice->id;
})
->addColumn('turnover', function (UserInvoice $UserInvoice) {
return '<span class="no-line-break">'.$UserInvoice->shopping_order->getFormattedTotalShipping()." €</span>";
})
->addColumn('debit_credit_indicator', function (UserInvoice $UserInvoice) {
return "H";
})
->addColumn('account', function (UserInvoice $UserInvoice) {
if($UserInvoice->shopping_order && $UserInvoice->shopping_order->shopping_user){
$key = strtoupper(substr($UserInvoice->shopping_order->shopping_user->billing_lastname, 0, 1));
if($key === "S"){
if(strtoupper(substr($UserInvoice->shopping_order->shopping_user->billing_lastname, 0, 3)) === "SCH"){
return $this->accountKey['SCH'];
}
}
return isset($this->accountKey[$key]) ? $this->accountKey[$key] : $key;
}
return "-";
})
->addColumn('contra_account', function (UserInvoice $UserInvoice) {
return "-";
})
->addColumn('bu_key', function (UserInvoice $UserInvoice) {
if($UserInvoice->shopping_order){
return $UserInvoice->shopping_order->country_id;
}
})
->addColumn('voucher_date', function (UserInvoice $UserInvoice) {
// 101 -> für 01 Januar
return $UserInvoice->month."01";
})
->addColumn('document_field_1', function (UserInvoice $UserInvoice) {
//Rechnungsnummer
return $UserInvoice->full_number;
})
->addColumn('posting_text', function (UserInvoice $UserInvoice) {
//Buchungstext hier wäre es toll wenn der Name des Kunden steht.
if($UserInvoice->shopping_order && $UserInvoice->shopping_order->shopping_user){
return $UserInvoice->shopping_order->shopping_user->billing_firstname." ".$UserInvoice->shopping_order->shopping_user->billing_lastname;
}
return "-";
})
->addColumn('invoice', function (UserInvoice $UserInvoice) {
$ret = "";
$ret .= '<a href="'.route('storage_file', [$UserInvoice->shopping_order->id, 'invoice', 'download']).'" class="btn btn-primary btn-xs"><i class="fa fa-download"></i></a> ';
$ret .= '<a href="'.route('storage_file', [$UserInvoice->shopping_order->id, 'invoice', 'stream']).'" target="_blank" class="btn btn-warning btn-xs"><i class="fa fa-eye"></i></a>';
return $ret;
})
->orderColumn('id', 'id $1')
->orderColumn('invoice_number', 'invoice_number $1')
->orderColumn('turnover', 'turnover $1')
->orderColumn('shipped', 'shipped $1')
->orderColumn('total_shipping', 'total_shipping $1')
->rawColumns(['id', 'shipping_order', 'turnover', 'total_shipping', 'status', 'txaction', 'invoice'])
->make(true);
}
}