Merge Invoice and Bill into Document

This commit is contained in:
Burak Çakırel
2020-12-24 01:28:38 +03:00
parent 830cc05957
commit 0c1424db47
436 changed files with 31655 additions and 37350 deletions

73
app/Traits/Documents.php Normal file
View 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());
}
}

View File

@@ -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();
}
}

View File

@@ -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());
}
}

View File

@@ -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();

View File

@@ -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());
}
}