1. Go to this page and download the library: Download azaharizaman/nexus-sales library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
azaharizaman / nexus-sales example snippets
use Nexus\Sales\Services\QuotationManager;
// Inject via constructor
public function __construct(
private readonly QuotationManager $quotationManager
) {}
// Create quotation
$quotation = $this->quotationManager->createQuotation(
tenantId: 'tenant-123',
customerId: 'customer-456',
lines: [
[
'product_variant_id' => 'variant-789',
'quantity' => 10,
'uom_code' => 'EA',
]
],
data: [
'quote_date' => new DateTimeImmutable(),
'valid_until' => new DateTimeImmutable('+30 days'),
'currency_code' => 'MYR',
'prepared_by' => 'user-id',
]
);
// Example: Volume discount structure
// 1-99 units: $10.00 each
// 100-499 units: $9.50 each
// 500+ units: $9.00 each
$price = $this->pricingEngine->getPrice(
tenantId: 'tenant-123',
productVariantId: 'variant-789',
quantity: new Quantity(250, 'EA'), // Returns $9.50
currencyCode: 'MYR'
);
use Nexus\Sales\Services\SimpleTaxCalculator;
use Nexus\Sales\Contracts\TaxCalculatorInterface;
// In AppServiceProvider
$this->app->singleton(TaxCalculatorInterface::class, function () {
return new SimpleTaxCalculator(
logger: app(LoggerInterface::class),
defaultTaxRate: 6.0 // 6% SST for Malaysia
);
});
// Order created in USD (exchange rate not yet locked)
$order = $this->salesOrderManager->createOrder(...);
// exchange_rate = NULL
// Order confirmed (exchange rate locked)
$this->salesOrderManager->confirmOrder($order->getId(), 'user-id');
// exchange_rate = 4.75 (locked at current rate)
// Rate changes in market, but order is unaffected
// Prevents currency fluctuation risk
use Nexus\Sales\ValueObjects\DiscountRule;
use Nexus\Sales\Enums\DiscountType;
$discountRule = new DiscountRule(
type: DiscountType::PERCENTAGE,
value: 15.0,
minQuantity: 50,
validFrom: new DateTimeImmutable('2024-12-01'),
validUntil: new DateTimeImmutable('2024-12-31')
);
// Check if discount is currently active
if ($discountRule->isCurrentlyValid()) {
// Apply discount
}
// Check at specific date
if ($discountRule->isValidAt(new DateTimeImmutable('2024-12-15'))) {
// Discount was/will be active
}
use Nexus\Sales\Enums\PaymentTerm;
$orderDate = new DateTimeImmutable('2024-12-01');
PaymentTerm::NET_30->calculateDueDate($orderDate); // 2024-12-31
PaymentTerm::NET_45->calculateDueDate($orderDate); // 2025-01-15
PaymentTerm::DUE_ON_RECEIPT->calculateDueDate($orderDate); // 2024-12-01
// Custom payment term (e.g., NET 7)
PaymentTerm::CUSTOM->calculateDueDate($orderDate, 7); // 2024-12-08