120 lines
3.9 KiB
Dart
120 lines
3.9 KiB
Dart
/// Project Submission Request Model
|
|
///
|
|
/// Request model for creating/updating project submissions via API.
|
|
/// Based on API: building_material.building_material.api.project.save
|
|
library;
|
|
|
|
import 'package:intl/intl.dart';
|
|
|
|
/// Project Submission Request
|
|
///
|
|
/// Used to create or update project submissions.
|
|
class ProjectSubmissionRequest {
|
|
/// Project ID (optional for new, required for update)
|
|
final String? name;
|
|
|
|
/// Project name/title (API: designed_area)
|
|
final String designedArea;
|
|
|
|
/// Project address (API: address_of_project)
|
|
final String addressOfProject;
|
|
|
|
/// Project owner name (API: project_owner)
|
|
final String projectOwner;
|
|
|
|
/// Design firm name (API: design_firm)
|
|
final String? designFirm;
|
|
|
|
/// Construction contractor name (API: contruction_contractor)
|
|
final String? contractionContractor;
|
|
|
|
/// Design area in m² (API: design_area)
|
|
final double designArea;
|
|
|
|
/// Products included in the design (API: products_included_in_the_design)
|
|
final String productsIncludedInTheDesign;
|
|
|
|
/// Project progress ID from ProjectProgress.id (API: project_progress)
|
|
final String projectProgress;
|
|
|
|
/// Expected commencement date (API: expected_commencement_date)
|
|
final DateTime? expectedCommencementDate;
|
|
|
|
/// Project description (API: description)
|
|
final String? description;
|
|
|
|
/// Request date (API: request_date)
|
|
final DateTime? requestDate;
|
|
|
|
const ProjectSubmissionRequest({
|
|
this.name,
|
|
required this.designedArea,
|
|
required this.addressOfProject,
|
|
required this.projectOwner,
|
|
this.designFirm,
|
|
this.contractionContractor,
|
|
required this.designArea,
|
|
required this.productsIncludedInTheDesign,
|
|
required this.projectProgress,
|
|
this.expectedCommencementDate,
|
|
this.description,
|
|
this.requestDate,
|
|
});
|
|
|
|
/// Convert to JSON for API request
|
|
Map<String, dynamic> toJson() {
|
|
final dateFormat = DateFormat('yyyy-MM-dd');
|
|
final dateTimeFormat = DateFormat('yyyy-MM-dd HH:mm:ss');
|
|
|
|
return {
|
|
if (name != null) 'name': name,
|
|
'designed_area': designedArea,
|
|
'address_of_project': addressOfProject,
|
|
'project_owner': projectOwner,
|
|
if (designFirm != null) 'design_firm': designFirm,
|
|
if (contractionContractor != null)
|
|
'contruction_contractor': contractionContractor,
|
|
'design_area': designArea,
|
|
'products_included_in_the_design': productsIncludedInTheDesign,
|
|
'project_progress': projectProgress,
|
|
if (expectedCommencementDate != null)
|
|
'expected_commencement_date': dateFormat.format(expectedCommencementDate!),
|
|
if (description != null) 'description': description,
|
|
'request_date': dateTimeFormat.format(requestDate ?? DateTime.now()),
|
|
};
|
|
}
|
|
|
|
/// Create a copy with updated fields
|
|
ProjectSubmissionRequest copyWith({
|
|
String? name,
|
|
String? designedArea,
|
|
String? addressOfProject,
|
|
String? projectOwner,
|
|
String? designFirm,
|
|
String? contractionContractor,
|
|
double? designArea,
|
|
String? productsIncludedInTheDesign,
|
|
String? projectProgress,
|
|
DateTime? expectedCommencementDate,
|
|
String? description,
|
|
DateTime? requestDate,
|
|
}) {
|
|
return ProjectSubmissionRequest(
|
|
name: name ?? this.name,
|
|
designedArea: designedArea ?? this.designedArea,
|
|
addressOfProject: addressOfProject ?? this.addressOfProject,
|
|
projectOwner: projectOwner ?? this.projectOwner,
|
|
designFirm: designFirm ?? this.designFirm,
|
|
contractionContractor: contractionContractor ?? this.contractionContractor,
|
|
designArea: designArea ?? this.designArea,
|
|
productsIncludedInTheDesign:
|
|
productsIncludedInTheDesign ?? this.productsIncludedInTheDesign,
|
|
projectProgress: projectProgress ?? this.projectProgress,
|
|
expectedCommencementDate:
|
|
expectedCommencementDate ?? this.expectedCommencementDate,
|
|
description: description ?? this.description,
|
|
requestDate: requestDate ?? this.requestDate,
|
|
);
|
|
}
|
|
}
|