Initial commit of Doormile CRM Mobile with UI modernizations
This commit is contained in:
173
lib/models/client.dart
Normal file
173
lib/models/client.dart
Normal file
@@ -0,0 +1,173 @@
|
||||
enum DataConsent { basicOnly, full }
|
||||
|
||||
enum BusinessType { ecommerce, manufacturing, wholesale, retail }
|
||||
|
||||
enum ClientStatus { newClient, pending, completed, updated }
|
||||
|
||||
extension BusinessTypeLabel on BusinessType {
|
||||
String get label {
|
||||
switch (this) {
|
||||
case BusinessType.ecommerce:
|
||||
return 'E-commerce';
|
||||
case BusinessType.manufacturing:
|
||||
return 'Manufacturing';
|
||||
case BusinessType.wholesale:
|
||||
return 'Wholesale';
|
||||
case BusinessType.retail:
|
||||
return 'Retail';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension ClientStatusLabel on ClientStatus {
|
||||
String get label {
|
||||
switch (this) {
|
||||
case ClientStatus.newClient:
|
||||
return 'NEW';
|
||||
case ClientStatus.pending:
|
||||
return 'PENDING';
|
||||
case ClientStatus.completed:
|
||||
return 'COMPLETED';
|
||||
case ClientStatus.updated:
|
||||
return 'UPDATED';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Client {
|
||||
final String id;
|
||||
final String name;
|
||||
final String city; // free-text, e.g. "New York", "Austin"
|
||||
final BusinessType businessType;
|
||||
final double parcelVolume;
|
||||
final int activeContracts;
|
||||
final String provider;
|
||||
final String efficiency;
|
||||
final ClientStatus status;
|
||||
final String lastUpdated;
|
||||
final bool surveySubmitted;
|
||||
final String notes;
|
||||
final DataConsent dataConsent;
|
||||
|
||||
// Extended basic-info fields
|
||||
final String phone; // contact number
|
||||
final String frequency; // shipment frequency: Daily / Weekly / etc.
|
||||
final String businessState; // Indian state of the business
|
||||
final String transitType; // 'within_state' | 'state_to_state' | ''
|
||||
final String transitFrom; // city (within_state) or state name (state_to_state)
|
||||
final String transitTo; // city (within_state) or state name (state_to_state)
|
||||
final String neighbourhood; // local area / neighbourhood
|
||||
final String logisticsSegment; // 'First Mile' | 'Middle Mile' | 'Last Mile' | ''
|
||||
final String pincode; // client postal/PIN code — optional manual entry
|
||||
|
||||
// Device GPS at the moment of survey submission — stored for field audit, not displayed in app UI.
|
||||
final double surveyLat;
|
||||
final double surveyLng;
|
||||
final String surveyAddress; // reverse-geocoded full address
|
||||
final String surveyZone; // suburb / neighbourhood from geocoder
|
||||
final String surveyPincode; // postal code from GPS reverse-geocode
|
||||
|
||||
// Field-agent attribution — who collected this record (from login session).
|
||||
final String recordedByName; // e.g. "Kamesh"
|
||||
final String recordedByEmail; // login email of the agent
|
||||
final String recordedByRole; // 'admin' | 'rep' | 'support'
|
||||
|
||||
const Client({
|
||||
required this.id,
|
||||
required this.name,
|
||||
required this.city,
|
||||
required this.businessType,
|
||||
required this.parcelVolume,
|
||||
required this.activeContracts,
|
||||
required this.provider,
|
||||
required this.efficiency,
|
||||
required this.status,
|
||||
required this.lastUpdated,
|
||||
required this.surveySubmitted,
|
||||
this.notes = '',
|
||||
this.dataConsent = DataConsent.full,
|
||||
this.phone = '',
|
||||
this.frequency = '',
|
||||
this.businessState = '',
|
||||
this.transitType = '',
|
||||
this.transitFrom = '',
|
||||
this.transitTo = '',
|
||||
this.neighbourhood = '',
|
||||
this.logisticsSegment = '',
|
||||
this.pincode = '',
|
||||
this.surveyLat = 0.0,
|
||||
this.surveyLng = 0.0,
|
||||
this.surveyAddress = '',
|
||||
this.surveyZone = '',
|
||||
this.surveyPincode = '',
|
||||
this.recordedByName = '',
|
||||
this.recordedByEmail = '',
|
||||
this.recordedByRole = '',
|
||||
});
|
||||
|
||||
Client copyWith({
|
||||
String? id,
|
||||
String? name,
|
||||
String? city,
|
||||
BusinessType? businessType,
|
||||
double? parcelVolume,
|
||||
int? activeContracts,
|
||||
String? provider,
|
||||
String? efficiency,
|
||||
ClientStatus? status,
|
||||
String? lastUpdated,
|
||||
bool? surveySubmitted,
|
||||
String? notes,
|
||||
DataConsent? dataConsent,
|
||||
String? phone,
|
||||
String? frequency,
|
||||
String? businessState,
|
||||
String? transitType,
|
||||
String? transitFrom,
|
||||
String? transitTo,
|
||||
String? neighbourhood,
|
||||
String? logisticsSegment,
|
||||
String? pincode,
|
||||
double? surveyLat,
|
||||
double? surveyLng,
|
||||
String? surveyAddress,
|
||||
String? surveyZone,
|
||||
String? surveyPincode,
|
||||
String? recordedByName,
|
||||
String? recordedByEmail,
|
||||
String? recordedByRole,
|
||||
}) {
|
||||
return Client(
|
||||
id: id ?? this.id,
|
||||
name: name ?? this.name,
|
||||
city: city ?? this.city,
|
||||
businessType: businessType ?? this.businessType,
|
||||
parcelVolume: parcelVolume ?? this.parcelVolume,
|
||||
activeContracts: activeContracts ?? this.activeContracts,
|
||||
provider: provider ?? this.provider,
|
||||
efficiency: efficiency ?? this.efficiency,
|
||||
status: status ?? this.status,
|
||||
lastUpdated: lastUpdated ?? this.lastUpdated,
|
||||
surveySubmitted: surveySubmitted ?? this.surveySubmitted,
|
||||
notes: notes ?? this.notes,
|
||||
dataConsent: dataConsent ?? this.dataConsent,
|
||||
phone: phone ?? this.phone,
|
||||
frequency: frequency ?? this.frequency,
|
||||
businessState: businessState ?? this.businessState,
|
||||
transitType: transitType ?? this.transitType,
|
||||
transitFrom: transitFrom ?? this.transitFrom,
|
||||
transitTo: transitTo ?? this.transitTo,
|
||||
neighbourhood: neighbourhood ?? this.neighbourhood,
|
||||
logisticsSegment: logisticsSegment ?? this.logisticsSegment,
|
||||
pincode: pincode ?? this.pincode,
|
||||
surveyLat: surveyLat ?? this.surveyLat,
|
||||
surveyLng: surveyLng ?? this.surveyLng,
|
||||
surveyAddress: surveyAddress ?? this.surveyAddress,
|
||||
surveyZone: surveyZone ?? this.surveyZone,
|
||||
surveyPincode: surveyPincode ?? this.surveyPincode,
|
||||
recordedByName: recordedByName ?? this.recordedByName,
|
||||
recordedByEmail: recordedByEmail ?? this.recordedByEmail,
|
||||
recordedByRole: recordedByRole ?? this.recordedByRole,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user