jaktech/anaphora

Anaphora is a robust Laravel reporting package that simplifies the generation and retrieval of insightful reports. With Anaphora, effortlessly create, manage, and retrieve reports for your Laravel applications, providing a streamlined experience for tracking, analyzing, and visualizing essential dat

v0.1.1 2023-11-23 13:02 UTC

This package is auto-updated.

Last update: 2024-10-24 07:30:21 UTC


README

Introduction

This Laravel Eloquent extension provides record according to dates using models.

Latest Stable Version Total Downloads License

This package provides an event that will generate a unique slug when saving or creating any Eloquent model.

Installation

composer require jaktech/anaphora

Usage

Getting Started

Consider the following table schema for hierarchical data:

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->timestamps();
});

Use the Reportable trait in your model to work with reports:

class User extends Model
{
    use \Jakteck\Anaphora\Traits\Reportable;
}

Scopes

The trait provides query scopes to filter data by datetime:

Yearly Report

/*Only Current Year Users*/
$users = User::yearlyReport()->get();

// or

/*2018 Users*/
$year = 2018; // or Carbon date
$users = User::yearlyReport($year)->get();

This Year Report

/*Only Current Year Users*/
$users = User::thisYearReport()->get();

Last Year Report

/*Only Last Year Users*/
$users = User::lastYearReport()->get();

Monthly Report

/*Only Current Month Users*/
$users = User::monthlyReport()->get();

// or

/*November Current Year Users*/
$month = 11; // or Carbon date
$users = User::monthlyReport($month)->get();

// or

/*November 2018 Year Users*/
$month = 11; // or Carbon date
$year = 2018; // or Carbon date
$users = User::monthlyReport($month, $year)->get();

This Month Report

/*Only Current Month Users*/
$users = User::thisMonthReport()->get();

Last Month Report

/*Only Last Month Users*/
$users = User::thisMonthReport()->get();

This Week Report

/*Only Current Week Users (Mon - Sun)*/
$users = User::thisWeekReport()->get();

Last Week Report

/*Only Last Week Users (Mon - Sun)*/
$users = User::lastWeekReport()->get();

Daily Report

/*Only Today's Users*/
$users = User::dailyReport()->get();

// or

/*December 27, 2019 Users*/
$date = '2019-12-27'; // or Carbon date
$users = User::dailyReport($date)->get();

Today Report

/*Only Today's Users*/
$users = User::todayReport()->get();

Yesterday Report

/*Only Yesterday's Users*/
$users = User::yesterdayReport()->get();

Hourly Report

/*Only Last hour to current hour's Users*/
$users = User::hourlyReport()->get();

// or

/*Only 7 am to 2pm Users*/

$from = '07:00'; // or Carbon time
$to = '14:00'; // or Carbon time
$users = User::hourlyReport($from, $to)->get();

// or

/*Only 7 am to 2pm at December 27, 2019 Users*/

$from = '07:00'; // or Carbon time
$to = '14:00'; // or Carbon time
$date = '2019-12-27'; // or Carbon date
$users = User::hourlyReport($from, $to, $date)->get();

Custom Query

You can implement your own conditions or do whatever you want with query.

$users = User::dailyReport()->where('status', '=', 'inactive')->get();

Advanced Usage

$data = [];

$date = Carbon::now()->firstOfMonth();
while ($date <= Carbon::now()->endOfMonth()) {
    $users = User::dailyReport($date)
        ->when('condition', function ($query) {
            $query->where('column', 'value');
        })
        ->whereNotIn('column', ['value1', 'value2'])
        ->where('column', 'operator', 'value')
        ->get();

    $data[] = $users;
    $date = $date->copy()->addDay();
}

License

This is open-sourced laravel library licensed under the MIT license.