feat: order revision, rial wage from variant, product tags; drop user-app-v2
Admin order edit with category chips and timeline; customer checkout charges variant rialWage; product tags; retire the unused user-app-v2 tree. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -98,7 +98,13 @@ export class OrdersService {
|
||||
if (quotes && !quote) throw new NotFoundException(`Variant ${variant.id} not found`);
|
||||
const wagePercent = new Prisma.Decimal(quote ? quote.wagePercentSnapshot : item.wagePercent);
|
||||
const discountPercent = new Prisma.Decimal(quote ? quote.discountPercentSnapshot : (item.discountPercent ?? 0));
|
||||
if (quote) this.warnOnPriceMismatch(variant.id, item, wagePercent, discountPercent);
|
||||
// Customer path: flat Rial comes from the variant (اجرت ریالی), never
|
||||
// from the request body — same MON-08 posture as wage/discount. Operator
|
||||
// path keeps the panel-entered figure.
|
||||
const flatRialCharge = quotes
|
||||
? new Prisma.Decimal(variant.rialWage ?? 0)
|
||||
: new Prisma.Decimal(item.flatRialCharge ?? 0);
|
||||
if (quote) this.warnOnPriceMismatch(variant.id, item, wagePercent, discountPercent, flatRialCharge);
|
||||
const netPercent = wagePercent.sub(discountPercent);
|
||||
const computedWeightGrams = rashWeight.mul(netPercent.div(100).add(1));
|
||||
|
||||
@@ -109,8 +115,7 @@ export class OrdersService {
|
||||
wagePercentSnapshot: wagePercent,
|
||||
discountPercentSnapshot: discountPercent,
|
||||
computedWeightGrams,
|
||||
// Legacy app: rial_pay is always 0 (cart.vue); only an operator sets one.
|
||||
flatRialCharge: new Prisma.Decimal(quotes ? 0 : (item.flatRialCharge ?? 0)),
|
||||
flatRialCharge,
|
||||
};
|
||||
}),
|
||||
);
|
||||
@@ -216,15 +221,15 @@ export class OrdersService {
|
||||
* mismatch means a stale app version, a promotion that expired between the
|
||||
* product page and checkout, or a tampered request.
|
||||
*
|
||||
* `flatRialCharge` is included because the app hardcodes 0 (cart.vue:179) and
|
||||
* only an operator ever sets one — anything non-zero from a customer is a
|
||||
* client that should not be sending it.
|
||||
* Flat Rial is the variant's `rialWage` (اجرت ریالی); the client's number is
|
||||
* ignored and logged when it differs.
|
||||
*/
|
||||
private warnOnPriceMismatch(
|
||||
variantId: string,
|
||||
sent: CreateOrderItemInputDto,
|
||||
wagePercent: Prisma.Decimal,
|
||||
discountPercent: Prisma.Decimal,
|
||||
flatRialCharge: Prisma.Decimal,
|
||||
) {
|
||||
const differs: string[] = [];
|
||||
if (!wagePercent.eq(sent.wagePercent)) {
|
||||
@@ -233,8 +238,8 @@ export class OrdersService {
|
||||
if (!discountPercent.eq(sent.discountPercent ?? 0)) {
|
||||
differs.push(`discountPercent sent=${sent.discountPercent ?? 0} used=${discountPercent.toString()}`);
|
||||
}
|
||||
if ((sent.flatRialCharge ?? 0) !== 0) {
|
||||
differs.push(`flatRialCharge sent=${sent.flatRialCharge} used=0`);
|
||||
if (!flatRialCharge.eq(sent.flatRialCharge ?? 0)) {
|
||||
differs.push(`flatRialCharge sent=${sent.flatRialCharge ?? 0} used=${flatRialCharge.toString()}`);
|
||||
}
|
||||
if (differs.length) {
|
||||
this.logger.warn(
|
||||
|
||||
Reference in New Issue
Block a user