First Commit
This commit is contained in:
+32
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Capsule\Manager as Capsule;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
|
||||
class CreateAffiliatesTable
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
if (!Capsule::schema()->hasTable('affiliates')) {
|
||||
Capsule::schema()->create('affiliates', function (Blueprint $table) {
|
||||
$table->bigIncrements('affiliates_id');
|
||||
$table->string('affiliates_code')->unique();
|
||||
$table->string('affiliates_name');
|
||||
$table->string('affiliates_email')->unique();
|
||||
$table->string('affiliates_phone')->nullable();
|
||||
$table->text('affiliates_address')->nullable();
|
||||
$table->string('affiliates_website')->nullable();
|
||||
$table->decimal('affiliates_commission_rate', 5, 2)->default(10.00);
|
||||
$table->decimal('affiliates_total_earned', 12, 2)->default(0.00);
|
||||
$table->decimal('affiliates_total_paid', 12, 2)->default(0.00);
|
||||
$table->enum('affiliates_status', ['active', 'pending', 'suspended'])->default('pending');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
Capsule::schema()->dropIfExists('affiliates');
|
||||
}
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Capsule\Manager as Capsule;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
|
||||
class CreateAffiliateCommissionsTable
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
if (!Capsule::schema()->hasTable('affiliate_commissions')) {
|
||||
Capsule::schema()->create('affiliate_commissions', function (Blueprint $table) {
|
||||
$table->bigIncrements('affiliate_commissions_id');
|
||||
$table->unsignedBigInteger('affiliate_commissions_affiliate_id');
|
||||
$table->string('affiliate_commissions_order_id')->nullable(); // Or whatever identifier for the sale
|
||||
$table->decimal('affiliate_commissions_amount', 10, 2);
|
||||
$table->decimal('affiliate_commissions_commission_rate', 5, 2);
|
||||
$table->enum('affiliate_commissions_status', ['pending', 'approved', 'rejected', 'paid'])->default('pending');
|
||||
$table->text('affiliate_commissions_notes')->nullable();
|
||||
$table->timestamps();
|
||||
|
||||
$table->foreign('affiliate_commissions_affiliate_id')->references('affiliates_id')->on('affiliates')->onDelete('cascade');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
Capsule::schema()->dropIfExists('affiliate_commissions');
|
||||
}
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Capsule\Manager as Capsule;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
|
||||
class CreateAffiliateBannersTable
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
if (!Capsule::schema()->hasTable('affiliate_banners')) {
|
||||
Capsule::schema()->create('affiliate_banners', function (Blueprint $table) {
|
||||
$table->bigIncrements('affiliate_banners_id');
|
||||
$table->string('affiliate_banners_name');
|
||||
$table->text('affiliate_banners_description')->nullable();
|
||||
$table->string('affiliate_banners_image_url');
|
||||
$table->string('affiliate_banners_target_url')->nullable();
|
||||
$table->integer('affiliate_banners_width')->nullable();
|
||||
$table->integer('affiliate_banners_height')->nullable();
|
||||
$table->boolean('affiliate_banners_is_active')->default(true);
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
Capsule::schema()->dropIfExists('affiliate_banners');
|
||||
}
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Capsule\Manager as Capsule;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
|
||||
class CreateAffiliateClicksTable
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
if (!Capsule::schema()->hasTable('affiliate_clicks')) {
|
||||
Capsule::schema()->create('affiliate_clicks', function (Blueprint $table) {
|
||||
$table->bigIncrements('affiliate_clicks_id');
|
||||
$table->unsignedBigInteger('affiliate_clicks_affiliate_id');
|
||||
$table->unsignedBigInteger('affiliate_clicks_banner_id');
|
||||
$table->string('affiliate_clicks_ip_address')->nullable();
|
||||
$table->text('affiliate_clicks_user_agent')->nullable();
|
||||
$table->string('affiliate_clicks_referrer')->nullable();
|
||||
$table->timestamps();
|
||||
|
||||
$table->foreign('affiliate_clicks_affiliate_id')->references('affiliates_id')->on('affiliates')->onDelete('cascade');
|
||||
$table->foreign('affiliate_clicks_banner_id')->references('affiliate_banners_id')->on('affiliate_banners')->onDelete('cascade');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
Capsule::schema()->dropIfExists('affiliate_clicks');
|
||||
}
|
||||
}
|
||||
+233
@@ -0,0 +1,233 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Capsule\Manager as Capsule;
|
||||
|
||||
class RegisterAffiliatesModules
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
// Register modules in 'modules' table
|
||||
$modules = [
|
||||
[
|
||||
'modules_name' => 'affiliatesadmin',
|
||||
'modules_display_name' => 'Gerenciamento de Afiliados',
|
||||
'modules_description' => 'Módulo administrativo para gerenciar afiliados, comissões e banners',
|
||||
'modules_version' => '1.0.0',
|
||||
'modules_author' => 'SysCMS Team',
|
||||
'modules_dependencies' => json_encode(['auth']),
|
||||
'modules_ative' => 1,
|
||||
'modules_public' => 0,
|
||||
'modules_blocked' => 0,
|
||||
'modules_settings' => json_encode([
|
||||
'commission_rate_default' => 10,
|
||||
'commission_min_payout' => 50,
|
||||
'banner_default_width' => 300,
|
||||
'banner_default_height' => 250
|
||||
]),
|
||||
'modules_permissions' => json_encode([
|
||||
'affiliatesadmin.affiliates.view',
|
||||
'affiliatesadmin.affiliates.create',
|
||||
'affiliatesadmin.affiliates.edit',
|
||||
'affiliatesadmin.affiliates.delete',
|
||||
'affiliatesadmin.commissions.view',
|
||||
'affiliatesadmin.commissions.approve',
|
||||
'affiliatesadmin.commissions.reject',
|
||||
'affiliatesadmin.commissions.pay',
|
||||
'affiliatesadmin.banners.view',
|
||||
'affiliatesadmin.banners.create',
|
||||
'affiliatesadmin.banners.edit',
|
||||
'affiliatesadmin.banners.delete',
|
||||
'affiliatesadmin.statistics.view'
|
||||
]),
|
||||
'modules_path' => 'modules/affiliatesadmin',
|
||||
'modules_namespace' => 'Modules\\AffiliatesAdmin',
|
||||
'modules_icon' => 'bi bi-people',
|
||||
'menu_side_bar' => 1,
|
||||
'menu_nav_bar' => 0,
|
||||
'modules_order' => 80,
|
||||
'modules_install_date' => date('Y-m-d H:i:s'),
|
||||
'modules_update_date' => date('Y-m-d H:i:s')
|
||||
],
|
||||
[
|
||||
'modules_name' => 'affiliates',
|
||||
'modules_display_name' => 'Área de Afiliados',
|
||||
'modules_description' => 'Módulo para afiliados gerenciarem sua conta e banners',
|
||||
'modules_version' => '1.0.0',
|
||||
'modules_author' => 'SysCMS Team',
|
||||
'modules_dependencies' => json_encode(['auth', 'affiliatesadmin']),
|
||||
'modules_ative' => 1,
|
||||
'modules_public' => 1,
|
||||
'modules_blocked' => 0,
|
||||
'modules_settings' => null,
|
||||
'modules_permissions' => json_encode([
|
||||
'affiliates.dashboard.view',
|
||||
'affiliates.banners.view',
|
||||
'affiliates.banners.get_code',
|
||||
'affiliates.commissions.view',
|
||||
'affiliates.profile.view',
|
||||
'affiliates.profile.edit'
|
||||
]),
|
||||
'modules_path' => 'modules/affiliates',
|
||||
'modules_namespace' => 'Modules\\Affiliates',
|
||||
'modules_icon' => 'bi bi-person-badge',
|
||||
'menu_side_bar' => 0,
|
||||
'menu_nav_bar' => 0,
|
||||
'modules_order' => 90,
|
||||
'modules_install_date' => date('Y-m-d H:i:s'),
|
||||
'modules_update_date' => date('Y-m-d H:i:s')
|
||||
]
|
||||
];
|
||||
|
||||
foreach ($modules as $moduleData) {
|
||||
$moduleName = $moduleData['modules_name'];
|
||||
$existing = Capsule::table('modules')->where('modules_name', $moduleName)->first();
|
||||
|
||||
if (!$existing) {
|
||||
$moduleId = Capsule::table('modules')->insertGetId($moduleData);
|
||||
} else {
|
||||
$moduleId = $existing->modules_id;
|
||||
Capsule::table('modules')->where('modules_name', $moduleName)->update([
|
||||
'modules_display_name' => $moduleData['modules_display_name'],
|
||||
'modules_description' => $moduleData['modules_description'],
|
||||
'modules_version' => $moduleData['modules_version'],
|
||||
'modules_author' => $moduleData['modules_author'],
|
||||
'modules_dependencies' => $moduleData['modules_dependencies'],
|
||||
'modules_ative' => $moduleData['modules_ative'],
|
||||
'modules_public' => $moduleData['modules_public'],
|
||||
'modules_blocked' => $moduleData['modules_blocked'],
|
||||
'modules_settings' => $moduleData['modules_settings'],
|
||||
'modules_permissions' => $moduleData['modules_permissions'],
|
||||
'modules_path' => $moduleData['modules_path'],
|
||||
'modules_namespace' => $moduleData['modules_namespace'],
|
||||
'modules_icon' => $moduleData['modules_icon'],
|
||||
'menu_side_bar' => $moduleData['menu_side_bar'],
|
||||
'menu_nav_bar' => $moduleData['menu_nav_bar'],
|
||||
'modules_order' => $moduleData['modules_order'],
|
||||
'modules_update_date' => date('Y-m-d H:i:s')
|
||||
]);
|
||||
}
|
||||
|
||||
// Associate module with all existing companies in 'bus_modules'
|
||||
if (Capsule::schema()->hasTable('bus')) {
|
||||
$companies = Capsule::table('bus')->get();
|
||||
foreach ($companies as $company) {
|
||||
$existingBusModule = Capsule::table('bus_modules')
|
||||
->where('bus_modules_bus_id', $company->bus_id)
|
||||
->where('bus_modules_module_id', $moduleId)
|
||||
->first();
|
||||
|
||||
if (!$existingBusModule) {
|
||||
Capsule::table('bus_modules')->insert([
|
||||
'bus_modules_bus_id' => $company->bus_id,
|
||||
'bus_modules_module_id' => $moduleId,
|
||||
'bus_modules_is_enabled' => 1,
|
||||
'bus_modules_show_public_nav' => $moduleData['modules_public'],
|
||||
'bus_modules_show_dashboard_nav' => 1
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Register permissions in 'role_permissions' table for admin and member roles
|
||||
$permissions = [
|
||||
// AffiliatesAdmin permissions
|
||||
'affiliatesadmin.affiliates.view',
|
||||
'affiliatesadmin.affiliates.create',
|
||||
'affiliatesadmin.affiliates.edit',
|
||||
'affiliatesadmin.affiliates.delete',
|
||||
'affiliatesadmin.commissions.view',
|
||||
'affiliatesadmin.commissions.approve',
|
||||
'affiliatesadmin.commissions.reject',
|
||||
'affiliatesadmin.commissions.pay',
|
||||
'affiliatesadmin.banners.view',
|
||||
'affiliatesadmin.banners.create',
|
||||
'affiliatesadmin.banners.edit',
|
||||
'affiliatesadmin.banners.delete',
|
||||
'affiliatesadmin.statistics.view',
|
||||
// Affiliates permissions
|
||||
'affiliates.dashboard.view',
|
||||
'affiliates.banners.view',
|
||||
'affiliates.banners.get_code',
|
||||
'affiliates.commissions.view',
|
||||
'affiliates.profile.view',
|
||||
'affiliates.profile.edit',
|
||||
];
|
||||
|
||||
$defaultCompanyId = 1;
|
||||
foreach (['admin', 'member'] as $role) {
|
||||
foreach ($permissions as $perm) {
|
||||
$existing = Capsule::table('role_permissions')
|
||||
->where('role_permissions_role', $role)
|
||||
->where('role_permissions_bus_id', $defaultCompanyId)
|
||||
->where('role_permissions_permission', $perm)
|
||||
->first();
|
||||
if (!$existing) {
|
||||
Capsule::table('role_permissions')->insert([
|
||||
'role_permissions_role' => $role,
|
||||
'role_permissions_bus_id' => $defaultCompanyId,
|
||||
'role_permissions_permission' => $perm,
|
||||
'role_permissions_created_by' => null,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s')
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
// Remove permissions from 'role_permissions' for admin and member roles
|
||||
$defaultCompanyId = 1;
|
||||
$permissions = [
|
||||
// AffiliatesAdmin permissions
|
||||
'affiliatesadmin.affiliates.view',
|
||||
'affiliatesadmin.affiliates.create',
|
||||
'affiliatesadmin.affiliates.edit',
|
||||
'affiliatesadmin.affiliates.delete',
|
||||
'affiliatesadmin.commissions.view',
|
||||
'affiliatesadmin.commissions.approve',
|
||||
'affiliatesadmin.commissions.reject',
|
||||
'affiliatesadmin.commissions.pay',
|
||||
'affiliatesadmin.banners.view',
|
||||
'affiliatesadmin.banners.create',
|
||||
'affiliatesadmin.banners.edit',
|
||||
'affiliatesadmin.banners.delete',
|
||||
'affiliatesadmin.statistics.view',
|
||||
// Affiliates permissions
|
||||
'affiliates.dashboard.view',
|
||||
'affiliates.banners.view',
|
||||
'affiliates.banners.get_code',
|
||||
'affiliates.commissions.view',
|
||||
'affiliates.profile.view',
|
||||
'affiliates.profile.edit',
|
||||
];
|
||||
|
||||
foreach (['admin', 'member'] as $role) {
|
||||
foreach ($permissions as $perm) {
|
||||
Capsule::table('role_permissions')
|
||||
->where('role_permissions_role', $role)
|
||||
->where('role_permissions_bus_id', $defaultCompanyId)
|
||||
->where('role_permissions_permission', $perm)
|
||||
->delete();
|
||||
}
|
||||
}
|
||||
|
||||
// Remove from bus_modules
|
||||
$moduleNames = ['affiliatesadmin', 'affiliates'];
|
||||
foreach ($moduleNames as $moduleName) {
|
||||
$module = Capsule::table('modules')->where('modules_name', $moduleName)->first();
|
||||
if ($module) {
|
||||
Capsule::table('bus_modules')
|
||||
->where('bus_modules_module_id', $module->modules_id)
|
||||
->delete();
|
||||
}
|
||||
}
|
||||
|
||||
// Remove from modules table
|
||||
foreach ($moduleNames as $moduleName) {
|
||||
Capsule::table('modules')->where('modules_name', $moduleName)->delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Capsule\Manager as Capsule;
|
||||
|
||||
class AddMenuToAffiliatesadmin
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
// Get the affiliatesadmin module
|
||||
$module = Capsule::table('modules')->where('modules_name', 'affiliatesadmin')->first();
|
||||
|
||||
if ($module) {
|
||||
// Get current settings
|
||||
$settings = $module->modules_settings ? json_decode($module->modules_settings, true) : [];
|
||||
|
||||
// Add menu configuration
|
||||
$settings['menu'] = [
|
||||
'dashboard' => [
|
||||
'icon' => 'bi bi-people',
|
||||
'label' => 'Gerenciamento de Afiliados',
|
||||
'route' => 'admin/affiliatesadmin/affiliates',
|
||||
'order' => 80
|
||||
]
|
||||
];
|
||||
|
||||
// Update the module
|
||||
Capsule::table('modules')
|
||||
->where('modules_name', 'affiliatesadmin')
|
||||
->update([
|
||||
'modules_settings' => json_encode($settings)
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
// Remove menu configuration (optional rollback)
|
||||
$module = Capsule::table('modules')->where('modules_name', 'affiliatesadmin')->first();
|
||||
|
||||
if ($module) {
|
||||
$settings = $module->modules_settings ? json_decode($module->modules_settings, true) : [];
|
||||
unset($settings['menu']);
|
||||
|
||||
Capsule::table('modules')
|
||||
->where('modules_name', 'affiliatesadmin')
|
||||
->update([
|
||||
'modules_settings' => json_encode($settings)
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user