mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-24 02:14:21 -04:00
Expense a Purchase Order
This commit is contained in:
parent
ffcd3b05d4
commit
6b3b50318b
@ -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':
|
||||
|
||||
|
@ -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');
|
||||
|
@ -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();
|
||||
|
41
app/Services/PurchaseOrder/PurchaseOrderExpense.php
Normal file
41
app/Services/PurchaseOrder/PurchaseOrderExpense.php
Normal 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;
|
||||
|
||||
}
|
||||
}
|
@ -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
|
||||
|
@ -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),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -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()
|
||||
{
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user