Browse Source

Task #1209 合同支付,新增“停用/启用”功能

MaiXinRong 9 years ago
parent
commit
f56f3d43f2

+ 12 - 9
DataModules/PhasePayDm.dfm

@@ -173,11 +173,11 @@ object PhasePayData: TPhasePayData
       636573734E616D65090001044E616D650609466F726D756C613133094669656C
       636573734E616D65090001044E616D650609466F726D756C613133094669656C
       644E616D650609466F726D756C61313308446174615479706502180844617461
       644E616D650609466F726D756C61313308446174615479706502180844617461
       53697A6503FF000549734B6579080F4E65656450726F636573734E616D650900
       53697A6503FF000549734B6579080F4E65656450726F636573734E616D650900
-      01044E616D65060F456E64546F74616C50726963653133094669656C644E616D
-      65060F456E64546F74616C507269636531330844617461547970650206084461
+      01044E616D65060F507265546F74616C50726963653133094669656C644E616D
+      65060F507265546F74616C507269636531330844617461547970650206084461
       746153697A6502080549734B6579080F4E65656450726F636573734E616D6509
       746153697A6502080549734B6579080F4E65656450726F636573734E616D6509
-      0001044E616D65060F456E64546F74616C50726963653134094669656C644E61
-      6D65060F456E64546F74616C5072696365313408446174615479706502060844
+      0001044E616D65060F456E64546F74616C50726963653133094669656C644E61
+      6D65060F456E64546F74616C5072696365313308446174615479706502060844
       61746153697A6502080549734B6579080F4E65656450726F636573734E616D65
       61746153697A6502080549734B6579080F4E65656450726F636573734E616D65
       090001044E616D65060C546F74616C50726963653134094669656C644E616D65
       090001044E616D65060C546F74616C50726963653134094669656C644E616D65
       060C546F74616C50726963653134084461746154797065020608446174615369
       060C546F74616C50726963653134084461746154797065020608446174615369
@@ -185,11 +185,14 @@ object PhasePayData: TPhasePayData
       616D650609466F726D756C613134094669656C644E616D650609466F726D756C
       616D650609466F726D756C613134094669656C644E616D650609466F726D756C
       6131340844617461547970650218084461746153697A6503FF000549734B6579
       6131340844617461547970650218084461746153697A6503FF000549734B6579
       080F4E65656450726F636573734E616D65090001044E616D65060F507265546F
       080F4E65656450726F636573734E616D65090001044E616D65060F507265546F
-      74616C50726963653133094669656C644E616D65060F507265546F74616C5072
-      69636531330844617461547970650206084461746153697A6502080549734B65
-      79080F4E65656450726F636573734E616D65090001044E616D65060F50726554
-      6F74616C50726963653134094669656C644E616D65060F507265546F74616C50
+      74616C50726963653134094669656C644E616D65060F507265546F74616C5072
+      69636531340844617461547970650206084461746153697A6502080549734B65
+      79080F4E65656450726F636573734E616D65090001044E616D65060F456E6454
+      6F74616C50726963653134094669656C644E616D65060F456E64546F74616C50
       7269636531340844617461547970650206084461746153697A6502080549734B
       7269636531340844617461547970650206084461746153697A6502080549734B
-      6579080F4E65656450726F636573734E616D65090000}
+      6579080F4E65656450726F636573734E616D65090001044E616D65060853746F
+      7043616C63094669656C644E616D65060853746F7043616C6308446174615479
+      70650205084461746153697A6502010549734B6579080F4E65656450726F6365
+      73734E616D65090000}
   end
   end
 end
 end

+ 23 - 18
DataModules/PhasePayDm.pas

@@ -187,28 +187,33 @@ begin
   sFField := 'Formula' + IntToStr(TPhaseData(FPhaseData).StageIndex);
   sFField := 'Formula' + IntToStr(TPhaseData(FPhaseData).StageIndex);
   sPreField := 'PreTotalPrice' + IntToStr(TPhaseData(FPhaseData).StageIndex);
   sPreField := 'PreTotalPrice' + IntToStr(TPhaseData(FPhaseData).StageIndex);
 
 
-  iID := Rec.ValueByName('ID').AsInteger;
-  with TProjectData(TPhaseData(FPhaseData).ProjectData).DealPaymentData do
+  if not Rec.ValueByName('StopCalc').AsBoolean then
   begin
   begin
-    // 获取起扣金额
-    fStartedPrice :=  GetStartedPrice(iID);
-
-    if Rec.ValueByName(sFField).AsString <> '' then
+    iID := Rec.ValueByName('ID').AsInteger;
+    with TProjectData(TPhaseData(FPhaseData).ProjectData).DealPaymentData do
     begin
     begin
-      // 初次达到起扣金额时,bqwc基数值取值为累计完成计量-起扣金额
-      if Rec.ValueByName('Pre'+sTPField).AsFloat = 0 then
-        fTotalPrice := FPayFormula.Calculate(Rec.ValueByName(sFField).AsString, fStartedPrice)
+      // 获取起扣金额
+      fStartedPrice :=  GetStartedPrice(iID);
+
+      if Rec.ValueByName(sFField).AsString <> '' then
+      begin
+        // 初次达到起扣金额时,bqwc基数值取值为累计完成计量-起扣金额
+        if Rec.ValueByName('Pre'+sTPField).AsFloat = 0 then
+          fTotalPrice := FPayFormula.Calculate(Rec.ValueByName(sFField).AsString, fStartedPrice)
+        else
+          fTotalPrice := FPayFormula.Calculate(Rec.ValueByName(sFField).AsString);
+      end
       else
       else
-        fTotalPrice := FPayFormula.Calculate(Rec.ValueByName(sFField).AsString);
-    end
-    else
-      fTotalPrice := 0;
+        fTotalPrice := 0;
 
 
-    if CheckStartedPrice(iID) then
-      Rec.ValueByName(sTPField).AsFloat := GetAllowTotalPrice(iID, fTotalPrice, Rec.ValueByName(sPreField).AsFloat)
-    else
-      Rec.ValueByName(sTPField).AsFloat := 0;
-  end;
+      if CheckStartedPrice(iID) then
+        Rec.ValueByName(sTPField).AsFloat := GetAllowTotalPrice(iID, fTotalPrice, Rec.ValueByName(sPreField).AsFloat)
+      else
+        Rec.ValueByName(sTPField).AsFloat := 0;
+    end;
+  end
+  else
+    Rec.ValueByName(sTPField).AsFloat := 0;
 
 
   {if Rec.ValueByName(sFField).AsString <> '' then
   {if Rec.ValueByName(sFField).AsString <> '' then
   begin
   begin

+ 6 - 0
Forms/MainFrm.dfm

@@ -1059,6 +1059,12 @@ object MainForm: TMainForm
       Action = actnImportDmf
       Action = actnImportDmf
       Category = 0
       Category = 0
     end
     end
+    object dxbtnCanCalc: TdxBarButton
+      Caption = #20572#29992'/'#21551#29992
+      Category = 0
+      Hint = #20572#29992'/'#21551#29992
+      Visible = ivAlways
+    end
   end
   end
   object Images: TImageList
   object Images: TImageList
     DrawingStyle = dsTransparent
     DrawingStyle = dsTransparent

+ 1 - 0
Forms/MainFrm.pas

@@ -158,6 +158,7 @@ type
     dxbtnCancelHidden: TdxBarButton;
     dxbtnCancelHidden: TdxBarButton;
     dxbtnImportDmf: TdxBarButton;
     dxbtnImportDmf: TdxBarButton;
     actnImportDmf: TAction;
     actnImportDmf: TAction;
+    dxbtnCanCalc: TdxBarButton;
     procedure FormCreate(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
     procedure jtsProjectsChange(Sender: TObject; NewTab: Integer;
     procedure jtsProjectsChange(Sender: TObject; NewTab: Integer;

+ 10 - 0
Frames/DealPaymentFme.dfm

@@ -310,6 +310,11 @@ object DealPaymentFrame: TDealPaymentFrame
       item
       item
         Item = MainForm.dxbtnSetDealPayPlan
         Item = MainForm.dxbtnSetDealPayPlan
         Visible = True
         Visible = True
+      end
+      item
+        BeginGroup = True
+        Item = MainForm.dxbtnCanCalc
+        Visible = True
       end>
       end>
     UseOwnFont = False
     UseOwnFont = False
     OnPopup = dxpmDealPaymentPopup
     OnPopup = dxpmDealPaymentPopup
@@ -332,5 +337,10 @@ object DealPaymentFrame: TDealPaymentFrame
       OnExecute = actnSetDealPayPlanExecute
       OnExecute = actnSetDealPayPlanExecute
       OnUpdate = actnSetDealPayPlanUpdate
       OnUpdate = actnSetDealPayPlanUpdate
     end
     end
+    object actnCanCalc: TAction
+      Caption = #20572#29992'/'#21551#29992
+      OnExecute = actnCanCalcExecute
+      OnUpdate = actnCanCalcUpdate
+    end
   end
   end
 end
 end

+ 53 - 2
Frames/DealPaymentFme.pas

@@ -24,6 +24,7 @@ type
     actnDealPayment: TActionList;
     actnDealPayment: TActionList;
     actnCalculatePhasePay: TAction;
     actnCalculatePhasePay: TAction;
     actnSetDealPayPlan: TAction;
     actnSetDealPayPlan: TAction;
+    actnCanCalc: TAction;
     procedure zgParameterCellCanEdit(Sender: TObject; const ACoord: TPoint;
     procedure zgParameterCellCanEdit(Sender: TObject; const ACoord: TPoint;
       var Allow: Boolean);
       var Allow: Boolean);
     procedure imgHelpClick(Sender: TObject);
     procedure imgHelpClick(Sender: TObject);
@@ -46,6 +47,8 @@ type
     procedure zgDealPaymentShowHint(var HintStr: String;
     procedure zgDealPaymentShowHint(var HintStr: String;
       var CanShow: Boolean; var HintInfo: THintInfo; const ACoord: TPoint);
       var CanShow: Boolean; var HintInfo: THintInfo; const ACoord: TPoint);
     procedure actnSetDealPayPlanUpdate(Sender: TObject);
     procedure actnSetDealPayPlanUpdate(Sender: TObject);
+    procedure actnCanCalcExecute(Sender: TObject);
+    procedure actnCanCalcUpdate(Sender: TObject);
   private
   private
     FDealPaymentData: TDealPaymentData;
     FDealPaymentData: TDealPaymentData;
 
 
@@ -69,7 +72,8 @@ type
 implementation
 implementation
 
 
 uses
 uses
-  MainFrm, UtilMethods, ProjectData, PhaseData, DealPayPlanFrm;
+  MainFrm, UtilMethods, ProjectData, PhaseData, DealPayPlanFrm, PhasePayDm,
+  Math;
 
 
 {$R *.dfm}
 {$R *.dfm}
 
 
@@ -159,6 +163,7 @@ procedure TDealPaymentFrame.dxpmDealPaymentPopup(Sender: TObject);
 begin
 begin
   SetDxBtnAction(actnCalculatePhasePay, MainForm.dxbtnCalculatePhasePay);
   SetDxBtnAction(actnCalculatePhasePay, MainForm.dxbtnCalculatePhasePay);
   SetDxBtnAction(actnSetDealPayPlan, MainForm.dxbtnSetDealPayPlan);
   SetDxBtnAction(actnSetDealPayPlan, MainForm.dxbtnSetDealPayPlan);
+  SetDxBtnAction(actnCanCalc, MainForm.dxbtnCanCalc);
 end;
 end;
 
 
 procedure TDealPaymentFrame.actnCalculatePhasePayExecute(Sender: TObject);
 procedure TDealPaymentFrame.actnCalculatePhasePayExecute(Sender: TObject);
@@ -174,7 +179,7 @@ end;
 procedure TDealPaymentFrame.zgDealPaymentCellGetColor(Sender: TObject;
 procedure TDealPaymentFrame.zgDealPaymentCellGetColor(Sender: TObject;
   ACoord: TPoint; var AColor: TColor);
   ACoord: TPoint; var AColor: TColor);
 var
 var
-  Rec: TsdDataRecord;
+  Rec, PhaseRec: TsdDataRecord;
   iCurPhase: Integer;
   iCurPhase: Integer;
 begin
 begin
   if (ACoord.Y > zgDealPayment.FixedRowCount - 1) and
   if (ACoord.Y > zgDealPayment.FixedRowCount - 1) and
@@ -196,6 +201,14 @@ begin
     // µ±ÆÚÐÂÔöÏî
     // µ±ÆÚÐÂÔöÏî
     else if Rec.ValueByName('CreatePhaseID').AsInteger = iCurPhase then
     else if Rec.ValueByName('CreatePhaseID').AsInteger = iCurPhase then
       AColor := clInfoBk;
       AColor := clInfoBk;
+
+    with TProjectData(FDealPaymentData.ProjectData) do
+      if PhaseData.Active then
+      begin
+        PhaseRec := PhaseData.PhasePayData.PayRecord(Rec.ValueByName('ID').AsInteger);
+        if Assigned(PhaseRec) and PhaseRec.ValueByName('StopCalc').AsBoolean then
+          AColor := clSilver;
+      end;
   end;
   end;
 end;
 end;
 
 
@@ -378,4 +391,42 @@ begin
   TAction(Sender).Enabled := Assigned(sdDealPayment.DataView.Current);
   TAction(Sender).Enabled := Assigned(sdDealPayment.DataView.Current);
 end;
 end;
 
 
+procedure TDealPaymentFrame.actnCanCalcExecute(Sender: TObject);
+var
+  Rec, PhaseRec: TsdDataRecord;
+begin
+  Rec := sdDealPayment.DataView.Current;
+  with TProjectData(FDealPaymentData.ProjectData).PhaseData.PhasePayData do
+    PhaseRec := PayRecord(Rec.ValueByName('ID').AsInteger);
+  PhaseRec.ValueByName('StopCalc').AsBoolean := not PhaseRec.ValueByName('StopCalc').AsBoolean;
+
+  TProjectData(FDealPaymentData.ProjectData).PhaseData.PhasePayData.CalculateAll;
+end;
+
+procedure TDealPaymentFrame.actnCanCalcUpdate(Sender: TObject);
+var
+  Rec, PhaseRec: TsdDataRecord;
+begin
+  Rec := sdDealPayment.DataView.Current;
+  if not Assigned(Rec) or Rec.ValueByName('PreDefined').AsBoolean then
+  begin
+    TAction(Sender).Visible := False;
+    Exit;
+  end; 
+  TAction(Sender).Visible := TProjectData(FDealPaymentData.ProjectData).ValidStageIsRefer;
+
+  with TProjectData(FDealPaymentData.ProjectData) do
+    if PhaseData.Active then
+      PhaseRec := PhaseData.PhasePayData.PayRecord(Rec.ValueByName('ID').AsInteger)
+    else
+      PhaseRec := nil;
+  if Assigned(PhaseRec) then
+  begin
+    if PhaseRec.ValueByName('StopCalc').AsBoolean then
+      TAction(Sender).Caption := 'ÆôÓÃ'
+    else
+      TAction(Sender).Caption := 'Í£ÓÃ';
+  end;
+end;
+
 end.
 end.

+ 1 - 1
Units/Connections.pas

@@ -8,7 +8,7 @@ uses
 const
 const
   ProductName = 'Measure';
   ProductName = 'Measure';
   EmptyFileVersion = '1.0.0.0';
   EmptyFileVersion = '1.0.0.0';
-  FileVersion = '1.0.1.2';
+  FileVersion = '1.0.1.3';
   EncryptVersion = 'Auto1.0';
   EncryptVersion = 'Auto1.0';
   SAdoConnectStr = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;' +
   SAdoConnectStr = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;' +
                    'User ID=Admin;Password='''';Persist Security Info=True';
                    'User ID=Admin;Password='''';Persist Security Info=True';

+ 4 - 2
Units/DataBaseTables.pas

@@ -690,7 +690,7 @@ const
 
 
   // 计量期合同支付
   // 计量期合同支付
   SPhasePay = 'PhasePay';
   SPhasePay = 'PhasePay';
-  tdPhasePay: array [0..60] of TScFieldDef =(
+  tdPhasePay: array [0..61] of TScFieldDef =(
     // 与DealPayment一一对应
     // 与DealPayment一一对应
     (FieldName: 'ID'; FieldType: ftInteger; Size: 0; Precision: 0; NotNull: True; PrimaryKey: True; ForceUpdate: False),
     (FieldName: 'ID'; FieldType: ftInteger; Size: 0; Precision: 0; NotNull: True; PrimaryKey: True; ForceUpdate: False),
     // 本期金额 0:原报,1..14:1..14审
     // 本期金额 0:原报,1..14:1..14审
@@ -756,7 +756,9 @@ const
     (FieldName: 'TotalPrice14'; FieldType: ftDouble; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False),
     (FieldName: 'TotalPrice14'; FieldType: ftDouble; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False),
     (FieldName: 'Formula14'; FieldType: ftString; Size: 100; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False),
     (FieldName: 'Formula14'; FieldType: ftString; Size: 100; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False),
     (FieldName: 'EndTotalPrice14'; FieldType: ftDouble; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False),
     (FieldName: 'EndTotalPrice14'; FieldType: ftDouble; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False),
-    (FieldName: 'PreTotalPrice14'; FieldType: ftDouble; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False)
+    (FieldName: 'PreTotalPrice14'; FieldType: ftDouble; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False),
+    // 是否停用:0、False--否,-1、True--是
+    (FieldName: 'StopCalc'; FieldType: ftBoolean; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False)
   );
   );
 
 
   // 计量期属性表
   // 计量期属性表

+ 10 - 0
Units/ProjectData.pas

@@ -98,6 +98,7 @@ type
     function GetStageIndex: Integer;
     function GetStageIndex: Integer;
     procedure SetStageIndex(const Value: Integer);
     procedure SetStageIndex(const Value: Integer);
     function GetCanInsertNormalBills: Boolean;
     function GetCanInsertNormalBills: Boolean;
+    function GetValidStageIsRefer: Boolean;
   public
   public
     constructor Create;
     constructor Create;
     destructor Destroy; override;
     destructor Destroy; override;
@@ -214,6 +215,7 @@ type
     property BaseDataReadOnly: Boolean read GetBaseDataReadOnly;
     property BaseDataReadOnly: Boolean read GetBaseDataReadOnly;
     property StageDataReadOnly: Boolean read GetStageDataReadOnly;
     property StageDataReadOnly: Boolean read GetStageDataReadOnly;
     property PriceMarginReadOnly: Boolean read GetPriceMarginReadOnly;
     property PriceMarginReadOnly: Boolean read GetPriceMarginReadOnly;
+    property ValidStageIsRefer: Boolean read GetValidStageIsRefer;
 
 
     property CanUnlockInfo: Boolean read FCanUnlockInfo write FCanUnlockInfo;
     property CanUnlockInfo: Boolean read FCanUnlockInfo write FCanUnlockInfo;
     property CanInsertNormalBills: Boolean read GetCanInsertNormalBills;
     property CanInsertNormalBills: Boolean read GetCanInsertNormalBills;
@@ -1920,4 +1922,12 @@ begin
   ImportDbTreeTo(AFileName, Self);
   ImportDbTreeTo(AFileName, Self);
 end;
 end;
 
 
+function TProjectData.GetValidStageIsRefer: Boolean;
+begin
+  if FPhaseData.Active then
+    Result := (FPhaseIndex = FProjProperties.PhaseCount) and (FPhaseData.StageCount = 1) and (FProjProperties.AuditStatus <> -1)
+  else
+    Result := False;
+end;
+
 end.
 end.