package com.ecep.contract.vm; import java.io.File; import java.time.LocalDateTime; import java.util.Objects; import java.util.function.Consumer; import java.util.function.Supplier; import org.springframework.util.StringUtils; import com.ecep.contract.model.CompanyCustomerEvaluationFormFile; import com.ecep.contract.model.Employee; import com.ecep.contract.model.Project; import com.ecep.contract.model.ProjectBid; import com.ecep.contract.model.ProjectCost; import com.ecep.contract.util.NumberUtils; import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleDoubleProperty; import javafx.beans.property.SimpleIntegerProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; import lombok.Data; import lombok.EqualsAndHashCode; /** * 项目报价 */ @Data @EqualsAndHashCode(callSuper = false) public class ProjectBidViewModel extends IdentityViewModel implements ProjectBasedViewModel { /** * 关联的项目 */ private SimpleObjectProperty project = new SimpleObjectProperty<>(); /** * 客户咨询等级(级别) */ private SimpleIntegerProperty level = new SimpleIntegerProperty(); /** * 报价金额 */ private SimpleDoubleProperty amount = new SimpleDoubleProperty(); /** * 客户咨询评估文件,根据资信资评估文件生成客户资信等级(级别) */ private SimpleObjectProperty evaluationFile = new SimpleObjectProperty<>(); /** * 项目成本表 */ private SimpleObjectProperty cost = new SimpleObjectProperty<>(); /** * 是否标准付款方式 */ private SimpleBooleanProperty standardPayWay = new SimpleBooleanProperty(); /** * 非标准付款方式文本 */ private SimpleStringProperty noStandardPayWayText = new SimpleStringProperty(); /** * 是否标准合同文本 */ private SimpleBooleanProperty standardContractText = new SimpleBooleanProperty(); /** * 非标准合同文本 */ private SimpleStringProperty noStandardContractText = new SimpleStringProperty(); /** * 申请日期 */ private SimpleObjectProperty applyTime = new SimpleObjectProperty<>(); /** * 申请人 */ private SimpleObjectProperty applicant = new SimpleObjectProperty<>(); /** * 审核时间 */ private SimpleObjectProperty authorizationTime = new SimpleObjectProperty<>(); /** * 审核人 */ private SimpleObjectProperty authorizer = new SimpleObjectProperty<>(); /** * 审核文件 */ private SimpleObjectProperty authorizationFile = new SimpleObjectProperty<>(); /** * 中标通知书文件 */ private SimpleObjectProperty bidAcceptanceLetterFile = new SimpleObjectProperty<>(); /** * 说明、注释 */ private SimpleStringProperty description = new SimpleStringProperty(); public static ProjectBidViewModel from(ProjectBid v) { ProjectBidViewModel model = new ProjectBidViewModel(); model.update(v); return model; } @Override protected void updateFrom(ProjectBid v) { super.updateFrom(v); getProject().set(v.getProject()); getLevel().set(v.getLevel()); getAmount().set(v.getAmount()); getEvaluationFile().set(v.getEvaluationFile()); getCost().set(v.getCost()); getStandardPayWay().set(v.isStandardPayWay()); getNoStandardPayWayText().set(v.getNoStandardPayWayText()); getStandardContractText().set(v.isStandardContractText()); getNoStandardContractText().set(v.getNoStandardContractText()); getApplicant().set(v.getApplicant()); getApplyTime().set(v.getApplyTime()); getAuthorizer().set(v.getAuthorizer()); getAuthorizationTime().set(v.getAuthorizationTime()); if (StringUtils.hasText(v.getAuthorizationFile())) { File file = new File(v.getAuthorizationFile()); getAuthorizationFile().set(file); } else { getAuthorizationFile().set(null); } if (StringUtils.hasText(v.getBidAcceptanceLetterFile())) { File file = new File(v.getBidAcceptanceLetterFile()); getBidAcceptanceLetterFile().set(file); } else { getBidAcceptanceLetterFile().set(null); } getDescription().set(v.getDescription()); } @Override public boolean copyTo(ProjectBid v) { boolean modified = super.copyTo(v); if (!Objects.equals(getProject().get(), v.getProject())) { v.setProject(getProject().get()); modified = true; } if (!Objects.equals(getLevel().get(), v.getLevel())) { v.setLevel(getLevel().get()); modified = true; } if (!NumberUtils.equals(getAmount().get(), v.getAmount())) { v.setAmount(getAmount().get()); modified = true; } if (!Objects.equals(getEvaluationFile().get(), v.getEvaluationFile())) { v.setEvaluationFile(getEvaluationFile().get()); modified = true; } if (!Objects.equals(getCost().get(), v.getCost())) { v.setCost(getCost().get()); modified = true; } if (!Objects.equals(getStandardPayWay().get(), v.isStandardPayWay())) { v.setStandardPayWay(getStandardPayWay().get()); modified = true; } if (!Objects.equals(getNoStandardPayWayText().get(), v.getNoStandardPayWayText())) { v.setNoStandardPayWayText(getNoStandardPayWayText().get()); modified = true; } if (!Objects.equals(getStandardContractText().get(), v.isStandardContractText())) { v.setStandardContractText(getStandardContractText().get()); modified = true; } if (!Objects.equals(getNoStandardContractText().get(), v.getNoStandardContractText())) { v.setNoStandardContractText(getNoStandardContractText().get()); modified = true; } if (!Objects.equals(getApplicant().get(), v.getApplicant())) { v.setApplicant(getApplicant().get()); modified = true; } if (!Objects.equals(getApplyTime().get(), v.getApplyTime())) { v.setApplyTime(getApplyTime().get()); modified = true; } if (!Objects.equals(getAuthorizer().get(), v.getAuthorizer())) { v.setAuthorizer(getAuthorizer().get()); modified = true; } if (!Objects.equals(getAuthorizationTime().get(), v.getAuthorizationTime())) { v.setAuthorizationTime(getAuthorizationTime().get()); modified = true; } if (updateFile(authorizationFile, v::getAuthorizationFile, v::setAuthorizationFile)) { modified = true; } if (updateFile(bidAcceptanceLetterFile, v::getBidAcceptanceLetterFile, v::setBidAcceptanceLetterFile)) { modified = true; } if (!Objects.equals(getDescription().get(), v.getDescription())) { v.setDescription(getDescription().get()); modified = true; } return modified; } private boolean updateFile(SimpleObjectProperty property, Supplier getter, Consumer setter) { File file = null; String path = getter.get(); if (StringUtils.hasText(path)) { file = new File(path); } if (!Objects.equals(property.get(), file)) { setter.accept(property.get() == null ? null : property.get().getAbsolutePath()); return true; } return false; } }