PHP code example of safemood / discountify

1. Go to this page and download the library: Download safemood/discountify 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/ */

    

safemood / discountify example snippets


// config/discountify.php
return [
    'condition_namespace' => 'App\\Conditions',
    'condition_path' => app_path('Conditions'),
    'fields' => [
        'price' => 'price',
        'quantity' => 'quantity',
    ],
    'global_discount' => 0,
    'global_tax_rate' => 0,
    'fire_events' => env('DISCOUNTIFY_FIRE_EVENTS', true),
    'state_file_path' => env('DISCOUNTIFY_STATE_FILE_PATH', storage_path('app/discountify/coupons.json')),
];

use Illuminate\Support\ServiceProvider;
use Safemood\Discountify\Facades\Condition;
use Carbon\Carbon;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        // If items are more than 2, apply a 10% discount.
        Condition::define('more_than_2_products_10', fn (array $items) => count($items) > 2, 10)
            // If the date is within a 7-day interval starting March 1, 2024, apply a 15% discount.
            ->add([
                [
                    'slug' => 'promo_early_spring_sale_2024',
                    'condition' => fn ($items) => now()->between(
                        Carbon::createFromDate(2024, 3, 1),
                        Carbon::createFromDate(2024, 3, 15)->addDays(7)
                    ),
                    'discount' => 15,
                ],
                // If 'special' items are in the cart, apply a 10% discount.
                [
                    'slug' => 'special_type_product_10',
                    'condition' => fn ($items) => in_array('special', array_column($items, 'type')),
                    'discount' => 10,
                ],
            ])
            // If the user has a renewal, apply a 10% discount.
            ->defineIf('client_has_renewal_10', auth()->user()->hasRenewal(), 10);
    }
}


$items = [
        ['id' => '1', 'quantity' => 2, 'price' => 50],
        ['id' => '2', 'quantity' => 1, 'price' => 100, 'type' => 'special'],
    ];

// Set the items in the cart
Discountify::setItems($items)

// Set a global discount for all items in the cart
    ->setGlobalDiscount(15)

// Set a global tax rate for all items in the cart
    ->setGlobalTaxRate(19);

// Calculate the total amount considering the set conditions and discounts

$total = Discountify::total();

// Calculate total amount with detailed breakdown
// (array contains total, subtotal, tax amount, total after discount, savings, tax rate, discount rate)
$total = Discountify::totalDetailed();

// Calculate the total amount with the applied global discount

$totalWithDiscount = Discountify::totalWithDiscount();

// Calculate the total amount with taxes applied based on the set global tax rate

$totalWithTaxes = Discountify::tax();

// Calculate the total tax amount based on the given tax rate (19 in this case) (before discounts)

$taxAmount = Discountify::taxAmount(19);

// Calculate tax amount with tax applied after discounts

$taxAmount = Discountify::calculateTaxAmount(19, true);


// Calculate the amount saved
$savings = Discountify::savings();



// Set custom field names through configuration
return [
    'condition_namespace' => 'App\\Conditions',
    'condition_path' => app_path('Conditions'),
    'fields' => [
        'price' => 'amount',
        'quantity' => 'qty',
    ],
    'global_discount' => 0,
    'global_tax_rate' => 0,
    'fire_events' => env('DISCOUNTIFY_FIRE_EVENTS', true)
];

// Alternatively, set dynamic field names on the fly
$items = [
    ['id' => 'item1', 'qty' => 2, 'amount' => 20],
    ['id' => 'item2', 'qty' => 1, 'amount' => 20],
];

$discountify->setFields([
    'price' => 'amount',
    'quantity' => 'qty',
])->setItems($items);

$totalWithDiscount = $discountify->totalWithDiscount(50);


php artisan discountify:condition OrderTotalDiscount 

php artisan discountify:condition OrderTotalDiscount --discount=10 --slug OrderTotal



namespace App\Conditions;

use Safemood\Discountify\Contracts\ConditionInterface;

class OrderTotalDiscount implements ConditionInterface
{
    public bool $skip = true; // Set to true to skip the condition

    public string $slug = 'order_total';

    public int $discount = 10;

    public function __invoke(array $items): bool
    {
         return count($items) > 5;
    }
}

Condition::define('condition2', fn ($items) => false, 20, true);  // Will be skipped

Condition::add([
    ['slug' => 'condition1', 'condition' => fn ($items) => true, 'discount' => 10, 'skip' => false],  // Won't be skipped
    ['slug' => 'condition2', 'condition' => fn ($items) => false, 'discount' => 20, 'skip' => true], // Will be skipped
    ['slug' => 'condition3', 'condition' => fn ($items) => true, 'discount' => 30], // Will not be skipped (default skip is false)
]);

// config/discountify.php
'fire_events' => env('DISCOUNTIFY_FIRE_EVENTS', true) // Toggle event dispatching

// app/Providers/EventServiceProvider.php

use Illuminate\Support\Facades\Event;
use Safemood\Discountify\Events\DiscountAppliedEvent;

public function boot(): void
{
    Event::listen(function (DiscountAppliedEvent $event) {
        // Your event handling logic here
        // Ex : Mail to customer
        // dd($event);
    });

    Event::listen(function (CouponAppliedEvent $event) { // Added
        // Your event handling logic for CouponAppliedEvent here
        // Example: Log coupon usage
        // dd($event);
    });
}

use Safemood\Discountify\Facades\Coupon;

Coupon::add([
    'code' => 'PERIODLIMITED50',
    'discount' => 50,
    'startDate' => now(),
    'endDate' => now()->addWeek(),
]);

$discountedTotal = Discountify::setItems($items)
    ->applyCoupon('TIMELIMITED50')
    ->total();

use Safemood\Discountify\Facades\Coupon;

Coupon::add([
    'code' => 'SINGLEUSE50',
    'discount' => 50,
    'singleUse' => true,
    'startDate' => now(),
    'endDate' => now()->addWeek(),
]);

$discountedTotal = Discountify::setItems($items)
    ->applyCoupon('SINGLEUSE50')
    ->total();

use Safemood\Discountify\Facades\Coupon;

Coupon::add([
    'code' => 'RESTRICTED20',
    'discount' => 20,
    'userIds' => [123, 456], // Restricted to user IDs 123 and 456
    'startDate' => now(),
    'endDate' => now()->addWeek(),
]);

$discountedTotal = Discountify::setItems($items)
    ->applyCoupon('RESTRICTED20', 123) // Applying to user ID 123
    ->total();

use Safemood\Discountify\Facades\Coupon;

Coupon::add([
    'code' => 'LIMITED25',
    'discount' => 25,
    'usageLimit' => 3, // Limited to 3 uses
    'startDate' => now(),
    'endDate' => now()->addWeek(),
]);

$discountedTotal = Discountify::setItems($items)
    ->applyCoupon('LIMITED25')
    ->total();

bash
php artisan vendor:publish --tag="discountify-config"