generated from MokoConsulting/Template-Joomla
feat: add Joomla scaffolding — plugin manifest, Extension class, services provider, SQL install/uninstall, language files
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
PLG_SYSTEM_MOKOSUITEAUTO="System - MokoSuite Auto"
|
||||
PLG_SYSTEM_MOKOSUITEAUTO_DESC="Auto dealership management — VIN inventory, deals, F&I, trade-ins, test drives, financing, service department."
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
PLG_SYSTEM_MOKOSUITEAUTO="System - MokoSuite Auto"
|
||||
PLG_SYSTEM_MOKOSUITEAUTO_DESC="Auto dealership management — VIN inventory, deals, F&I, trade-ins, test drives, financing, service department."
|
||||
@@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<extension type="plugin" group="system" method="upgrade">
|
||||
<name>System - MokoSuite Auto</name>
|
||||
<element>mokosuiteauto</element>
|
||||
<author>Moko Consulting</author>
|
||||
<creationDate>2026-06-22</creationDate>
|
||||
<copyright>Copyright (C) 2026 Moko Consulting. All rights reserved.</copyright>
|
||||
<license>GPL-3.0-or-later</license>
|
||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||
<authorUrl>https://mokoconsulting.tech</authorUrl>
|
||||
<version>01.00.00</version>
|
||||
<php_minimum>8.3</php_minimum>
|
||||
<description>PLG_SYSTEM_MOKOSUITEAUTO_DESC</description>
|
||||
<namespace path="src">Moko\Plugin\System\MokoSuiteAuto</namespace>
|
||||
<files>
|
||||
<folder>src</folder>
|
||||
<folder>services</folder>
|
||||
<folder>language</folder>
|
||||
<folder>sql</folder>
|
||||
</files>
|
||||
<languages folder="language">
|
||||
<language tag="en-GB">en-GB/plg_system_mokosuiteauto.ini</language>
|
||||
<language tag="en-GB">en-GB/plg_system_mokosuiteauto.sys.ini</language>
|
||||
</languages>
|
||||
<install><sql><file driver="mysql" charset="utf8">sql/install.mysql.sql</file></sql></install>
|
||||
<uninstall><sql><file driver="mysql" charset="utf8">sql/uninstall.mysql.sql</file></sql></uninstall>
|
||||
<config>
|
||||
<fields name="params">
|
||||
<fieldset name="basic" label="Inventory">
|
||||
<field name="aging_threshold" type="number" default="60" label="Aging Threshold (days)" />
|
||||
<field name="default_commission_type" type="list" default="flat" label="Default Commission Type">
|
||||
<option value="flat">Flat Fee</option>
|
||||
<option value="graduated">Graduated %</option>
|
||||
</field>
|
||||
</fieldset>
|
||||
<fieldset name="financing" label="Financing">
|
||||
<field name="default_apr" type="number" default="5.9" label="Default APR %" step="0.1" />
|
||||
<field name="financing_terms" type="text" default="24,36,48,60,72,84" label="Available Terms (months, comma-separated)" />
|
||||
</fieldset>
|
||||
<fieldset name="service" label="Service Department">
|
||||
<field name="ro_types" type="text" default="repair,maintenance,warranty,recall,inspection" label="RO Types (comma-separated)" />
|
||||
</fieldset>
|
||||
</fields>
|
||||
</config>
|
||||
</extension>
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Extension\PluginInterface;
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Plugin\PluginHelper;
|
||||
use Joomla\DI\Container;
|
||||
use Joomla\DI\ServiceProviderInterface;
|
||||
use Joomla\Event\DispatcherInterface;
|
||||
use Moko\Plugin\System\MokoSuiteAuto\Extension\Auto;
|
||||
|
||||
return new class implements ServiceProviderInterface
|
||||
{
|
||||
public function register(Container $container): void
|
||||
{
|
||||
$container->set(
|
||||
PluginInterface::class,
|
||||
function (Container $container) {
|
||||
$dispatcher = $container->get(DispatcherInterface::class);
|
||||
$plugin = new Auto($dispatcher, (array) PluginHelper::getPlugin('system', 'mokosuiteauto'));
|
||||
$plugin->setApplication(Factory::getApplication());
|
||||
return $plugin;
|
||||
}
|
||||
);
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,152 @@
|
||||
--
|
||||
-- MokoSuite Auto Tables
|
||||
--
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `#__mokosuiteauto_vehicles` (
|
||||
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`vin` CHAR(17) NOT NULL,
|
||||
`stock_number` VARCHAR(20) NOT NULL DEFAULT '',
|
||||
`year` SMALLINT UNSIGNED NOT NULL,
|
||||
`make` VARCHAR(100) NOT NULL,
|
||||
`model` VARCHAR(100) NOT NULL,
|
||||
`trim_level` VARCHAR(100) NOT NULL DEFAULT '',
|
||||
`body_style` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`exterior_color` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`interior_color` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`engine` VARCHAR(100) NOT NULL DEFAULT '',
|
||||
`transmission` ENUM('automatic','manual','cvt') NOT NULL DEFAULT 'automatic',
|
||||
`drivetrain` ENUM('fwd','rwd','awd','4wd') NOT NULL DEFAULT 'fwd',
|
||||
`mileage` INT UNSIGNED NOT NULL DEFAULT 0,
|
||||
`condition_type` ENUM('new','used','certified') NOT NULL DEFAULT 'used',
|
||||
`status` ENUM('in_transit','on_lot','sold','wholesale','trade_pending') NOT NULL DEFAULT 'on_lot',
|
||||
`invoice_price` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||||
`list_price` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||||
`internet_price` DECIMAL(12,2) DEFAULT NULL,
|
||||
`reconditioning_cost` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
||||
`lot_date` DATE DEFAULT NULL,
|
||||
`sold_date` DATE DEFAULT NULL,
|
||||
`notes` TEXT,
|
||||
`created` DATETIME NOT NULL,
|
||||
`modified` DATETIME DEFAULT NULL,
|
||||
`created_by` INT NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `idx_vin` (`vin`),
|
||||
KEY `idx_stock` (`stock_number`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_condition` (`condition_type`),
|
||||
KEY `idx_make_model` (`make`, `model`),
|
||||
KEY `idx_lot_date` (`lot_date`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `#__mokosuiteauto_deals` (
|
||||
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`vehicle_id` INT UNSIGNED NOT NULL,
|
||||
`buyer_contact_id` INT NOT NULL,
|
||||
`salesperson_id` INT DEFAULT NULL,
|
||||
`fi_manager_id` INT DEFAULT NULL,
|
||||
`sale_price` DECIMAL(12,2) NOT NULL,
|
||||
`trade_allowance` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||||
`trade_payoff` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||||
`down_payment` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||||
`financed_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||||
`apr` DECIMAL(5,2) DEFAULT NULL,
|
||||
`term_months` INT UNSIGNED DEFAULT NULL,
|
||||
`monthly_payment` DECIMAL(10,2) DEFAULT NULL,
|
||||
`front_gross` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||||
`back_gross` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||||
`total_gross` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||||
`status` ENUM('prospect','negotiating','pending_finance','approved','delivered','unwound') NOT NULL DEFAULT 'prospect',
|
||||
`deal_number` VARCHAR(20) NOT NULL DEFAULT '',
|
||||
`created` DATETIME NOT NULL,
|
||||
`modified` DATETIME DEFAULT NULL,
|
||||
`delivered_at` DATETIME DEFAULT NULL,
|
||||
`created_by` INT NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_vehicle` (`vehicle_id`),
|
||||
KEY `idx_buyer` (`buyer_contact_id`),
|
||||
KEY `idx_salesperson` (`salesperson_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_deal_number` (`deal_number`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `#__mokosuiteauto_fi_products` (
|
||||
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`deal_id` INT UNSIGNED NOT NULL,
|
||||
`product_name` VARCHAR(255) NOT NULL,
|
||||
`cost` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
||||
`price` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
||||
`profit` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
||||
`term_months` INT UNSIGNED DEFAULT NULL,
|
||||
`created` DATETIME NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_deal` (`deal_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `#__mokosuiteauto_tradeins` (
|
||||
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`deal_id` INT UNSIGNED DEFAULT NULL,
|
||||
`vin` CHAR(17) NOT NULL DEFAULT '',
|
||||
`year` SMALLINT UNSIGNED DEFAULT NULL,
|
||||
`make` VARCHAR(100) NOT NULL DEFAULT '',
|
||||
`model` VARCHAR(100) NOT NULL DEFAULT '',
|
||||
`mileage` INT UNSIGNED NOT NULL DEFAULT 0,
|
||||
`condition_grade` ENUM('excellent','good','fair','poor') NOT NULL DEFAULT 'good',
|
||||
`appraisal_value` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||||
`payoff_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||||
`equity` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||||
`status` ENUM('pending_review','approved','applied','rejected') NOT NULL DEFAULT 'pending_review',
|
||||
`owner_contact_id` INT DEFAULT NULL,
|
||||
`appraised_by` INT DEFAULT NULL,
|
||||
`notes` TEXT,
|
||||
`created` DATETIME NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_deal` (`deal_id`),
|
||||
KEY `idx_vin` (`vin`),
|
||||
KEY `idx_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `#__mokosuiteauto_test_drives` (
|
||||
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`vehicle_id` INT UNSIGNED NOT NULL,
|
||||
`contact_id` INT NOT NULL,
|
||||
`salesperson_id` INT DEFAULT NULL,
|
||||
`scheduled_at` DATETIME NOT NULL,
|
||||
`started_at` DATETIME DEFAULT NULL,
|
||||
`ended_at` DATETIME DEFAULT NULL,
|
||||
`mileage_out` INT UNSIGNED DEFAULT NULL,
|
||||
`mileage_in` INT UNSIGNED DEFAULT NULL,
|
||||
`status` ENUM('scheduled','in_progress','completed','cancelled','no_show') NOT NULL DEFAULT 'scheduled',
|
||||
`notes` TEXT,
|
||||
`created` DATETIME NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_vehicle` (`vehicle_id`),
|
||||
KEY `idx_contact` (`contact_id`),
|
||||
KEY `idx_date` (`scheduled_at`),
|
||||
KEY `idx_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `#__mokosuiteauto_service_orders` (
|
||||
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`ro_number` VARCHAR(20) NOT NULL DEFAULT '',
|
||||
`vin` CHAR(17) NOT NULL DEFAULT '',
|
||||
`contact_id` INT DEFAULT NULL,
|
||||
`advisor_id` INT DEFAULT NULL,
|
||||
`technician_id` INT DEFAULT NULL,
|
||||
`type` ENUM('repair','maintenance','warranty','recall','inspection') NOT NULL DEFAULT 'repair',
|
||||
`concern` TEXT,
|
||||
`diagnosis` TEXT,
|
||||
`resolution` TEXT,
|
||||
`parts_total` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
||||
`labor_total` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
||||
`total` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
||||
`status` ENUM('open','in_progress','waiting_parts','completed','invoiced') NOT NULL DEFAULT 'open',
|
||||
`opened_at` DATETIME NOT NULL,
|
||||
`completed_at` DATETIME DEFAULT NULL,
|
||||
`created` DATETIME NOT NULL,
|
||||
`created_by` INT NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_ro` (`ro_number`),
|
||||
KEY `idx_vin` (`vin`),
|
||||
KEY `idx_contact` (`contact_id`),
|
||||
KEY `idx_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
@@ -0,0 +1,10 @@
|
||||
--
|
||||
-- MokoSuite Auto — Uninstall
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `#__mokosuiteauto_service_orders`;
|
||||
DROP TABLE IF EXISTS `#__mokosuiteauto_test_drives`;
|
||||
DROP TABLE IF EXISTS `#__mokosuiteauto_tradeins`;
|
||||
DROP TABLE IF EXISTS `#__mokosuiteauto_fi_products`;
|
||||
DROP TABLE IF EXISTS `#__mokosuiteauto_deals`;
|
||||
DROP TABLE IF EXISTS `#__mokosuiteauto_vehicles`;
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace Moko\Plugin\System\MokoSuiteAuto\Extension;
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Plugin\CMSPlugin;
|
||||
use Joomla\Event\SubscriberInterface;
|
||||
|
||||
class Auto extends CMSPlugin implements SubscriberInterface
|
||||
{
|
||||
protected $autoloadLanguage = true;
|
||||
|
||||
public static function getSubscribedEvents(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user