Просмотр исходного кода

其他台账,分期计量,删除模式调整

MaiXinRong 8 лет назад
Родитель
Сommit
361c4eb6cc

+ 13 - 1
DataModules/OtherMeasurePhaseDm.dfm

@@ -59,7 +59,17 @@ object OtherMeasurePhaseData: TOtherMeasurePhaseData
       6D65060D416464546F74616C5072696365094669656C644E616D65060D416464
       546F74616C50726963650844617461547970650206084461746153697A650208
       0549734B6579080F4E65656450726F636573734E616D65090950726563697369
-      6F6E02000453697A6502000000}
+      6F6E02000453697A6502000001044E616D65060744656C65746564094669656C
+      644E616D65060744656C65746564084461746154797065020508446174615369
+      7A6502010549734B6579080F4E65656450726F636573734E616D650909507265
+      636973696F6E02000453697A6502000001044E616D65060D44656C6574655068
+      6173654944094669656C644E616D65060D44656C657465506861736549440844
+      617461547970650203084461746153697A6502040549734B6579080F4E656564
+      50726F636573734E616D650909507265636973696F6E02000453697A65020000
+      01044E616D65060D44656C65746553746167654944094669656C644E616D6506
+      0D44656C65746553746167654944084461746154797065020308446174615369
+      7A6502040549734B6579080F4E65656450726F636573734E616D650909507265
+      636973696F6E02000453697A6502000000}
   end
   object sdvPhase: TsdDataView
     Active = False
@@ -97,6 +107,8 @@ object OtherMeasurePhaseData: TOtherMeasurePhaseData
         FieldName = 'AddTotalPrice'
       end>
     BeforeAddRecord = sdvPhaseBeforeAddRecord
+    BeforeDeleteRecord = sdvPhaseBeforeDeleteRecord
+    OnFilterRecord = sdvPhaseFilterRecord
     OnSetText = sdvPhaseSetText
     Left = 56
     Top = 160

+ 44 - 1
DataModules/OtherMeasurePhaseDm.pas

@@ -17,8 +17,13 @@ type
     procedure sddPhaseAfterValueChanged(AValue: TsdValue);
     procedure sdvPhaseSetText(var Text: String; ARecord: TsdDataRecord;
       AValue: TsdValue; AColumn: TsdViewColumn; var Allow: Boolean);
+    procedure sdvPhaseBeforeDeleteRecord(ARecord: TsdDataRecord;
+      var Allow: Boolean);
+    procedure sdvPhaseFilterRecord(ARecord: TsdDataRecord;
+      var Allow: Boolean);
   private
     FProjectData: TObject;
+    FFilterDeletedRec: Boolean;
 
     function GetNewID: Integer;
     function GetNewSerialNo: Integer;
@@ -27,6 +32,7 @@ type
 
     procedure BeforeBatchOperation;
     procedure AfterBatchOperation;
+    procedure SetFilterDeletedRec(const Value: Boolean);
   public
     constructor Create(AProjectData: TObject);
     destructor Destroy; override;
@@ -35,6 +41,8 @@ type
     procedure Save;
 
     procedure LoadCurStageData;
+
+    property FilterDeletedRec: Boolean read FFilterDeletedRec write SetFilterDeletedRec;
   end;
 
 implementation
@@ -64,6 +72,7 @@ constructor TOtherMeasurePhaseData.Create(AProjectData: TObject);
 begin
   inherited Create(nil);
   FProjectData := AProjectData;
+  FFilterDeletedRec := True;
 end;
 
 destructor TOtherMeasurePhaseData.Destroy;
@@ -146,6 +155,7 @@ begin
     sddPhase.AddIndex('idxSerial', 'SerialNo');
   sdvPhase.Open;
   sdvPhase.IndexName := 'idxSerial';
+  sdvPhase.Filtered := True;
 
   LoadCurStageData;
 end;
@@ -171,7 +181,7 @@ begin
   if TProjectData(FProjectData).StageDataReadOnly then Exit;
 
   // 被删除的数据,也不应保留明细
-  ExecuteSql(sdpPhase.Connection, sClearSql);
+  //ExecuteSql(sdpPhase.Connection, sClearSql);
 
   iPhase := TProjectData(FProjectData).PhaseIndex;
   iStage := TProjectData(FProjectData).StageIndex;
@@ -257,4 +267,37 @@ begin
   end;
 end;
 
+procedure TOtherMeasurePhaseData.sdvPhaseBeforeDeleteRecord(
+  ARecord: TsdDataRecord; var Allow: Boolean);
+
+  function CanDelete(ARec: TsdDataRecord): Boolean;
+  begin
+    Result := (ARec.ValueByName('CreatePhaseID').AsInteger = TProjectData(FProjectData).PhaseIndex) and
+        (ARec.ValueByName('CreateStageID').AsInteger = TProjectData(FProjectData).StageIndex);
+  end;
+
+begin
+  Allow := CanDelete(ARecord);
+  if not Allow then
+  begin
+    ARecord.ValueByName('Deleted').AsBoolean := True;
+    ARecord.ValueByName('DeletePhaseID').AsInteger := TProjectData(FProjectData).PhaseIndex;
+    ARecord.ValueByName('DeleteStageID').AsInteger := TProjectData(FProjectData).StageIndex;
+    sdvPhase.RefreshFilter;
+  end;
+end;
+
+procedure TOtherMeasurePhaseData.sdvPhaseFilterRecord(
+  ARecord: TsdDataRecord; var Allow: Boolean);
+begin
+  if Assigned(ARecord) then
+    Allow := not ARecord.ValueByName('Deleted').AsBoolean; 
+end;
+
+procedure TOtherMeasurePhaseData.SetFilterDeletedRec(const Value: Boolean);
+begin
+  FFilterDeletedRec := Value;
+  sdvPhase.Filtered := FFilterDeletedRec;
+end;
+
 end.

+ 2 - 0
Frames/OtherMeasureFme.dfm

@@ -85,6 +85,8 @@ object OtherMeasureFrame: TOtherMeasureFrame
           Selection.TransparentColor = False
           FrozenCol = 0
           FrozenRow = 0
+          OnCellGetColor = zgPhaseCellGetColor
+          OnKeyDown = zgPhaseKeyDown
           Align = alClient
         end
       end

+ 30 - 0
Frames/OtherMeasureFme.pas

@@ -23,6 +23,10 @@ type
     saOnce: TsdGridDBA;
     saPhase: TsdGridDBA;
     procedure tobtnPhaseClick(Sender: TObject);
+    procedure zgPhaseKeyDown(Sender: TObject; var Key: Word;
+      Shift: TShiftState);
+    procedure zgPhaseCellGetColor(Sender: TObject; ACoord: TPoint;
+      var AColor: TColor);
   private
     FProjectData: TProjectData;
     { Private declarations }
@@ -35,6 +39,9 @@ type
 
 implementation
 
+uses
+  OtherMeasurePhaseDm, sdDB;
+
 {$R *.dfm}
 
 constructor TOtherMeasureFrame.Create(AProjectData: TProjectData);
@@ -66,4 +73,27 @@ begin
   tobtnOnce.Down := tobtnOnce.Tag = TToolButton(Sender).Tag;
 end;
 
+procedure TOtherMeasureFrame.zgPhaseKeyDown(Sender: TObject; var Key: Word;
+  Shift: TShiftState);
+begin
+  if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
+      and (Key in [68, 100]) then // 'd', 'D'
+  begin
+    with FProjectData.OtherMeasurePhaseData do
+      FilterDeletedRec := not FilterDeletedRec;
+  end;
+end;
+
+procedure TOtherMeasureFrame.zgPhaseCellGetColor(Sender: TObject;
+  ACoord: TPoint; var AColor: TColor);
+var
+  Rec: TsdDataRecord;
+begin
+  Rec := saPhase.DataView.Records[ACoord.Y-1];
+  if Assigned(Rec) and Rec.ValueByName('Deleted').AsBoolean then
+    AColor := $00D5D5D5
+  else
+    AColor := clWindow;
+end;
+
 end.

+ 10 - 0
Units/CalcData.pas

@@ -79,6 +79,7 @@ type
     FCurMeasure: TMeasureCalc;
     FPreMeasure: TMeasureCalc;
     FEndMeasure: TMeasureCalc;
+    FZoneMeasure: TMeasureCalc;
 
     FDgnQuantity1: Double;
     FDgnQuantity2: Double;
@@ -103,6 +104,7 @@ type
     property CurMeasure: TMeasureCalc read FCurMeasure;
     property PreMeasure: TMeasureCalc read FPreMeasure;
     property EndMeasure: TMeasureCalc read FEndMeasure;
+    property ZoneMeasure: TMeasureCalc read FZoneMeasure;
 
     property DgnQuantity1: Double read FDgnQuantity1 write FDgnQuantity1;
     property DgnQuantity2: Double read FDgnQuantity2 write FDgnQuantity2;
@@ -265,6 +267,7 @@ begin
   CurMeasure.AddCalcData(AProjCalc.CurMeasure);
   PreMeasure.AddCalcData(AProjCalc.PreMeasure);
   EndMeasure.AddCalcData(AProjCalc.EndMeasure);
+  ZoneMeasure.AddCalcData(AProjCalc.ZoneMeasure);
 end;
 
 procedure TProjCalc.CalcTotalPrice_Rc(APrice: Double);
@@ -274,6 +277,7 @@ begin
   CurMeasure.CalcTotalPrice_Rc(APrice);
   PreMeasure.CalcTotalPrice_Rc(APrice);
   EndMeasure.CalcTotalPrice_Rc(APrice);
+  ZoneMeasure.CalcTotalPrice_Rc(APrice);
 end;
 
 constructor TProjCalc.Create;
@@ -283,6 +287,7 @@ begin
   FCurMeasure := TMeasureCalc.Create;
   FPreMeasure := TMeasureCalc.Create;
   FEndMeasure := TMeasureCalc.Create;
+  FZoneMeasure := TMeasureCalc.Create;
 
   FDgnQuantity1 := 0;
   FDgnQuantity2 := 0;
@@ -299,6 +304,7 @@ begin
   FCurMeasure.Free;
   FPreMeasure.Free;
   FEndMeasure.Free;
+  FZoneMeasure.Free;
   inherited;
 end;
 
@@ -309,6 +315,7 @@ begin
   CurMeasure.InitCalcData;
   PreMeasure.InitCalcData;
   EndMeasure.InitCalcData;
+  ZoneMeasure.InitCalcData;
 end;
 
 procedure TProjCalc.InitTotalPrice_Rc;
@@ -318,6 +325,7 @@ begin
   CurMeasure.InitTotalPrice_Rc;
   PreMeasure.InitTotalPrice_Rc;
   EndMeasure.InitTotalPrice_Rc;
+  ZoneMeasure.InitTotalPrice_Rc;
 end;
 
 procedure TProjCalc.MinusCalcData(AProjCalc: TProjCalc);
@@ -327,6 +335,7 @@ begin
   CurMeasure.MinusCalcData(AProjCalc.CurMeasure);
   PreMeasure.MinusCalcData(AProjCalc.PreMeasure);
   EndMeasure.MinusCalcData(AProjCalc.EndMeasure);
+  ZoneMeasure.MinusCalcData(AProjCalc.ZoneMeasure);
 end;
 
 procedure TProjCalc.UpdateTotalPrice_Rc(AProjCalc: TProjCalc);
@@ -336,6 +345,7 @@ begin
   CurMeasure.UpdateTotalPrice_Rc(AProjCalc.CurMeasure);
   PreMeasure.UpdateTotalPrice_Rc(AProjCalc.PreMeasure);
   EndMeasure.UpdateTotalPrice_Rc(AProjCalc.EndMeasure);
+  ZoneMeasure.UpdateTotalPrice_Rc(AProjCalc.ZoneMeasure);
 end;
 
 { TCalcData }

+ 1 - 1
Units/Connections.pas

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

+ 8 - 2
Units/DataBaseTables.pas

@@ -717,7 +717,7 @@ const
 
   {其他台账 -- 分期计量}
   SOtherMeasurePhase = 'OtherMeasurePhase';
-  tdOtherMeasurePhase: array [0..12] of TScFieldDef =(
+  tdOtherMeasurePhase: array [0..15] of TScFieldDef =(
     (FieldName: 'ID'; FieldType: ftInteger; Size: 0; Precision: 0; NotNull: True; PrimaryKey: True; ForceUpdate: False),
     // 排序
     (FieldName: 'SerialNo'; FieldType: ftInteger; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False),
@@ -743,7 +743,13 @@ const
     // 截止本期计量
     (FieldName: 'EndTotalPrice'; FieldType: ftDouble; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False),
     // 累计计量
-    (FieldName: 'AddTotalPrice'; FieldType: ftDouble; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False)
+    (FieldName: 'AddTotalPrice'; FieldType: ftDouble; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False),
+    // 是否删除
+    (FieldName: 'Deleted'; FieldType: ftBoolean; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False),
+    // 删除期数
+    (FieldName: 'DeletePhaseID'; FieldType: ftInteger; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False),
+    // 删除审核人
+    (FieldName: 'DeleteStageID'; FieldType: ftInteger; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False)
   );
 
   SOMPhaseDetail = 'OMPhaseDetail';