price_offset_percent ?? 0) : 0.0; } public static function syncFromReference(Product $product, int $basePrice, int $baseProfit = 0): void { if (!Product::hasStoredPriceColumns()) { return; } $offsetPercent = self::offsetPercent($product); $data = ['price' => self::adjustedTotal($basePrice, $baseProfit, $offsetPercent)]; if (\Illuminate\Support\Facades\Schema::hasColumn($product->getTable(), 'price_profit')) { $data['price_profit'] = 0; } Product::where('id', $product->id)->update($data); } /** وقتی فقط درصد در ادمین عوض می‌شود (بدون sync جدید) */ public static function reapplyOffsetPercent(Product $product, float $newOffsetPercent, ?float $oldOffsetPercent = null): void { if (!Product::hasPriceOffsetColumn() || !Product::hasStoredPriceColumns()) { return; } $oldOffset = $oldOffsetPercent ?? self::offsetPercent($product); $currentTotal = (int) ($product->price + ($product->price_profit ?? 0)); $reference = $oldOffset != 0.0 ? (int) round($currentTotal / (1 + $oldOffset / 100)) : $currentTotal; Product::where('id', $product->id)->update([ 'price' => (int) round($reference * (1 + ($newOffsetPercent / 100))), 'price_profit' => 0, ]); } }