/// 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 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, ); } }