Browse Source

Invoice has method to generate its new number

pull/1/head
Nafies Luthfi 8 years ago
parent
commit
ba7fd4d248
  1. 17
      app/Entities/Invoices/Invoice.php
  2. 18
      app/Services/InvoiceDraft/InvoiceDraft.php
  3. 4
      database/factories/ModelFactory.php
  4. 1
      resources/views/layouts/app.blade.php
  5. 4
      tests/Feature/InvoiceEntryTest.php
  6. 10
      tests/Unit/Models/InvoiceTest.php

17
app/Entities/Invoices/Invoice.php

@ -20,4 +20,21 @@ class Invoice extends Model
{
return $this->belongsTo(Project::class);
}
public function generateNewNumber()
{
$prefix = date('ym');
$lastInvoice = $this->orderBy('number', 'desc')->first();
if (!is_null($lastInvoice)) {
$lastInvoiceNo = $lastInvoice->number;
if (substr($lastInvoiceNo, 0, 4) == $prefix) {
return ++$lastInvoiceNo;
}
}
return $prefix.'001';
}
}

18
app/Services/InvoiceDraft/InvoiceDraft.php

@ -62,7 +62,7 @@ class InvoiceDraft
public function store()
{
$invoice = new Invoice();
$invoice->number = $this->getNewInvoiceNo();
$invoice->number = $invoice->generateNewNumber();
$invoice->items = $this->getItemsArray();
$invoice->project_id = $this->projectId;
$invoice->amount = $this->getTotal();
@ -75,22 +75,6 @@ class InvoiceDraft
return $invoice;
}
public function getNewInvoiceNo()
{
$prefix = date('ym');
$lastInvoice = Invoice::orderBy('number', 'desc')->first();
if (!is_null($lastInvoice)) {
$lastInvoiceNo = $lastInvoice->number;
if (substr($lastInvoiceNo, 0, 3) == $prefix) {
return ++$lastInvoiceNo;
}
}
return $prefix.'001';
}
protected function getItemsArray()
{
$items = [];

4
database/factories/ModelFactory.php

@ -139,12 +139,12 @@ $factory->define(Event::class, function (Faker\Generator $faker) {
});
$factory->define(Invoice::class, function (Faker\Generator $faker) {
$invoice = new Invoice;
return [
'project_id' => function () {
return factory(Project::class)->create()->id;
},
'number' => date('ym').'001',
'number' => $invoice->generateNewNumber(),
'items' => [],
'amount' => 100000,
'notes' => $faker->paragraph,

1
resources/views/layouts/app.blade.php

@ -9,7 +9,6 @@
<meta name="author" content="">
<title>@yield('title', Option::get('app_name', 'Aplikasi Laravel'))</title>
{{-- {!! Html::style('assets/css/plugins/metisMenu/metisMenu.min.css') !!} --}}
@yield('ext_css')
{!! Html::style('assets/css/app.s.css') !!}
</head>

4
tests/Feature/InvoiceEntryTest.php

@ -97,7 +97,7 @@ class InvoiceEntryTest extends TestCase
}
/** @test */
public function user_can_update_draft_transaction_detail_and_get_confirm_page()
public function user_can_update_draft_invoice_detail_and_get_confirm_page()
{
$project = factory(Project::class)->create();
$cart = new InvoiceDraftCollection();
@ -128,7 +128,7 @@ class InvoiceEntryTest extends TestCase
}
/** @test */
public function user_can_save_transaction_if_draft_is_completed()
public function user_can_save_invoice_if_draft_is_completed()
{
$cart = new InvoiceDraftCollection();

10
tests/Unit/Models/InvoiceTest.php

@ -14,4 +14,14 @@ class InvoiceTest extends TestCase
$invoice = factory(Invoice::class)->create();
$this->assertTrue($invoice->project instanceof Project);
}
/** @test */
public function it_generates_its_own_number()
{
$invoice1 = factory(Invoice::class)->create();
$this->assertEquals(date('ym').'001', $invoice1->number);
$invoice2 = factory(Invoice::class)->create();
$this->assertEquals(date('ym').'002', $invoice2->number);
}
}
Loading…
Cancel
Save