Expense a Purchase Order

This commit is contained in:
David Bomba 2022-07-06 19:25:22 +10:00
parent ffcd3b05d4
commit 6b3b50318b
8 changed files with 104 additions and 6 deletions

View File

@ -29,8 +29,10 @@ use App\Jobs\PurchaseOrder\PurchaseOrderEmail;
use App\Jobs\PurchaseOrder\ZipPurchaseOrders;
use App\Models\Account;
use App\Models\Client;
use App\Models\Expense;
use App\Models\PurchaseOrder;
use App\Repositories\PurchaseOrderRepository;
use App\Transformers\ExpenseTransformer;
use App\Transformers\PurchaseOrderTransformer;
use App\Utils\Ninja;
use App\Utils\Traits\MakesHash;
@ -640,6 +642,16 @@ class PurchaseOrderController extends BaseController
if (! $bulk) {
return response()->json(['message' => 'email sent'], 200);
}
break;
case 'expense':
if($purchase_order->expense()->exists())
return response()->json(['message' => ctrans('texts.purchase_order_already_expensed')], 400);
$expense = $purchase_order->service()->expense();
return $this->itemResponse($purchase_order);
case 'cancel':

View File

@ -102,6 +102,11 @@ class Expense extends BaseModel
return $this->belongsTo(Client::class);
}
public function purchase_order()
{
return $this->belongsTo(PurchaseOrder::class);
}
public function translate_entity()
{
return ctrans('texts.expense');

View File

@ -72,10 +72,6 @@ class PurchaseOrder extends BaseModel
'custom_surcharge2',
'custom_surcharge3',
'custom_surcharge4',
// 'custom_surcharge_tax1',
// 'custom_surcharge_tax2',
// 'custom_surcharge_tax3',
// 'custom_surcharge_tax4',
'design_id',
'invoice_id',
'assigned_user_id',
@ -83,7 +79,6 @@ class PurchaseOrder extends BaseModel
'balance',
'partial',
'paid_to_date',
// 'subscription_id',
'vendor_id',
'last_viewed'
];
@ -171,6 +166,11 @@ class PurchaseOrder extends BaseModel
return $this->belongsTo(Company::class);
}
public function expense()
{
return $this->hasOne(Expense::class);
}
public function user()
{
return $this->belongsTo(User::class)->withTrashed();

View File

@ -0,0 +1,41 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2022. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://www.elastic.co/licensing/elastic-license
*/
namespace App\Services\PurchaseOrder;
use App\Factory\ExpenseFactory;
use App\Models\PurchaseOrder;
class PurchaseOrderExpense
{
private PurchaseOrder $purchase_order;
public function __construct(PurchaseOrder $purchase_order)
{
$this->purchase_order = $purchase_order;
}
public function run()
{
$expense = ExpenseFactory::create($this->purchase_order->company_id, $this->purchase_order->user_id);
$expense->amount = $this->purchase_order->amount;
$expense->date = now();
$expense->vendor_id = $this->purchase_order->vendor_id;
$expense->public_notes = $this->purchase_order->public_notes;
$expense->purchase_order_id = $this->purchase_order->id;
$expense->save();
return $expense;
}
}

View File

@ -16,6 +16,7 @@ use App\Models\PurchaseOrder;
use App\Services\PurchaseOrder\ApplyNumber;
use App\Services\PurchaseOrder\CreateInvitations;
use App\Services\PurchaseOrder\GetPurchaseOrderPdf;
use App\Services\PurchaseOrder\PurchaseOrderExpense;
use App\Services\PurchaseOrder\TriggeredActions;
use App\Utils\Traits\MakesHash;
@ -115,6 +116,15 @@ class PurchaseOrderService
return $this;
}
public function expense()
{
$this->markSent();
$expense = (new PurchaseOrderExpense($this->purchase_order))->run();
return $expense;
}
/**
* Saves the purchase order.
* @return \App\Models\PurchaseOrder object

View File

@ -78,7 +78,6 @@ class ExpenseTransformer extends EntityTransformer
'transaction_reference' => (string) $expense->transaction_reference ?: '',
'transaction_id' => (string) $expense->transaction_id ?: '',
'date' => $expense->date ?: '',
//'expense_date' => $expense->date ?: '',
'number' => (string)$expense->number ?: '',
'payment_date' => $expense->payment_date ?: '',
'custom_value1' => $expense->custom_value1 ?: '',
@ -95,6 +94,7 @@ class ExpenseTransformer extends EntityTransformer
'uses_inclusive_taxes' => (bool) $expense->uses_inclusive_taxes,
'calculate_tax_by_amount' => (bool) $expense->calculate_tax_by_amount,
'entity_type' => 'expense',
'purchase_order_id' => (string) $this->encodePrimaryKey($expense->purchase_order_id),
];
}
}

View File

@ -0,0 +1,29 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddPurchaseOrderToExpense extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('expenses', function (Blueprint $table) {
$table->unsignedInteger('purchase_order_id')->nullable()->index();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
}
}

View File

@ -4634,6 +4634,7 @@ $LANG = array(
'notification_purchase_order_accepted_subject' => 'Purchase Order :purchase_order was accepted by :vendor',
'notification_purchase_order_accepted' => 'The following vendor :vendor accepted Purchase Order :purchase_order for :amount.',
'amount_received' => 'Amount received',
'purchase_order_already_expensed' => 'Already converted to an expense.',
);
return $LANG;