67da97178d
═══ Procentaj (markup rules) ═══
- markup_rules table cu type (category/brand/range), key, range_from/to, markup_pct, priority
- MarkupRule::bestForPart($part) — rezolvare brand → category → range → 30% default
- MarkupRule::applyToPart($part) — recalc sell_price = buy_price × (1 + pct/100)
- Filament resource sub Depozit cu form dinamic per tip
- Action 'Aplică toate regulile la stoc' — recalc tot catalogul (chunk 100)
═══ Finanțe consolidat ═══
- Custom Page /app/finance cu 4 tab-uri:
• Overview: încasări/cheltuieli/profit/datorii (4 cards)
• Cashflow: bar chart per zi (verde=in, roșu=out) + Net total
• P&L: venituri (manopere + piese) vs costuri (cost piese + cheltuieli pe categorie)
+ profit net + marjă %
• Balance: active (cash net + datorii + stoc), all-time totals
- Period filter: lună / luna trecută / an / 30 zile
═══ Recomandări ═══
- Custom Page /app/recommendations 4 sectiuni:
• Clienți pierduți (>6 luni fără WO + are istoric)
• Mașini km>100k (sugestie revizie)
• Fișe neplătite (rest > 0)
• VIP fără contact >30 zile
Total tenant routes: 100.
32 lines
1.1 KiB
PHP
32 lines
1.1 KiB
PHP
<?php
|
|
|
|
use Illuminate\Database\Migrations\Migration;
|
|
use Illuminate\Database\Schema\Blueprint;
|
|
use Illuminate\Support\Facades\Schema;
|
|
|
|
return new class extends Migration
|
|
{
|
|
public function up(): void
|
|
{
|
|
Schema::create('markup_rules', function (Blueprint $t) {
|
|
$t->id();
|
|
$t->foreignId('company_id')->constrained()->cascadeOnDelete();
|
|
$t->string('type'); // category / brand / range
|
|
$t->string('key')->nullable(); // pentru type=category|brand: numele
|
|
$t->decimal('range_from', 10, 2)->default(0); // pentru type=range: limita inf
|
|
$t->decimal('range_to', 10, 2)->nullable(); // pentru type=range: limita sup
|
|
$t->decimal('markup_pct', 5, 2); // ex 30 = +30%
|
|
$t->unsignedSmallInteger('priority')->default(100);
|
|
$t->boolean('is_active')->default(true);
|
|
$t->timestamps();
|
|
|
|
$t->index(['company_id', 'type', 'is_active', 'priority']);
|
|
});
|
|
}
|
|
|
|
public function down(): void
|
|
{
|
|
Schema::dropIfExists('markup_rules');
|
|
}
|
|
};
|