Merge Invoice and Bill into Document
This commit is contained in:
		
							
								
								
									
										73
									
								
								app/Traits/Documents.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								app/Traits/Documents.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Traits;
 | 
			
		||||
 | 
			
		||||
use App\Models\Document\Document;
 | 
			
		||||
use Illuminate\Support\Collection;
 | 
			
		||||
use Illuminate\Support\Str;
 | 
			
		||||
 | 
			
		||||
trait Documents
 | 
			
		||||
{
 | 
			
		||||
    public function getNextDocumentNumber(string $type): string
 | 
			
		||||
    {
 | 
			
		||||
        $prefix = setting("$type.number_prefix");
 | 
			
		||||
        $next = setting("$type.number_next");
 | 
			
		||||
        $digit = setting("$type.number_digit");
 | 
			
		||||
 | 
			
		||||
        return $prefix . str_pad($next, $digit, '0', STR_PAD_LEFT);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function increaseNextDocumentNumber(string $type): void
 | 
			
		||||
    {
 | 
			
		||||
        $next = setting("$type.number_next", 1) + 1;
 | 
			
		||||
 | 
			
		||||
        setting(["$type.number_next" => $next]);
 | 
			
		||||
        setting()->save();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getDocumentStatuses(string $type): Collection
 | 
			
		||||
    {
 | 
			
		||||
        $list = [
 | 
			
		||||
            'invoice' => [
 | 
			
		||||
                'draft',
 | 
			
		||||
                'sent',
 | 
			
		||||
                'viewed',
 | 
			
		||||
                'approved',
 | 
			
		||||
                'partial',
 | 
			
		||||
                'paid',
 | 
			
		||||
                'overdue',
 | 
			
		||||
                'unpaid',
 | 
			
		||||
                'cancelled',
 | 
			
		||||
            ],
 | 
			
		||||
            'bill'    => [
 | 
			
		||||
                'draft',
 | 
			
		||||
                'received',
 | 
			
		||||
                'partial',
 | 
			
		||||
                'paid',
 | 
			
		||||
                'overdue',
 | 
			
		||||
                'unpaid',
 | 
			
		||||
                'cancelled',
 | 
			
		||||
            ],
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        $statuses = collect($list[$type])->each(function ($code) use ($type) {
 | 
			
		||||
            $item = new \stdClass();
 | 
			
		||||
            $item->code = $code;
 | 
			
		||||
            $item->name = trans(Str::plural($type) . '.statuses.' . $code);
 | 
			
		||||
 | 
			
		||||
            return $item;
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        return $statuses;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getDocumentFileName(Document $document, string $separator = '-', string $extension = 'pdf'): string
 | 
			
		||||
    {
 | 
			
		||||
        return $this->getSafeDocumentNumber($document, $separator) . $separator . time() . '.' . $extension;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getSafeDocumentNumber(Document $document, string $separator = '-'): string
 | 
			
		||||
    {
 | 
			
		||||
        return Str::slug($document->document_number, $separator, language()->getShortCode());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -5,8 +5,7 @@ namespace App\Traits;
 | 
			
		||||
use App\Models\Banking\Account;
 | 
			
		||||
use App\Models\Common\Contact;
 | 
			
		||||
use App\Models\Common\Item;
 | 
			
		||||
use App\Models\Purchase\Bill;
 | 
			
		||||
use App\Models\Sale\Invoice;
 | 
			
		||||
use App\Models\Document\Document;
 | 
			
		||||
use App\Models\Setting\Category;
 | 
			
		||||
use App\Models\Setting\Tax;
 | 
			
		||||
 | 
			
		||||
@@ -66,18 +65,18 @@ trait Import
 | 
			
		||||
        $id = isset($row['document_id']) ? $row['document_id'] : null;
 | 
			
		||||
 | 
			
		||||
        if (empty($id) && !empty($row['invoice_number'])) {
 | 
			
		||||
            $id = Invoice::number($row['invoice_number'])->pluck('id')->first();
 | 
			
		||||
            $id = Document::invoice()->number($row['invoice_number'])->pluck('id')->first();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (empty($id) && !empty($row['bill_number'])) {
 | 
			
		||||
            $id = Bill::number($row['bill_number'])->pluck('id')->first();
 | 
			
		||||
            $id = Document::bill()->number($row['bill_number'])->pluck('id')->first();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (empty($id) && !empty($row['invoice_bill_number'])) {
 | 
			
		||||
            if ($row['type'] == 'income') {
 | 
			
		||||
                $id = Invoice::number($row['invoice_bill_number'])->pluck('id')->first();
 | 
			
		||||
                $id = Document::invoice()->number($row['invoice_bill_number'])->pluck('id')->first();
 | 
			
		||||
            } else {
 | 
			
		||||
                $id = Bill::number($row['invoice_bill_number'])->pluck('id')->first();
 | 
			
		||||
                $id = Document::bill()->number($row['invoice_bill_number'])->pluck('id')->first();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,73 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Traits;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Support\Str;
 | 
			
		||||
 | 
			
		||||
trait Purchases
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Generate next bill number
 | 
			
		||||
     *
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    public function getNextBillNumber()
 | 
			
		||||
    {
 | 
			
		||||
        $prefix = setting('bill.number_prefix', 'BIL-');
 | 
			
		||||
        $next = setting('bill.number_next', '1');
 | 
			
		||||
        $digit = setting('bill.number_digit', '5');
 | 
			
		||||
 | 
			
		||||
        $number = $prefix . str_pad($next, $digit, '0', STR_PAD_LEFT);
 | 
			
		||||
 | 
			
		||||
        return $number;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Increase the next bill number
 | 
			
		||||
     */
 | 
			
		||||
    public function increaseNextBillNumber()
 | 
			
		||||
    {
 | 
			
		||||
        $next = setting('bill.number_next', 1) + 1;
 | 
			
		||||
 | 
			
		||||
        setting(['bill.number_next' => $next]);
 | 
			
		||||
        setting()->save();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get a collection of bill statuses
 | 
			
		||||
     *
 | 
			
		||||
     * @return Collection
 | 
			
		||||
     */
 | 
			
		||||
    public function getBillStatuses()
 | 
			
		||||
    {
 | 
			
		||||
        $list = [
 | 
			
		||||
            'draft',
 | 
			
		||||
            'received',
 | 
			
		||||
            'partial',
 | 
			
		||||
            'paid',
 | 
			
		||||
            'overdue',
 | 
			
		||||
            'unpaid',
 | 
			
		||||
            'cancelled',
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        $statuses = collect($list)->each(function ($code) {
 | 
			
		||||
            $item = new \stdClass();
 | 
			
		||||
            $item->code = $code;
 | 
			
		||||
            $item->name = trans('bills.statuses.' . $code);
 | 
			
		||||
 | 
			
		||||
            return $item;
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        return $statuses;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getBillFileName($bill, $separator = '-', $extension = 'pdf')
 | 
			
		||||
    {
 | 
			
		||||
        return $this->getSafeBillNumber($bill, $separator) . $separator . time() . '.' . $extension;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getSafeBillNumber($bill, $separator = '-')
 | 
			
		||||
    {
 | 
			
		||||
        return Str::slug($bill->bill_number, $separator, language()->getShortCode());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -19,7 +19,7 @@ trait Recurring
 | 
			
		||||
 | 
			
		||||
        $frequency = ($request['recurring_frequency'] != 'custom') ? $request['recurring_frequency'] : $request['recurring_custom_frequency'];
 | 
			
		||||
        $interval = (($request['recurring_frequency'] != 'custom') || ($request['recurring_interval'] < 1)) ? 1 : (int) $request['recurring_interval'];
 | 
			
		||||
        $started_at = $request->get('paid_at') ?: ($request->get('invoiced_at') ?: $request->get('billed_at'));
 | 
			
		||||
        $started_at = $request->get('paid_at') ?: $request->get('issued_at');
 | 
			
		||||
 | 
			
		||||
        $this->recurring()->create([
 | 
			
		||||
            'company_id' => session('company_id'),
 | 
			
		||||
@@ -41,7 +41,7 @@ trait Recurring
 | 
			
		||||
 | 
			
		||||
        $frequency = ($request['recurring_frequency'] != 'custom') ? $request['recurring_frequency'] : $request['recurring_custom_frequency'];
 | 
			
		||||
        $interval = (($request['recurring_frequency'] != 'custom') || ($request['recurring_interval'] < 1)) ? 1 : (int) $request['recurring_interval'];
 | 
			
		||||
        $started_at = $request->get('paid_at') ?: ($request->get('invoiced_at') ?: $request->get('billed_at'));
 | 
			
		||||
        $started_at = $request->get('paid_at') ?: $request->get('issued_at');
 | 
			
		||||
 | 
			
		||||
        $recurring = $this->recurring();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,75 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Traits;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Support\Str;
 | 
			
		||||
 | 
			
		||||
trait Sales
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Generate next invoice number
 | 
			
		||||
     *
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    public function getNextInvoiceNumber()
 | 
			
		||||
    {
 | 
			
		||||
        $prefix = setting('invoice.number_prefix', 'INV-');
 | 
			
		||||
        $next = setting('invoice.number_next', '1');
 | 
			
		||||
        $digit = setting('invoice.number_digit', '5');
 | 
			
		||||
 | 
			
		||||
        $number = $prefix . str_pad($next, $digit, '0', STR_PAD_LEFT);
 | 
			
		||||
 | 
			
		||||
        return $number;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Increase the next invoice number
 | 
			
		||||
     */
 | 
			
		||||
    public function increaseNextInvoiceNumber()
 | 
			
		||||
    {
 | 
			
		||||
        $next = setting('invoice.number_next', 1) + 1;
 | 
			
		||||
 | 
			
		||||
        setting(['invoice.number_next' => $next]);
 | 
			
		||||
        setting()->save();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get a collection invoice statuses
 | 
			
		||||
     *
 | 
			
		||||
     * @return Collection
 | 
			
		||||
     */
 | 
			
		||||
    public function getInvoiceStatuses()
 | 
			
		||||
    {
 | 
			
		||||
        $list = [
 | 
			
		||||
            'draft',
 | 
			
		||||
            'sent',
 | 
			
		||||
            'viewed',
 | 
			
		||||
            'approved',
 | 
			
		||||
            'partial',
 | 
			
		||||
            'paid',
 | 
			
		||||
            'overdue',
 | 
			
		||||
            'unpaid',
 | 
			
		||||
            'cancelled',
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        $statuses = collect($list)->each(function ($code) {
 | 
			
		||||
            $item = new \stdClass();
 | 
			
		||||
            $item->code = $code;
 | 
			
		||||
            $item->name = trans('invoices.statuses.' . $code);
 | 
			
		||||
 | 
			
		||||
            return $item;
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        return $statuses;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getInvoiceFileName($invoice, $separator = '-', $extension = 'pdf')
 | 
			
		||||
    {
 | 
			
		||||
        return $this->getSafeInvoiceNumber($invoice, $separator) . $separator . time() . '.' . $extension;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getSafeInvoiceNumber($invoice, $separator = '-')
 | 
			
		||||
    {
 | 
			
		||||
        return Str::slug($invoice->invoice_number, $separator, language()->getShortCode());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user