Вход Регистрация
Файл: src/app/Http/Controllers/InvoicesController.php
Строк: 684
<?php 
namespace AppHttpControllers;
use 
AppHttpControllersController;

use 
AppModelsCompanies;
use 
AppModelsProducts;
use 
AppModelsItems;
use 
AppModelsInvoices;
use 
AppModelsSettings;
use 
IlluminateSupportFacadesInput;
use 
Validator;
use 
Storage;
use 
Mail;
use 
KaankilicPortableInvoiceLibsInvoice;
use 
DB;
class 
InvoicesController extends Controller{
    public function 
getLatestAI(){
        
$AutoIncrementStarts 10000000;
        
$Invoices Invoices::select("InvoiceID")->max("InvoiceID")+1;
        return 
response()->json(["AutoIncrement"=>$AutoIncrementStarts+$Invoices],200);
    }
    public function 
getInvoices(){
        
$Inputs Input::only("Date","Status","Order","Page","Search");
        
$Settings Settings::findOrFail(1);
        
$Invoices Invoices::with(['company','currency'])->where("CurrencyID",$Settings->CurrencyID);
        if (
$Inputs["Date"]) {
            if (
$Inputs["Date"]=="Today") {
                
$Invoices $Invoices->whereDate("CreatedAt","=",CarbonCarbon::today()->toDateString());
            }else if(
$Inputs["Date"]=="Yesterday"){
                
$Invoices $Invoices->whereDate("CreatedAt",">=",CarbonCarbon::today()->subDays(1)->toDateString());
            }else if(
$Inputs["Date"]=="Week"){
                
$Invoices $Invoices->whereDate("CreatedAt",">=",CarbonCarbon::today()->subDays(7)->toDateString());
            }else if(
$Inputs["Date"]=="Month"){
                
$Invoices $Invoices->whereDate("CreatedAt",">=",CarbonCarbon::today()->subDays(30)->toDateString());
            }else if(
$Inputs["Date"]=="Year"){
                
$Invoices $Invoices->whereDate("CreatedAt",">=",CarbonCarbon::today()->subDays(365)->toDateString());
            }
         }
        
        if (
$Inputs["Status"]) {
            
$Invoices $Invoices->where("Status",$Inputs["Status"]);
        }
        if(
$Inputs["Order"]=="ASC"){
            
$Invoices $Invoices->orderBy("CreatedAt","ASC")->orderBy("InvoiceID","ASC");
        }else{
            
$Invoices $Invoices->orderBy("CreatedAt","DESC")->orderBy("InvoiceID","DESC");            
        }
        
$Invo $Invoices->paginate(Config::get('constants.paginate_org_index'));
        
$Invoices $Invo->groupBy(function($date) {
            return 
CarbonCarbon::parse($date->CreatedAt)->format("M'y");
        });
        
//dd($Invoices);
        
return view('invoices.index',compact('Invoices','Invo'));
    }
    public function 
getInvoice($InvoiceID){
        
$Invoice Invoices::with(['company'])->findOrFail($InvoiceID);        
        return 
view('invoices.view',compact('Invoice'));
    }
    public function 
getAdd(){
        
$BillingFrom Companies::lists("Title","CompanyID");
        
$BillingTo Companies::all();
        
$Products Products::lists("Title","ProductID");
        return 
view('invoices.add',compact('BillingFrom','BillingTo','Products'));
    }

    public function 
postAdd(){
        
$Inputs Input::only(
            
'CompanyID',
            
'ReferenceID',
            
'Discount',
            
'DiscountPercentage',
            
'DiscountMethod',
            
'Tax',
            
'DueDate',
            
'CustomerNotification',
            
'Status',
            
'Content',
            
'Product'
        
);
        
$Validator Validator::make($Inputs,array(
            
"CompanyID" => "required|exists:Companies,CompanyID",
            
"Discount" => "numeric|between:0,99.99",
            
"Tax" => "numeric|between:0,99.99",
            
"DueDate" => "required|date",
            
"Status" => "required",
            
"ReferenceID" => "required|unique:Invoices,ReferenceID",
            
"CustomerNotification" => "required|between:0,1",
            
"Product.*.ProductID" => 'exists:Products,ProductID|required',
            
"Product.*.ProductAmount" => 'numeric|required',
            
"Product.*.ProductPrice" => 'numeric|required',
            
"Product.*.ProductTax" => 'numeric',
            
"Product.*.ProductDiscount" => 'numeric'

        
));
        if (
$Validator->fails()) {
            return 
redirect()->route('invoices::add')
                ->
withInput(Input::except('Product'))
                ->
withErrors($Validator)
                ->
with("ErrorMessage",trans('messages.invoices_create_failure'))
                ->
with('ProductList'Input::get('Product'));
        }

        if(
count($Inputs['Product'])==0){
            return 
redirect()->route('invoices::add')->withInput()->with("ErrorMessage",trans("messages.invoices_create_failure"));
        }
        
$Items = array();
        
$Inputs['Total'] = 0;
        
$Inputs['TaxAmount'] = 0;
        
$Inputs['Subtotal'] = 0;
        foreach (
$Inputs['Product'] as $Key => $Value) {
            if (isset(
$Value["ProductAmount"]) || isset($Value['ProductPrice'])) {
                
$ProductPrice abs($Value['ProductPrice']);
                
$ProductAmount abs($Value['ProductAmount']);
                
$Product $ProductPrice*$ProductAmount;
                if (
$Value['ProductTax']>0) {
                    
$Product =  $Product+($Product*($Value['ProductTax']/100));
                }

                
$DiscountAmount 0;
                if (
$Value['ProductDiscount']>0) {
                    
$Product $Product-$Value['ProductDiscount'];
                }

                
$Items[] = new Items([
                    
"ProductID" => $Value['ProductID'],
                    
"Amount" => $Value['ProductAmount'],
                    
"Price" => $Value['ProductPrice'],
                    
"Discount" => $Value['ProductDiscount'],
                    
"Tax" => $Value['ProductTax'],
                    
"Total" => $Product
                
]);
                
$Inputs['Subtotal'] += $Product;
            }
        }
        
                if (
$Inputs['Tax']>0) {
                    
$Inputs["TaxAmount"] = ($Inputs['Subtotal']*($Inputs['Tax']/100));
                    
$Inputs['Total'] = $Inputs['Subtotal']+$Inputs["TaxAmount"];
                }else{
                    
$Inputs["Total"] = $Inputs["Subtotal"];
                }
                if (
$Inputs['DiscountMethod']==0) {
                    
$Inputs['Discount'] = $Inputs['Total']*($Inputs['DiscountPercentage']/100);
                    
$Inputs['Total'] = $Inputs['Total']-$Inputs['Discount'];
                }else{
                    
$Inputs['DiscountPercentage'] = $Inputs['Total']/(100*$Inputs['Total']);
                    
$Inputs['Total'] = ($Inputs['Total']-$Inputs['Discount']);
                }
        
$Inputs["CurrencyID"] = Settings::orderBy("SettingID","DESC")->limit(1)->first()->CurrencyID;
        
$invoice Invoices::create($Inputs);
        
$invoice->items()->saveMany($Items);

        if (
Input::get('CustomerNotification')==1) {
            
$Company Companies::findOrFail($invoice->CompanyID);
            
$InvoicePath $this->saveInvoice($invoice->InvoiceID);
            
Mail::send('emails.invoice_sender', [], function ($m) use ($Company,$InvoicePath) {
                
$m->from($Settings->Email'Cup Invoice');

                
$m->to($Company->Email$Company->Title)->subject('Invoice Details');
                
$m->attach($InvoicePath);
            });
        }
        return 
redirect()->route('invoices::view',$invoice->InvoiceID)->with("SuccessMessage",trans('messages.invoices_create_success'));        
    }
    public function 
getDuplicate($InvoiceID){
        
$BillingFrom Companies::lists("Title","CompanyID");
        
$BillingTo Companies::all();
        
$Products Products::lists("Title","ProductID");
        
$Invoice Invoices::findOrFail($InvoiceID);
        return 
view('invoices.duplicate',compact('BillingFrom','BillingTo','Products','Invoice'));        
    }
    public function 
getEdit($InvoiceID){
        
$BillingFrom Companies::lists("Title","CompanyID");
        
$BillingTo Companies::all();
        
$Products Products::lists("Title","ProductID");
        
$Invoice Invoices::findOrFail($InvoiceID);
        return 
view('invoices.edit',compact('BillingFrom','BillingTo','Products','Invoice'));        
    }
    public function 
postEdit($InvoiceID){
        
$invoice Invoices::findOrFail($InvoiceID);
                
$Inputs Input::only(
            
'CompanyID',
            
'CompanyID',
            
'ReferenceID',
            
'Discount',
            
'DiscountPercentage',
            
'DiscountMethod',
            
'Tax',
            
'DueDate',
            
'CustomerNotification',
            
'Status',
            
'Content',
            
'Product'
        
);
        
$Validator Validator::make($Inputs,array(
            
"CompanyID" => "required|exists:Companies,CompanyID",
            
"Discount" => "numeric|between:0,99.99",
            
"Tax" => "numeric|between:0,99.99",
            
"DueDate" => "required|date",
            
"Status" => "required",
            
"ReferenceID" => "required|unique:Invoices,ReferenceID,".$invoice->ReferenceID.",ReferenceID",
            
"CustomerNotification" => "between:0,1",
            
"Product.*.ProductID" => 'exists:Products,ProductID|required',
            
"Product.*.ProductAmount" => 'numeric|required',
            
"Product.*.ProductPrice" => 'numeric|required',
            
"Product.*.ProductTax" => 'numeric',
            
"Product.*.ProductDiscount" => 'numeric'

        
));
        if (
$Validator->fails()) {
            return 
redirect()->route('invoices::edit',$InvoiceID)
                ->
withInput(Input::except('Product'))
                ->
withErrors($Validator)
                ->
with("ErrorMessage",trans('messages.invoices_create_failure'))
                ->
with('ProductList'Input::get('Product'));
        }

        if(
count($Inputs['Product'])==0){
            return 
redirect()->route('invoices::edit',$InvoiceID)->withInput()->with("ErrorMessage",trans("messages.invoices_create_failure"));
        }
        
$Items = array();
        
$Inputs['Total'] = 0;
        
$Inputs['TaxAmount'] = 0;
        
$Inputs['Subtotal'] = 0;
        foreach (
$Inputs['Product'] as $Key => $Value) {
            if (isset(
$Value["ProductAmount"]) || isset($Value['ProductPrice'])) {
                
$ProductPrice abs($Value['ProductPrice']);
                
$ProductAmount abs($Value['ProductAmount']);
                
$Product $ProductPrice*$ProductAmount;
                if (
$Value['ProductTax']>0) {
                    
$Product =  $Product+($Product*($Value['ProductTax']/100));
                }

                
$DiscountAmount 0;
                if (
$Value['ProductDiscount']>0) {
                    
$Product $Product-$Value['ProductDiscount'];
                }

                
$Items[] = new Items([
                    
"ProductID" => $Value['ProductID'],
                    
"Amount" => $Value['ProductAmount'],
                    
"Price" => $Value['ProductPrice'],
                    
"Discount" => $Value['ProductDiscount'],
                    
"Tax" => $Value['ProductTax'],
                    
"Total" => $Product
                
]);
                
$Inputs['Subtotal'] += $Product;
            }
        }
        
                if (
$Inputs['Tax']>0) {
                    
$Inputs["TaxAmount"] = ($Inputs['Subtotal']*($Inputs['Tax']/100));
                    
$Inputs['Total'] = $Inputs['Subtotal']+$Inputs["TaxAmount"];
                }else{
                    
$Inputs["Total"] = $Inputs["Subtotal"];
                }
                if (
$Inputs['DiscountMethod']==0) {
                    
$Inputs['Discount'] = $Inputs['Total']*($Inputs['DiscountPercentage']/100);
                    
$Inputs['Total'] = $Inputs['Total']-$Inputs['Discount'];
                }else{
                    
$Inputs['DiscountPercentage'] = $Inputs['Total']/(100*$Inputs['Total']);
                    
$Inputs['Total'] = ($Inputs['Total']-$Inputs['Discount']);
                }
        
$Inputs["CurrencyID"] = Settings::orderBy("SettingID","DESC")->limit(1)->first()->CurrencyID;
        
$invoice->update($Inputs);
        
$invoice->items()->delete();
        
$invoice->items()->saveMany($Items);
        if (
Input::get('CustomerNotification')==1) {
            
$Company Companies::findOrFail($invoice->CompanyID);
            
$InvoicePath $this->saveInvoice($invoice->InvoiceID);
            
Mail::send('emails.invoice_sender', [], function ($m) use ($Company,$InvoicePath) {
                
$m->from($Settings->Email'Cup Invoice');

                
$m->to($Company->Email$Company->Title)->subject('Invoice Details');
                
$m->attach($InvoicePath);
            });
        }
        return 
redirect()->route('invoices::view',$invoice->InvoiceID)->with("SuccessMessage",trans('messages.invoices_update_success'));
    }
    public function 
saveInvoice($InvoiceID){
        
$Invoices Invoices::findOrFail($InvoiceID);
        
$Settings Settings::findOrFail(1);

$invoice = new Invoice("A4",'€');
  
/* Header Settings */

  
$invoice->setLogo(asset('/uploads/'.$Settings->Logo));
  
$invoice->setColor($Settings->ColorPalette);
  
$invoice->setType("Invoice");
  
$invoice->setReference("#".$Invoices->ReferenceID);
  
$invoice->setDate($Invoices->CreatedAt->format("d/m/Y"));
  
$invoice->setDue($Invoices->DueDate->format("d/m/Y"));
  
$Company Companies::where("isOwn","=",1)->first();
  
$invoice->setFrom(
      array(
$Company->Title,
          
$Company->Address1,
          
$Company->Address2,
          
$Company->City." , ".$Company->ZipCode,
          
$Company->Country->Name
      
));

  
$invoice->setTo(array(
      
$Invoices->Company->Title,
      
$Invoices->Company->Address1,
      
$Invoices->Company->Address2,
      
$Invoices->Company->City.' , '.$Invoices->Company->ZipCode,
      
$Invoices->Company->Country->Name));
  
/* Adding Items in table */
  
foreach($Invoices->Items as $Item){
    
$invoice->addItem($Item->Product->Title,$Item->Product->Description,$Item->Amount,$Item->Tax,html_entity_decode($Item->Price),$Item->Discount,$Item->Total);
  }
  
/* Add totals */
  
$invoice->addTotal(trans('portable_invoice.subtotal'),$Invoices->Subtotal);
  
$invoice->addTotal(trans('portable_invoice.vat')." (".$Invoices->Tax."%)",$Invoices->TaxAmount);
  
$invoice->addTotal(trans('portable_invoice.grand_total'),$Invoices->Total,true);
  
/* Set badge */ 
  
$invoice->addBadge($Invoices->Status);
  
/* Add title */
  
$invoice->addTitle(trans('portable_invoice.footer_message'));
  
/* Add Paragraph */
  
$invoice->addParagraph($Item->Content);
  
/* Set footer note */
  
$invoice->setFooternote($Company->Title);
  
/* Render */
      
$invoice->render(storage_path()."/app/invoices/".$Invoices->ReferenceID.'.pdf','F'); /* I => Display on browser, D => Force Download, F => local path save, S => return document path */
      
return storage_path()."/app/invoices/".$Invoices->ReferenceID.'.pdf';
}
    public function 
getDownload($InvoiceID,$Method="D"){
        
$Invoices Invoices::findOrFail($InvoiceID);
        
$Settings Settings::findOrFail(1);

$invoice = new Invoice("A4",$Settings->Currency->Symbol);
  
/* Header Settings */

  
$invoice->setLogo(asset('/uploads/'.$Settings->Logo));
  
$invoice->setColor($Settings->ColorPalette);
  
$invoice->setType("Invoice");
  
$invoice->setReference("#".$Invoices->ReferenceID);
  
$invoice->setDate($Invoices->CreatedAt->format("d/m/Y"));
  
$invoice->setDue($Invoices->DueDate->format("d/m/Y"));
  
$Company Companies::where("isOwn","=",1)->first();
  
$invoice->setFrom(
      array(
$Company->Title,
          
$Company->Address1,
          
$Company->Address2,
          
$Company->City." , ".$Company->ZipCode,
          
$Company->Country->Name
      
));

  
$invoice->setTo(array(
      
$Invoices->Company->Title,
      
$Invoices->Company->Address1,
      
$Invoices->Company->Address2,
      
$Invoices->Company->City.' , '.$Invoices->Company->ZipCode,
      
$Invoices->Company->Country->Name));
  
/* Adding Items in table */
  
foreach($Invoices->Items as $Item){
    
$invoice->addItem($Item->Product->Title,$Item->Product->Description,$Item->Amount,$Item->Tax,html_entity_decode($Item->Price),$Item->Discount,$Item->Total);
  }
  
/* Add totals */
  
$invoice->addTotal(trans('portable_invoice.subtotal'),$Invoices->Subtotal);
  
$invoice->addTotal(trans('portable_invoice.vat')." (".$Invoices->Tax."%)",$Invoices->TaxAmount);
  
$invoice->addTotal(trans('portable_invoice.grand_total'),$Invoices->Total,true);
  
/* Set badge */ 
  
$invoice->addBadge($Invoices->Status);
  
/* Add title */
  
$invoice->addTitle(trans('portable_invoice.footer_message'));
  
/* Add Paragraph */
  
$invoice->addParagraph($Item->Content);
  
/* Set footer note */
  
$invoice->setFooternote($Company->Title);
  
/* Render */
  
if ($Method=="D") {
      
$invoice->render($Invoices->ReferenceID.'.pdf','D'); /* I => Display on browser, D => Force Download, F => local path save, S => return document path */
  
}else{
      
$invoice->render($Invoices->ReferenceID.'.pdf','S');
    
//Storage::disk('invoices')->put($Invoices->ReferenceID.'.pdf',null);
  
}
}
    public function 
getDelete($InvoiceID){
        
$Invoice Invoices::findOrFail($InvoiceID);
        
$Invoice->delete();
        return 
redirect()->route("invoices::list")->with("SuccessMessage",trans('messages.invoices_delete_success'));
    }
}
?>
Онлайн: 3
Реклама