|
@@ -0,0 +1,294 @@
|
|
|
+unit DealPayPlanFrm;
|
|
|
+
|
|
|
+interface
|
|
|
+
|
|
|
+uses
|
|
|
+ sdDB,
|
|
|
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
|
+ Dialogs, StdCtrls, ExtCtrls, ComCtrls, JimPages;
|
|
|
+
|
|
|
+type
|
|
|
+ TDealPayPlanForm = class(TForm)
|
|
|
+ lblTitle: TLabel;
|
|
|
+ lblDealPayName: TLabel;
|
|
|
+ lblTitle2: TLabel;
|
|
|
+ btnOk: TButton;
|
|
|
+ btnCancel: TButton;
|
|
|
+ lblPlanType: TLabel;
|
|
|
+ rbIsPlanPhase: TRadioButton;
|
|
|
+ rbIsPlanPrice: TRadioButton;
|
|
|
+ lblResultPre: TLabel;
|
|
|
+ lblResult: TLabel;
|
|
|
+ lblResultPost: TLabel;
|
|
|
+ gbPhase: TGroupBox;
|
|
|
+ leDeadlinePhase: TLabeledEdit;
|
|
|
+ udDeadlinePhase: TUpDown;
|
|
|
+ gbPrice: TGroupBox;
|
|
|
+ rbAddGatherTotalPrice: TRadioButton;
|
|
|
+ rbAddDealTotalPrice: TRadioButton;
|
|
|
+ rbAddQCTotalPrice: TRadioButton;
|
|
|
+ lePDFormula: TLabeledEdit;
|
|
|
+ rbIsPlanNon: TRadioButton;
|
|
|
+ lblEquar: TLabel;
|
|
|
+ lblPriceDeadline: TLabel;
|
|
|
+ procedure btnOkClick(Sender: TObject);
|
|
|
+ procedure rbIsPlanNonClick(Sender: TObject);
|
|
|
+ procedure rbAddGatherTotalPriceClick(Sender: TObject);
|
|
|
+ procedure udDeadlinePhaseClick(Sender: TObject; Button: TUDBtnType);
|
|
|
+ procedure leDeadlinePhaseKeyPress(Sender: TObject; var Key: Char);
|
|
|
+ procedure leDeadlinePhaseChange(Sender: TObject);
|
|
|
+ procedure lePDFormulaExit(Sender: TObject);
|
|
|
+ private
|
|
|
+ FDealPayRec: TsdDataRecord;
|
|
|
+ FProjectData: TObject;
|
|
|
+
|
|
|
+ FPlanType: Integer;
|
|
|
+ FPlanSubType: Integer;
|
|
|
+
|
|
|
+ //FFormulaSet: t
|
|
|
+
|
|
|
+ procedure InitForm;
|
|
|
+
|
|
|
+ procedure AssignResult;
|
|
|
+
|
|
|
+ procedure SetPlanType(const Value: Integer);
|
|
|
+ procedure SetPlanSubType(const Value: Integer);
|
|
|
+ function GetPhaseDeadline: Integer;
|
|
|
+ procedure SetPhaseDeadline(const Value: Integer);
|
|
|
+ function GetPriceDeadline: Double;
|
|
|
+ procedure SetPriceDeadline(const Value: Double);
|
|
|
+ function GetPDFormula: string;
|
|
|
+ procedure SetPDFormula(const Value: string);
|
|
|
+ function GetLimitPrice: Double;
|
|
|
+ function GetPlanSubTypeName: string;
|
|
|
+ public
|
|
|
+ constructor Create(ADealPayRec: TsdDataRecord; AProjectData: TObject);
|
|
|
+ destructor Destroy; override;
|
|
|
+
|
|
|
+ procedure SavePlanInfos;
|
|
|
+
|
|
|
+ property PlanType: Integer read FPlanType write SetPlanType;
|
|
|
+ property PlanSubType: Integer read FPlanSubType write SetPlanSubType;
|
|
|
+ property PlanSubTypeName: string read GetPlanSubTypeName;
|
|
|
+ property PhaseDeadline: Integer read GetPhaseDeadline write SetPhaseDeadline;
|
|
|
+ property PriceDeadline: Double read GetPriceDeadline write SetPriceDeadline;
|
|
|
+ property PDFormula: string read GetPDFormula write SetPDFormula;
|
|
|
+ property LimitPrice: Double read GetLimitPrice;
|
|
|
+ end;
|
|
|
+
|
|
|
+implementation
|
|
|
+
|
|
|
+uses
|
|
|
+ UtilMethods, ProjectData, BillsDm, DealPaymentDm, ZhAPI;
|
|
|
+
|
|
|
+{$R *.dfm}
|
|
|
+
|
|
|
+{ TDealPayPlanForm }
|
|
|
+
|
|
|
+constructor TDealPayPlanForm.Create(ADealPayRec: TsdDataRecord; AProjectData: TObject);
|
|
|
+begin
|
|
|
+ inherited Create(nil);
|
|
|
+ FDealPayRec := ADealPayRec;
|
|
|
+ FProjectData := AProjectData;
|
|
|
+ InitForm;
|
|
|
+end;
|
|
|
+
|
|
|
+destructor TDealPayPlanForm.Destroy;
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDealPayPlanForm.InitForm;
|
|
|
+begin
|
|
|
+ lblDealPayName.Caption := FDealPayRec.ValueByName('Name').AsString;
|
|
|
+ lblTitle2.Left := lblDealPayName.Left + lblDealPayName.Width + 6;
|
|
|
+ PlanType := FDealPayRec.ValueByName('PlanType').AsInteger;
|
|
|
+ if PlanType = 1 then
|
|
|
+ PhaseDeadline := FDealPayRec.ValueByName('PlanDeadline').AsInteger
|
|
|
+ else if PlanType = 2 then
|
|
|
+ begin
|
|
|
+ PlanSubType := FDealPayRec.ValueByName('PlanSubType').AsInteger;
|
|
|
+ PriceDeadline := FDealPayRec.ValueByName('PlanDeadline').AsFloat;
|
|
|
+ PDFormula := FDealPayRec.ValueByName('PDFormula').AsString;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDealPayPlanForm.SavePlanInfos;
|
|
|
+begin
|
|
|
+ FDealPayRec.ValueByName('PlanType').AsInteger := PlanType;
|
|
|
+ if PlanType = 0 then
|
|
|
+ begin
|
|
|
+ FDealPayRec.ValueByName('PlanSubType').AsInteger := 0;
|
|
|
+ FDealPayRec.ValueByName('PlanDeadline').AsFloat := 0;
|
|
|
+ FDealPayRec.ValueByName('PDFormula').AsString := '';
|
|
|
+ end
|
|
|
+ else if PlanType = 1 then
|
|
|
+ begin
|
|
|
+ FDealPayRec.ValueByName('PlanSubType').AsInteger := 0;
|
|
|
+ FDealPayRec.ValueByName('PlanDeadline').AsInteger := PhaseDeadline;
|
|
|
+ FDealPayRec.ValueByName('PDFormula').AsString := '';
|
|
|
+ end
|
|
|
+ else
|
|
|
+ begin
|
|
|
+ FDealPayRec.ValueByName('PlanSubType').AsInteger := PlanSubType;
|
|
|
+ FDealPayRec.ValueByName('PlanDeadline').AsFloat := PriceDeadline;
|
|
|
+ FDealPayRec.ValueByName('PDFormula').AsString := PDFormula;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDealPayPlanForm.SetPriceDeadline(const Value: Double);
|
|
|
+begin
|
|
|
+ lblPriceDeadline.Caption := FloatToStr(Value);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDealPayPlanForm.SetPlanSubType(const Value: Integer);
|
|
|
+begin
|
|
|
+ FPlanSubType := Value;
|
|
|
+ rbAddGatherTotalPrice.Checked := FPlanSubType = 0;
|
|
|
+ rbAddDealTotalPrice.Checked := FPlanSubType = 1;
|
|
|
+ rbAddQCTotalPrice.Checked := FPlanSubType = 2;
|
|
|
+ AssignResult;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDealPayPlanForm.SetPlanType(const Value: Integer);
|
|
|
+begin
|
|
|
+ FPlanType := Value;
|
|
|
+ rbIsPlanNon.Checked := FPlanType = 0;
|
|
|
+ rbIsPlanPhase.Checked := FPlanType = 1;
|
|
|
+ rbIsPlanPrice.Checked := FPlanType = 2;
|
|
|
+ gbPhase.Enabled := rbIsPlanPhase.Checked;
|
|
|
+ if gbPhase.Enabled then
|
|
|
+ gbPhase.Font.Color := clBlack
|
|
|
+ else
|
|
|
+ gbPhase.Font.Color := clGray;
|
|
|
+ gbPrice.Enabled := rbIsPlanPrice.Checked;
|
|
|
+ if gbPrice.Enabled then
|
|
|
+ gbPrice.Font.Color := clBlack
|
|
|
+ else
|
|
|
+ gbPrice.Font.Color := clGray;
|
|
|
+ AssignResult;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDealPayPlanForm.SetPhaseDeadline(const Value: Integer);
|
|
|
+begin
|
|
|
+ udDeadlinePhase.Position := Value;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDealPayPlanForm.btnOkClick(Sender: TObject);
|
|
|
+begin
|
|
|
+ if (PlanType = 2) and (PriceDeadline < LimitPrice) then
|
|
|
+ ErrorMessage(Format('当前“%s”已计量至%f,限制金额应大于该值!', [PlanSubTypeName, LimitPrice]))
|
|
|
+ else
|
|
|
+ ModalResult := mrOk;
|
|
|
+end;
|
|
|
+
|
|
|
+function TDealPayPlanForm.GetPhaseDeadline: Integer;
|
|
|
+begin
|
|
|
+ Result := udDeadlinePhase.Position;
|
|
|
+end;
|
|
|
+
|
|
|
+function TDealPayPlanForm.GetPriceDeadline: Double;
|
|
|
+begin
|
|
|
+ Result := StrToFloat(lblPriceDeadline.Caption);
|
|
|
+end;
|
|
|
+
|
|
|
+function TDealPayPlanForm.GetPDFormula: string;
|
|
|
+begin
|
|
|
+ Result := lePDFormula.Text;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDealPayPlanForm.SetPDFormula(const Value: string);
|
|
|
+begin
|
|
|
+ lePDFormula.Text := Value;
|
|
|
+end;
|
|
|
+
|
|
|
+function TDealPayPlanForm.GetLimitPrice: Double;
|
|
|
+begin
|
|
|
+ with TProjectData(FProjectData).BillsData do
|
|
|
+ begin
|
|
|
+ case PlanSubType of
|
|
|
+ 0: Result := Settlement[4];
|
|
|
+ 1: Result := Settlement[1];
|
|
|
+ 2: Result := Settlement[2] + Settlement[3];
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDealPayPlanForm.rbIsPlanNonClick(Sender: TObject);
|
|
|
+begin
|
|
|
+ if PlanType <> TRadioButton(Sender).Tag then
|
|
|
+ PlanType := TRadioButton(Sender).Tag;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDealPayPlanForm.rbAddGatherTotalPriceClick(Sender: TObject);
|
|
|
+begin
|
|
|
+ if PlanSubType <> TRadioButton(Sender).Tag then
|
|
|
+ PlanSubType := TRadioButton(Sender).Tag;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDealPayPlanForm.AssignResult;
|
|
|
+
|
|
|
+ procedure CalcPriceDeadline;
|
|
|
+ begin
|
|
|
+ if CheckStringNull(PDFormula) then
|
|
|
+ PriceDeadline := 0
|
|
|
+ else if CheckNumeric(PDFormula) then
|
|
|
+ PriceDeadline := StrToFloatDef(PDFormula, 0)
|
|
|
+ else if Pos('bqwc', PDFormula) > 0 then
|
|
|
+ begin
|
|
|
+ ErrorMessage('不可使用“本期完成计量”计算基数!');
|
|
|
+ PriceDeadline := 0;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ PriceDeadline := TProjectData(FProjectData).DealPaymentData.PayFormula.Calculate(PDFormula);
|
|
|
+ end;
|
|
|
+
|
|
|
+ function GetResult: String;
|
|
|
+ begin
|
|
|
+ case PlanType of
|
|
|
+ 0: Result := '无';
|
|
|
+ 1: Result := Format('当 计量期数 > %d 时,', [PhaseDeadline]);
|
|
|
+ 2: Result := Format('当 %s > %f 时', [PlanSubTypeName, PriceDeadline]);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+begin
|
|
|
+ if PlanType = 2 then
|
|
|
+ CalcPriceDeadline;
|
|
|
+ lblResult.Caption := GetResult;
|
|
|
+ lblResultPost.Visible := PlanType <> 0;
|
|
|
+end;
|
|
|
+
|
|
|
+function TDealPayPlanForm.GetPlanSubTypeName: string;
|
|
|
+begin
|
|
|
+ case PlanSubType of
|
|
|
+ 0: Result := '累计完成计量金额';
|
|
|
+ 1: Result := '累计合同计量金额';
|
|
|
+ 2: Result := '累计变更计量金额';
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDealPayPlanForm.udDeadlinePhaseClick(Sender: TObject;
|
|
|
+ Button: TUDBtnType);
|
|
|
+begin
|
|
|
+ AssignResult;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDealPayPlanForm.leDeadlinePhaseKeyPress(Sender: TObject;
|
|
|
+ var Key: Char);
|
|
|
+begin
|
|
|
+ if Key = #13 then
|
|
|
+ btnOk.SetFocus;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDealPayPlanForm.leDeadlinePhaseChange(Sender: TObject);
|
|
|
+begin
|
|
|
+ AssignResult;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDealPayPlanForm.lePDFormulaExit(Sender: TObject);
|
|
|
+begin
|
|
|
+ AssignResult;
|
|
|
+end;
|
|
|
+
|
|
|
+end.
|