aira-virtual/promocodes

Promotional Codes Generator for Laravel 5

1.2.1 2017-07-26 12:25 UTC

README

Use version 0.5.1 for Laravel 5.1

Latest Stable Version Total Downloads License StyleCI Scrutinizer Code Quality Build Status

PR0M0C0D35
PR0M0C0D35Promocodes generator for Laravel 5.*. Trying to make the best package in this category. You are welcome to join the party, give me some advices :tada: and make pull requests.

Table of Contents

What's new?

Installation

Install this package via Composer:

$ composer require aira-virtual/promocodes

Open config/app.php and follow steps below:

Find the providers array and add our service provider.

'providers' => [
    // ...
    Aira\Promocodes\PromocodesServiceProvider::class
],

Find the aliases array and add our facade.

'aliases' => [
    // ...
    'Promocodes' => Aira\Promocodes\Facades\Promocodes::class
],

Configuration

Publish config & migration file using Artisan command:

$ php artisan vendor:publish

To create table for promocodes in database run:

$ php artisan migrate

Configuration parameters are well documented. There is no need to describe each parameter here.

Check config/promocodes.php and read comments there if you need.

Usage

Generate as many codes as you wish and output them without saving. You will get array of codes in return:

Promocodes::output($amount = 1)

Create as many codes as you wish, with same reward for each one. They will be saved in database and you will get collection of them in return:

Promocodes::create($label = "Test Code", $amount = 1, $reward = null, array $data = [])

Check if given code exists and isn't used at all:

Promocodes::check($code)

Apply, that given code is used. Update database record. You will get promocode record back or true/false:

Promocodes::apply($code)

Promocodes can be related to users

If you want to use user relation open your model and make it Rewardable as in example:

namespace App;

use Illuminate\Notifications\Notifiable;
use Aira\Promocodes\Traits\Rewardable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable, Rewardable;
    
    // ...
}

Get all promocodes of current user:

User::promocodes()

There is query scopes for promocodes: fresh(), byCode($code):

  • User::promocodes()->fresh() - all not used codes of user
  • User::promocodes()->byCode($code) - record which matches given code

Create promocode(s) for current user. Works exactly same like create method of Promocodes:

User::createCode("Test Code", $amount = 1, $reward = null, array $data = [])

Apply, that given code is used by current user. Second argument is optional, if null, it will return promocode record or boolean, or you can pass callback function, which gives you reward or boolean value as argument:

User::applyCode($code, $callback = null)

Example:

$user = Auth::user();

$user->applyCode('ABCD-DCBA', function ($promocode) use ($user) {
    return 'Congratulations, ' . $user->name . '! We have added ' . $promocode->reward . ' points on your account'.
});

How to use additional data?

  1. Process of creation:
Promocodes::create("Test Code", 1, 25, ['foo' => 'bar', 'baz' => 'qux']);

or

User::createCode("Test Code", 1, 25, ['foo' => 'bar', 'baz' => 'qux']);
  1. Getting data back:
Promocodes::apply('ABC-DEF', function($promocode) {
    echo $pomocode->data['foo'];
});

or

User::applyCode('ABC-DEF', function($promocode) {
    echo $pomocode->data['foo'];
});

License

laravel-promocodes is licensed under a MIT License.

TODO

  • [x] Create tests to check funtionality