Files
doormile_milderapp/lib/xpress/Models/TenantPrice/Tenant.dart
Thiru-tenext d7348e253f Miler rider app: surface system, visible design language, backend lifecycle
Design system
- MilerSurface ladder (canvas → working → raised → floating) with MilerPanel
  as layer 1; canvas moved to #DEE3EA so white separates at 1.290:1.
- Visible vocabulary applied across Home, Deliveries, Activity, Account and
  the sheets: hero heads (tabular numeral + small caption, clamped at 1.3x),
  canvas wells for anything that opens, small filled tags for shelf labels,
  demoted placeholders. Recorded in DESIGN_SYSTEM.md §6.
- One icon family: 222 Material glyphs migrated to Lucide; none left outside
  lib/xpress.
- Colour semantics corrected: amber only for what is genuinely owed, brand red
  reserved for the live stop, disabled primaries go neutral rather than pale.

Data and lifecycle
- lib/data/lifecycle.dart reads mutations for what they prove; route_order.dart
  makes admin sequence the single ordering authority; service_day.dart, and
  stop_area.dart rewritten against live Coimbatore addresses (digit-token
  stripping, city stoplist, street suffixes, stammer collapse).
- countLabel states the load once, in bags.

Testing
- 1440 tests passing; golden shot harnesses for Home, Deliveries, Activity,
  sheets and verify, with test/failures/ now gitignored (diff debris).
- New pins: home_gutter_test, stop_area_test, plus updated structural bounds.

Note: this commit also carries pre-existing working-tree deletions that were
present before this work (API_SPEC.md, README.md, demo test fixtures).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-22 05:40:35 +05:30

79 lines
2.0 KiB
Dart

class Tenant {
int? code;
TenantDetails? details;
String? message;
bool? status;
Tenant({this.code, this.details, this.message, this.status});
factory Tenant.fromJson(Map<String, dynamic> json) {
return Tenant(
code: json['code'] as int?,
details: json['details'] != null
? TenantDetails.fromJson(json['details'] as Map<String, dynamic>)
: null,
message: json['message'] as String?,
status: json['status'] as bool?,
);
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['code'] = code;
if (details != null) {
data['details'] = details!.toJson();
}
data['message'] = message;
data['status'] = status;
return data;
}
}
class TenantDetails {
int? pricingId;
int? tenantId;
int? locationId;
String? pricingDate;
int? basePrice;
int? pricePerKm;
int? minKm;
int? otherCharges;
TenantDetails({
this.pricingId,
this.tenantId,
this.locationId,
this.pricingDate,
this.basePrice,
this.pricePerKm,
this.minKm,
this.otherCharges,
});
factory TenantDetails.fromJson(Map<String, dynamic> json) {
return TenantDetails(
pricingId: json['pricingid'] as int?,
tenantId: json['tenantid'] as int?,
locationId: json['locationid'] as int?,
pricingDate: json['pricingdate'] as String?,
basePrice: json['baseprice'] as int?,
pricePerKm: json['priceperkm'] as int?,
minKm: json['minkm'] as int?,
otherCharges: json['othercharges'] as int?,
);
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['pricingid'] = pricingId;
data['tenantid'] = tenantId;
data['locationid'] = locationId;
data['pricingdate'] = pricingDate;
data['baseprice'] = basePrice;
data['priceperkm'] = pricePerKm;
data['minkm'] = minKm;
data['othercharges'] = otherCharges;
return data;
}
}