expertcad/SRC/SCSNormBase/U_NormsComplete.pas
2025-05-12 10:07:51 +03:00

978 lines
33 KiB
ObjectPascal
Raw Permalink Blame History

unit U_NormsComplete;
interface
uses
Windows, U_LNG, Messages, SysUtils, Variants, Classes, Graphics, Controls, Contnrs, Forms,
Dialogs, U_BaseCommon, U_BaseConstants, U_Common, U_SCSComponent, U_SCSLists, Math, ExtCtrls, RzPanel, RzButton,
cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage,
cxEdit, DB, cxDBData, cxGridLevel, cxClasses, cxControls,
cxGridCustomView, cxGridCustomTableView, cxGridTableView,
cxGridDBTableView, cxGrid, kbmMemTable, StdCtrls, Mask, RzEdit,
cxCurrencyEdit, cxCheckBox, cxColorComboBox, cxSpinEdit, cxDropDownEdit,
cxDBLookupComboBox, cxTextEdit, ActnList, ActnMan, Menus, ComCtrls,
ToolWin, XPMenu, siComp, siLngLnk, cxMemo, cxImageComboBox, Buttons,
cxCalendar, cxLookAndFeels, cxLookAndFeelPainters, cxNavigator,
PlatformDefaultStyleActnCtrls;
//const
//Colmn Indexes
//ciTransToUOM = 10;
type
TF_NormsComplete = class(TForm)
RzGroupBox1: TRzGroupBox;
gbOkCancel: TRzGroupBox;
btOK: TRzBitBtn;
btCancel: TRzBitBtn;
RzPanel1: TRzPanel;
GT_Norms: TcxGridDBTableView;
GL_Norms: TcxGridLevel;
gridNorms: TcxGrid;
mtNorms: TkbmMemTable;
dsrcNorms: TDataSource;
lbTotalCost: TLabel;
neTotalCost: TRzNumericEdit;
GT_NormsName: TcxGridDBColumn;
GT_NormsIzm: TcxGridDBColumn;
GT_NormsKolvo: TcxGridDBColumn;
GT_NormsPrice: TcxGridDBColumn;
GT_NormsCost: TcxGridDBColumn;
Timer_DefineTotals: TTimer;
Timer_Post: TTimer;
ActionManager: TActionManager;
PopupMenu: TPopupMenu;
N2: TMenuItem;
XPMenu1: TXPMenu;
GT_NormsNpp: TcxGridDBColumn;
btApply: TRzBitBtn;
lng_Forms: TsiLangLinked;
GT_NormsTransformToUOM: TcxGridDBColumn;
GT_NormsGUIDNBCompon: TcxGridDBColumn;
GT_NormsIcon: TcxGridDBColumn;
GT_NormsLaborTime: TcxGridDBColumn;
GT_NormsPricePerTime: TcxGridDBColumn;
GT_NormsWorkersAmount: TcxGridDBColumn;
GT_NormsStartDate: TcxGridDBColumn;
GT_NormsEndDate: TcxGridDBColumn;
GT_NormsTotalLaborTime: TcxGridDBColumn;
GT_NormsTotalCost: TcxGridDBColumn;
GT_NormsCompletePct: TcxGridDBColumn;
GT_NormsDone: TcxGridDBColumn;
GT_NormsID: TcxGridDBColumn;
Label1: TLabel;
Label2: TLabel;
edTotalTime: TRzEdit;
edRemainingTime: TRzEdit;
procedure gbOkCancelResize(Sender: TObject);
procedure mtNormsBeforeEdit(DataSet: TDataSet);
procedure mtNormsAfterEdit(DataSet: TDataSet);
procedure FormCreate(Sender: TObject);
procedure GT_ResourcesCostPropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
procedure neTotalCostChange(Sender: TObject);
procedure GT_NormsEditing(Sender: TcxCustomGridTableView;
AItem: TcxCustomGridTableItem; var AAllow: Boolean);
procedure GT_NormsEditValueChanged(Sender: TcxCustomGridTableView;
AItem: TcxCustomGridTableItem);
procedure Timer_DefineTotalsTimer(Sender: TObject);
procedure Timer_PostTimer(Sender: TObject);
procedure GT_NormsNppGetDisplayText(Sender: TcxCustomGridTableItem;
ARecord: TcxCustomGridRecord; var AText: String);
procedure GT_NormsIzmGetDisplayText(Sender: TcxCustomGridTableItem;
ARecord: TcxCustomGridRecord; var AText: String);
procedure GT_NormsPriceGetDisplayText(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AText: String);
procedure GT_NormsInitEdit(Sender: TcxCustomGridTableView;
AItem: TcxCustomGridTableItem; AEdit: TcxCustomEdit);
procedure GT_NormsKolvoGetDisplayText(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AText: String);
procedure GT_NormsFocusedRecordChanged(
Sender: TcxCustomGridTableView; APrevFocusedRecord,
AFocusedRecord: TcxCustomGridRecord;
ANewItemRecordFocusingChanged: Boolean);
procedure GT_NormsCustomDrawCell(Sender: TcxCustomGridTableView;
ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo;
var ADone: Boolean);
procedure Act_LoadPricesFromNBExecute(Sender: TObject);
procedure neTotalCostKeyPress(Sender: TObject; var Key: Char);
procedure neTotalCostExit(Sender: TObject);
procedure GT_NormsLaborTimeGetDisplayText(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AText: String);
procedure GT_NormsLaborTimePropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
procedure GT_NormsPricePerTimePropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
procedure GT_NormsKolvoPropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
procedure GT_NormsWorkersAmountPropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
procedure GT_NormsStartDatePropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
procedure GT_NormsTotalLaborTimeGetDisplayText(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AText: String);
procedure GT_NormsTotalLaborTimeCustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
procedure GT_NormsEndDateCustomDrawCell(Sender: TcxCustomGridTableView;
ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo;
var ADone: Boolean);
procedure FormDestroy(Sender: TObject);
procedure GT_NormsCompletePctPropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
private
GForm: TForm;
FCanHaveActiveComponents: Boolean;
FCanHaveDismountAccount: Boolean;
FComponsWithZeroPrice: Boolean;
FFolder: TSCSCatalog;
FLastTotalCost: Double;
FNormResources: TSCSNormsResources;
//FReportName: String;
Edit: TcxCustomEdit;
//Colmn Indexes
//FTransToUOMIdx: Integer;
FIdsChangedTotalLaborTime: TIntList;
procedure CalcEndDate;
//procedure DefineTotalCost;
procedure DefineTotals;
procedure PrepareForm;
procedure OnDrawCellAsChanged(ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo);
function OnPriceValidate(const aFieldName: String; var aDisplayValue: Variant): Double;
procedure OnTotalCostChange;
procedure SendPriceAndCostToCurrRecord(APrice, ACost: Double);
procedure SendStringToCurrRecord(AFieldName, AValue: String);
procedure SendToMT;
procedure SetActions;
public
constructor Create(AOwner: TComponent; AForm: TForm); overload;
destructor Destroy; override;
function Execute(AFolder: TSCSCatalog;
ACanHaveActiveComponents, ACanHaveDismountAccount, AComponsWithZeroPrice: Boolean): Boolean;
end;
//var
//F_NormsComplete: TF_NormsComplete;
implementation
Uses U_Main, Unit_DM_SCS, U_DMCommon;
{$R *.dfm}
{ TF_NormsComplete }
constructor TF_NormsComplete.Create(AOwner: TComponent; AForm: TForm);
begin
GForm := AForm;
inherited Create(AOwner);
end;
destructor TF_NormsComplete.Destroy;
begin
inherited;
end;
function TF_NormsComplete.Execute(AFolder: TSCSCatalog;
ACanHaveActiveComponents, ACanHaveDismountAccount, AComponsWithZeroPrice: Boolean): Boolean;
begin
Result := false;
if AFolder <> nil then
begin
FFolder := AFolder;
FCanHaveActiveComponents := ACanHaveActiveComponents;
FCanHaveDismountAccount := ACanHaveDismountAccount;
FComponsWithZeroPrice := AComponsWithZeroPrice;
//FReportName := AReportName;
FLastTotalCost := -1;
FNormResources := nil;
//mtNorms.Active := False;
//mtNorms.Active := True;
dsrcNorms.DataSet := TF_Main(GForm).GSCSBase.CurrProject.MTNormsComplete; //TF_Main(GForm).DM.tSQL_NormsComplete;
dsrcNorms.DataSet.DisableControls;
try
PrepareForm;
SendToMT;
finally
dsrcNorms.DataSet.EnableControls;
end;
dsrcNorms.DataSet.EnableControls;
try
if ShowModal = mrOk then
begin
Result := true;
end;
finally
dsrcNorms.DataSet.DisableControls;
dsrcNorms.DataSet := nil;
if FNormResources <> nil then
FreeAndNil(FNormResources);
end;
end;
end;
procedure TF_NormsComplete.gbOkCancelResize(Sender: TObject);
begin
SetMiddleControlChilds(TControl(Sender), TControl(Self));
end;
procedure TF_NormsComplete.FormCreate(Sender: TObject);
var
i: Integer;
Action: TAction;
begin
for i := 0 to ActionManager.ActionCount - 1 do
begin
Action := TAction(ActionManager.Actions[i]);
Action.Hint := Action.Caption;
end;
//mtNorms.FieldDefs.Add(fnID, ftAutoInc);
//mtNorms.FieldDefs.Add(fnGuid, ftString, 40);
//mtNorms.FieldDefs.Add(fnIsResource, ftBoolean);
//mtNorms.FieldDefs.Add(fnIsModified, ftBoolean);
//mtNorms.FieldDefs.Add(fnObjectAddress, ftInteger);
//mtNorms.FieldDefs.Add(fnTransToUOM, ftBoolean);
//mtNorms.FieldDefs.Add(fnGuidNBComponent, ftString, 40);
//mtNorms.FieldDefs.Add(fnIconType, ftInteger);
//mtNorms.FieldDefs.Add(fnName, ftString, 255);
//mtNorms.FieldDefs.Add(fnArticulProducer, ftString, 255);
//mtNorms.FieldDefs.Add(fnArticulDistributor, ftString, 255);
//mtNorms.FieldDefs.Add(fnGuidProducer, ftString, 255);
//mtNorms.FieldDefs.Add(fnIzm, ftString, 50);
//mtNorms.FieldDefs.Add(fnLaborTime, ftInteger);
//mtNorms.FieldDefs.Add(fnPricePerTime, ftFloat);
//mtNorms.FieldDefs.Add(fnKolvo, ftFloat);
//mtNorms.FieldDefs.Add(fnPrice, ftFloat);
//mtNorms.FieldDefs.Add(fnCost, ftFloat);
//mtNorms.FieldDefs.Add(fnPriceNB, ftFloat);
FIdsChangedTotalLaborTime := TIntList.Create;
end;
procedure TF_NormsComplete.PrepareForm;
var
CurrencyName: String;
DisplayFormatM: String;
begin
gbOkCancelResize(gbOkCancel);
//Caption := FReportName + ' - ' + FFolder.GetNameForVisible;
CurrencyName := TF_Main(GForm).GCurrencyM.NameBrief;
if CurrencyName <> '' then
CurrencyName := ', ' + CurrencyName;
//30.12.2013
DisplayFormatM := GetDisplayFormat(TF_Main(GForm).GCurrencyM.NameBrief);
GT_NormsLaborTime.Caption := TF_Main(GForm).GT_NormsResourcesLaborTime.Caption;
GT_NormsPricePerTime.Caption := TF_Main(GForm).GT_NormsResourcesPricePerTime.Caption;
TcxCurrencyEditProperties(GT_NormsPricePerTime.Properties).DisplayFormat := DisplayFormatM; //GetDisplayFormatForFloat;
TcxCurrencyEditProperties(GT_NormsPricePerTime.Properties).DecimalPlaces := FloatPrecision;
GT_NormsTotalLaborTime.Caption := TF_Main(GForm).GT_NormsResourcesLaborTime.Caption;
GT_NormsPricePerTime.Caption := TF_Main(GForm).GT_NormsResourcesPricePerTime.Caption;
//FTransToUOMIdx := GT_NormsTransformToUOM.Index;
SetCxCurrencyEditProperties(GT_NormsPrice.Properties); //29.08.2012 TcxCurrencyEditProperties(GT_NormsPrice.Properties).DisplayFormat := GetDisplayFormatForFloat;
SetCxCurrencyEditProperties(GT_NormsCost.Properties); //29.08.2012 TcxCurrencyEditProperties(GT_NormsCost.Properties).DisplayFormat := GetDisplayFormatForFloat;
//SetCxCurrencyEditProperties(GT_NormsPriceNB.Properties); //29.08.2012 TcxCurrencyEditProperties(GT_NormsPriceNB.Properties).DisplayFormat := GetDisplayFormatForFloat;
SetCxCurrencyEditProperties(GT_NormsTotalCost.Properties);
GT_NormsKolvo.Caption := TF_Main(GForm).GT_NormsResourcesKolvo.Caption;
TcxCurrencyEditProperties(GT_NormsKolvo.Properties).DisplayFormat := GetDisplayFormatForFloatByPrecision(PrecisionNormKolvo);
TcxCurrencyEditProperties(GT_NormsKolvo.Properties).DecimalPlaces := PrecisionNormKolvo;
GT_NormsCost.Caption := TF_Main(GForm).GT_NormsResourcesCost.Caption;
//neTotalCost.DisplayFormat := GetDisplayFormatForFloat; //GetDisplayFormat(TF_Main(GForm).GCurrencyM.NameBrief);
//neTotalCost.IntegersOnly := false;
//GT_NormsPrice.Caption := cReportForm_Msg1 + CurrencyName;
//GT_NormsCost.Caption := cReportForm_Msg2 + CurrencyName;
//GT_NormsPriceNB.Caption := cReportForm_Msg1_2 + CurrencyName;
//lbTotalCost.Caption := cReportForm_Msg3 + CurrencyName;
end;
procedure TF_NormsComplete.OnDrawCellAsChanged(ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo);
var
RecID, CellColor: Integer;
begin
RecID := AViewInfo.GridRecord.Values[GT_NormsID.Index];
if FIdsChangedTotalLaborTime.IndexOf(RecID) <> -1 then
begin
CellColor := clBlue;
if dsrcNorms.DataSet.RecNo > 0 then
if RecID = dsrcNorms.DataSet.FieldByName(fnID).AsInteger then
CellColor := clYellow;
ACanvas.Font.Color := CellColor;
end;
end;
function TF_NormsComplete.OnPriceValidate(const aFieldName: String; var aDisplayValue: Variant): Double;
var
OldPrice: Double;
NewPrice: Double;
begin
OldPrice := mtNorms.FieldByName(aFieldName).AsFloat;
if aDisplayValue = '' then
begin
aDisplayValue := FloatToStr(OldPrice);
Exit; ///// EXIT /////
end;
NewPrice := StrToFloat_My(aDisplayValue);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> TF_Main(GForm).FUOM <20><> <20><><EFBFBD><EFBFBD>
if mtNorms.FieldByName(fnTransToUOM).AsBoolean then
begin
NewPrice := FloatInUOM(NewPrice, umMetr, TF_Main(GForm).FUOM);
if NewPrice <> OldPrice then
begin
mtNorms.Edit;
mtNorms.FieldByName(aFieldName).AsFloat := NewPrice;
mtNorms.Post;
end;
end;
Result := NewPrice;
if OldPrice = NewPrice then
Exit; ///// EXIT /////
end;
procedure TF_NormsComplete.OnTotalCostChange;
var
NewValue: Double;
PercentFromLast: Double;
RecordCost: Double;
RecordPrice: Double;
RecNo: Integer;
i: Integer;
begin
NewValue := neTotalCost.Value;
if NewValue = 0 then
begin
neTotalCost.OnChange := nil;
try
neTotalCost.Value := FLastTotalCost;
finally
neTotalCost.OnChange := neTotalCostChange;
end;
Exit; ///// EXIT /////
end;
PercentFromLast := RoundX((NewValue * 100) / FLastTotalCost, 20);
RecNo := mtNorms.RecNo;
mtNorms.DisableControls;
try
for i := 0 to mtNorms.RecordCount - 1 do
begin
mtNorms.RecNo := i+1;
RecordCost := mtNorms.FieldByName(fnCost).AsFloat;
RecordCost := RecordCost * (PercentFromLast / 100);
RecordPrice := RoundCP(RecordCost / mtNorms.FieldByName(fnKolvo).AsFloat);
SendPriceAndCostToCurrRecord(RecordPrice, RecordCost);
end;
mtNorms.RecNo := RecNo;
finally
mtNorms.EnableControls;
end;
FLastTotalCost := NewValue;
end;
procedure TF_NormsComplete.mtNormsBeforeEdit(DataSet: TDataSet);
begin
//beep;
end;
procedure TF_NormsComplete.mtNormsAfterEdit(DataSet: TDataSet);
begin
if DataSet.State <> dsBrowse then
DataSet.FieldByName(fnIsModified).AsBoolean := true;
end;
procedure TF_NormsComplete.SendStringToCurrRecord(AFieldName, AValue: String);
begin
mtNorms.Edit;
mtNorms.FieldByName(AFieldName).AsString := AValue;
mtNorms.Post;
end;
procedure TF_NormsComplete.SendToMT;
var
Norm: TSCSNormGroup;
i: Integer;
MTPositions: TStringList;
NormKey: String;
NormKeyIdx: Integer;
OldTotalLaborTime: Integer;
function GetNormKey(const aGUID, aCypher, aName: String; aPrice, aPricePerTime: Double; aLaborTime: Integer): String;
begin
Result := aGUID+'_'+aCypher+'_'+aName+'_'+FloatToStr(aPrice)+'_'+FloatToStr(aPricePerTime)+'_'+IntToStr(aLaborTime);
end;
begin
BeginProgress(pcPreparingReport);
MTPositions := CreateStringListSorted;
try
FNormResources := FFolder.GetAllNormsResources([nrNorms], false, FCanHaveActiveComponents, FCanHaveDismountAccount, FComponsWithZeroPrice, false, true, false, true, true);
//FNormResources := FFolder.GetAllNormsResources([nrNorms], false, true, false, true, true, false);
dsrcNorms.DataSet.DisableControls;
try
//dsrcNorms.DataSet.Active := false;
//dsrcNorms.DataSet.Active := true;
FIdsChangedTotalLaborTime.Clear;
for i := 1 to dsrcNorms.DataSet.RecordCount do
begin
dsrcNorms.DataSet.RecNo := i;
MTPositions.AddObject(GetNormKey(
dsrcNorms.DataSet.FieldByName(fnGuid).AsString,
dsrcNorms.DataSet.FieldByName(fnCypher).AsString,
dsrcNorms.DataSet.FieldByName(fnName).AsString,
dsrcNorms.DataSet.FieldByName(fnCost).AsFloat,
dsrcNorms.DataSet.FieldByName(fnPricePerTime).AsFloat,
dsrcNorms.DataSet.FieldByName(fnLaborTime).AsInteger
), TObject(i));
end;
for i := 0 to FNormResources.Norms.Count - 1 do
begin
Norm := TSCSNormGroup(FNormResources.Norms[i]);
NormKey := GetNormKey(Norm.GuidNB, Norm.Cypher, Norm.Name, RoundCP(Norm.Price), RoundCP(Norm.PricePerTime), Norm.LaborTime);
NormKeyIdx := MTPositions.IndexOf(NormKey);
if NormKeyIdx = -1 then
begin
dsrcNorms.DataSet.Append;
dsrcNorms.DataSet.FieldByName(fnGuid).AsString := Norm.GuidNB;
dsrcNorms.DataSet.FieldByName(fnCypher).AsString := Norm.Cypher;
dsrcNorms.DataSet.FieldByName(fnName).AsString := Norm.Name;
dsrcNorms.DataSet.FieldByName(fnIzm).AsString := Norm.Izm_;
dsrcNorms.DataSet.FieldByName(fnLaborTime).AsInteger := Norm.LaborTime;
dsrcNorms.DataSet.FieldByName(fnPricePerTime).AsFloat := RoundCP(Norm.PricePerTime);
//dsrcNorms.DataSet.FieldByName(fnKolvo).AsFloat := RoundX(Norm.GrpKolvo, PrecisionNormKolvo);
//dsrcNorms.DataSet.FieldByName(fnPrice).AsFloat := Round3(Norm.Price);
dsrcNorms.DataSet.FieldByName(fnCost).AsFloat := RoundCP(Norm.Price);
dsrcNorms.DataSet.FieldByName(fnTotalCost).AsFloat := RoundX(Norm.TotalCost, PrecisionNormKolvo);
dsrcNorms.DataSet.FieldByName(fnTotalLaborTime).AsInteger := Round(Norm.LaborTime*Norm.Kolvo);
dsrcNorms.DataSet.FieldByName(fnDone).AsInteger := biFalse;
dsrcNorms.DataSet.Post;
end
else
begin
dsrcNorms.DataSet.RecNo := Integer(MTPositions.Objects[NormKeyIdx]);
OldTotalLaborTime := dsrcNorms.DataSet.FieldByName(fnTotalLaborTime).AsInteger;
dsrcNorms.DataSet.Edit;
dsrcNorms.DataSet.FieldByName(fnTotalLaborTime).AsInteger := Round(Norm.LaborTime*Norm.Kolvo);
CalcEndDate;
dsrcNorms.DataSet.Post;
if OldTotalLaborTime <> dsrcNorms.DataSet.FieldByName(fnTotalLaborTime).AsInteger then
FIdsChangedTotalLaborTime.Add(dsrcNorms.DataSet.FieldByName(fnID).AsInteger);
end;
end;
//dsrcNorms.DataSet.SortOn(fnName, []);
DefineTotals;
finally
dsrcNorms.DataSet.EnableControls;
//mtNorms.AfterPost := mtResourcesAfterPost;
if dsrcNorms.DataSet.RecordCount > 0 then
dsrcNorms.DataSet.First;
end;
finally
FreeAndNil(MTPositions);
EndProgress;
end;
//DefineTotalCost;
SetActions;
end;
procedure TF_NormsComplete.SetActions;
begin
end;
procedure TF_NormsComplete.CalcEndDate;
var
IsBrowse: Boolean;
begin
if (dsrcNorms.DataSet.FieldByName(fnStartDate).AsFloat <> 0) and (dsrcNorms.DataSet.FieldByName(fnWorkersAmount).AsFloat <> 0) then
begin
IsBrowse := dsrcNorms.DataSet.State = dsBrowse;
if IsBrowse then
dsrcNorms.DataSet.Edit;
if dsrcNorms.DataSet.FieldByName(fnTotalLaborTime).AsInteger > 0 then
dsrcNorms.DataSet.FieldByName(fnEndDate).AsDateTime := dsrcNorms.DataSet.FieldByName(fnStartDate).AsDateTime +
RoundUp(
(dsrcNorms.DataSet.FieldByName(fnTotalLaborTime).AsInteger/(cntWorkDayHours*60)) / dsrcNorms.DataSet.FieldByName(fnWorkersAmount).AsInteger
) - 1
else
dsrcNorms.DataSet.FieldByName(fnEndDate).AsDateTime := dsrcNorms.DataSet.FieldByName(fnStartDate).AsDateTime;
if IsBrowse then
dsrcNorms.DataSet.Post;
end;
end;
{
procedure TF_NormsComplete.DefineTotalCost;
var
RecNo: Integer;
i: Integer;
CurrCost: Double;
SavedOnChange: TNotifyevent;
begin
CurrCost := 0;
RecNo := mtNorms.RecNo;
mtNorms.DisableControls;
try
for i := 0 to mtNorms.RecordCount - 1 do
begin
mtNorms.RecNo := i+1;
CurrCost := CurrCost + mtNorms.FieldByName(fnCost).AsFloat;
end;
finally
mtNorms.EnableControls;
mtNorms.RecNo := RecNo;
end;
FLastTotalCost := CurrCost;
SavedOnChange := neTotalCost.OnChange;
neTotalCost.OnChange := nil;
try
neTotalCost.Value := CurrCost;
finally
neTotalCost.OnChange := SavedOnChange;
end;
end;}
procedure TF_NormsComplete.DefineTotals;
var
RecNo: Integer;
i: Integer;
TotalTime: Integer;
RemainingTime: Double;
begin
TotalTime := 0;
RemainingTime := 0;
if dsrcNorms.DataSet.RecordCount > 0 then // Tolik 27/12/2019 --
begin
RecNo := dsrcNorms.DataSet.RecNo;
dsrcNorms.DataSet.DisableControls;
try
for i := 0 to dsrcNorms.DataSet.RecordCount - 1 do
begin
dsrcNorms.DataSet.RecNo := i+1;
TotalTime := TotalTime + dsrcNorms.DataSet.FieldByName(fnTotalLaborTime).AsInteger;
RemainingTime := RemainingTime + dsrcNorms.DataSet.FieldByName(fnTotalLaborTime).AsInteger * (dsrcNorms.DataSet.FieldByName(fnCompletePct).AsFloat/100);
end;
finally
dsrcNorms.DataSet.EnableControls;
dsrcNorms.DataSet.RecNo := RecNo;
end;
end;
edTotalTime.Text := GetDisplayTextToNORMLaborTime(IntToStr(TotalTime), true);
edRemainingTime.Text := GetDisplayTextToNORMLaborTime(IntToStr(TotalTime - Round(RemainingTime)), true);
end;
procedure TF_NormsComplete.GT_ResourcesCostPropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
var
ValueFloat: Double;
IsCalcNormTotal: Boolean;
begin
try
if DisplayValue = '' then
begin
DisplayValue := FloatToStr(mtNorms.FieldByName(fnCost).AsFloat);
Exit; ///// EXIT /////
end;
ValueFloat := StrToFloat_My(DisplayValue);
mtNorms.Edit;
mtNorms.FieldByName(fnCost).AsFloat := ValueFloat;
mtNorms.Post;
TF_Main(GForm).DM.CalcNormCostTime(mtNorms, fnCost, IsCalcNormTotal);
except
end;
end;
procedure TF_NormsComplete.SendPriceAndCostToCurrRecord(APrice,
ACost: Double);
begin
mtNorms.Edit;
mtNorms.FieldByName(fnPrice).AsFloat := APrice;
mtNorms.FieldByName(fnCost).AsFloat := ACost;
mtNorms.FieldByName(fnIsModified).AsBoolean := true;
mtNorms.Post;
end;
procedure TF_NormsComplete.neTotalCostChange(Sender: TObject);
begin
OnTotalCostChange;
end;
procedure TF_NormsComplete.GT_NormsEditing(Sender: TcxCustomGridTableView;
AItem: TcxCustomGridTableItem; var AAllow: Boolean);
begin
//mtNorms.Edit;
//mtNorms.FieldByName(fnIsModified).AsBoolean := true;
//mtNorms.Post;
end;
procedure TF_NormsComplete.GT_NormsEditValueChanged(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
begin
if (Sender.DataController.IsEditing) and (mtNorms.State <> dsBrowse) then
begin
Timer_Post.Enabled := true;
end;
if not GProjectChanged then // Tolik 28/08/2019 --
SetProjectChanged(true);
end;
procedure TF_NormsComplete.Timer_DefineTotalsTimer(Sender: TObject);
begin
TTimer(Sender).Enabled := false;
DefineTotals;
end;
procedure TF_NormsComplete.Timer_PostTimer(Sender: TObject);
begin
TTimer(Sender).Enabled := false;
if mtNorms.State <> dsBrowse then
begin
GT_Norms.DataController.Post;
end;
end;
procedure TF_NormsComplete.GT_NormsNppGetDisplayText(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AText: String);
begin
AText := IntToStr(ARecord.Index + 1);
end;
procedure TF_NormsComplete.GT_NormsIzmGetDisplayText(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AText: String);
begin
//try
// if ARecord.Values[FTransToUOMIdx] <> null then
// if ARecord.Values[FTransToUOMIdx] = true then
// AText := GetNameUOM(TF_Main(GForm).FUOM, true);
//except
//end;
end;
procedure TF_NormsComplete.GT_NormsKolvoGetDisplayText(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AText: String);
var
ValueFloat: Double;
begin
//try
// if ARecord.Values[FTransToUOMIdx] <> null then
// if ARecord.Values[FTransToUOMIdx] = true then
// begin
// ValueFloat := StrToFloat_My(AText);
// ValueFloat := FloatInUOM(ValueFloat, umMetr, TF_Main(GForm).FUOM);
// AText := FloatToStr(RoundCP(ValueFloat));
// end;
//except
//end;
end;
procedure TF_NormsComplete.GT_NormsPriceGetDisplayText(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AText: String);
begin
//try
// if ARecord.Values[FTransToUOMIdx] <> null then
// if ARecord.Values[FTransToUOMIdx] = true then
// AText := GetDisplayTextToNORMExpenseForLength(AText, TF_Main(GForm).FUOM);
//except
//end;
end;
procedure TF_NormsComplete.GT_NormsInitEdit(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem;
AEdit: TcxCustomEdit);
begin
if (AItem = GT_NormsPrice) {or (AItem = GT_NormsPriceNB)} then
AEdit.EditValue := GetDisplayTextToNORMExpenseForLength(AEdit.EditValue, TF_Main(GForm).FUOM);
Edit := AEdit;
end;
procedure TF_NormsComplete.GT_NormsFocusedRecordChanged(
Sender: TcxCustomGridTableView; APrevFocusedRecord,
AFocusedRecord: TcxCustomGridRecord;
ANewItemRecordFocusingChanged: Boolean);
var
CanEditIzm: Boolean;
begin
CanEditIzm := true;
if mtNorms.Active then
if mtNorms.FieldByName(fnTransToUOM).AsBoolean then
CanEditIzm := false;
GT_NormsIzm.Options.Editing := CanEditIzm;
end;
procedure TF_NormsComplete.GT_NormsCustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
//OnNormsResourcesCustomDrawCell(ACanvas, AViewInfo, GT_NormsIsResource.Index, GT_NormsGUIDNBCompon.Index, -1, false);
if AViewInfo.GridRecord.Values[GT_NormsDone.Index] = biTrue then
ACanvas.Font.Style := ACanvas.Font.Style + [fsStrikeOut];
end;
procedure TF_NormsComplete.Act_LoadPricesFromNBExecute(Sender: TObject);
var
i: Integer;
GUIDCompon: String;
IDCompon: Integer;
NBPrice: Double;
Compon: TSCSComponent;
BookMark: String;
begin
{GT_NormsPriceNB.Visible := true;
BookMark := mtNorms.Bookmark;
try
Compon := TSCSComponent.Create(F_NormBase);
for i := 0 to GT_Norms.Controller.SelectedRecordCount - 1 do
begin
//GT_Norms.Controller.SelectedRows[i].
GUIDCompon := GT_Norms.Controller.SelectedRecords[i].Values[GT_NormsGUIDNBCompon.Index];
IDCompon := F_NormBase.DM.GetIntFromTableByGUID(tnComponent, fnID, GUIDCompon, qmPhisical);
if IDCompon <> 0 then
begin
Compon.Clear;
Compon.LoadComponentByID(IDCompon, false);
DefineComponPriceOnCopyToOtherBase(Compon, nil, F_ProjMan.GSCSBase.CurrProject, F_NormBase, F_ProjMan);
//GT_Norms.Controller.SelectedRecords[i].Values[GT_NormsPriceNB.Index] := Compon.Price;
//GT_Norms.DataController.Values[GT_Norms.Controller.SelectedRecords[i].Index, GT_NormsPriceNB.Index] := Compon.Price;
if mtNorms.Locate(fnGuidNBComponent, GUIDCompon, []) then
begin
mtNorms.Edit;
mtNorms.FieldByName(fnPriceNB).AsFloat := RoundCP(Compon.Price);
mtNorms.Post;
end;
end;
end;
Compon.Free;
finally
mtNorms.Bookmark := BookMark;
end;}
end;
procedure TF_NormsComplete.neTotalCostKeyPress(Sender: TObject;
var Key: Char);
begin
CorrectMaskKeyPress(Key);
//if Key = #13 then
// OnTotalCostChange;
end;
procedure TF_NormsComplete.neTotalCostExit(Sender: TObject);
begin
//OnTotalCostChange;
end;
procedure TF_NormsComplete.GT_NormsLaborTimeGetDisplayText(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AText: String);
begin
AText := GetDisplayTextToNORMLaborTime(AText);
end;
procedure TF_NormsComplete.GT_NormsLaborTimePropertiesValidate(
Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
var
ValueFloat: Double;
IsCalcNormTotal: Boolean;
begin
try
if DisplayValue = '' then
begin
DisplayValue := FloatToStr(mtNorms.FieldByName(fnLaborTime).AsInteger);
Exit; ///// EXIT /////
end;
ValueFloat := StrToFloat_My(DisplayValue);
mtNorms.Edit;
mtNorms.FieldByName(fnLaborTime).AsFloat := ValueFloat;
mtNorms.Post;
TF_Main(GForm).DM.CalcNormCostTime(mtNorms, fnLaborTime, IsCalcNormTotal);
except
end;
end;
procedure TF_NormsComplete.GT_NormsPricePerTimePropertiesValidate(
Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
var
ValueFloat: Double;
IsCalcNormTotal: Boolean;
begin
try
if DisplayValue = '' then
begin
DisplayValue := FloatToStr(mtNorms.FieldByName(fnPricePerTime).AsFloat);
Exit; ///// EXIT /////
end;
ValueFloat := StrToFloat_My(DisplayValue);
mtNorms.Edit;
mtNorms.FieldByName(fnPricePerTime).AsFloat := ValueFloat;
mtNorms.Post;
TF_Main(GForm).DM.CalcNormCostTime(mtNorms, fnPricePerTime, IsCalcNormTotal);
except
end;
end;
procedure TF_NormsComplete.GT_NormsKolvoPropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
var
ValueFloat: Double;
begin
try
if DisplayValue = '' then
begin
DisplayValue := FloatToStr(mtNorms.FieldByName(fnKolvo).AsFloat);
Exit; ///// EXIT /////
end;
ValueFloat := StrToFloat_My(DisplayValue);
mtNorms.Edit;
mtNorms.FieldByName(fnKolvo).AsFloat := ValueFloat;
//mtNorms.FieldByName(fnExpenseForLength).AsFloat := 0;
//mtNorms.FieldByName(fnCountForPoint).AsFloat := 0;
//mtNorms.FieldByName(fnStepOfPoint).AsFloat := 0;
mtNorms.Post;
except
end;
end;
procedure TF_NormsComplete.GT_NormsWorkersAmountPropertiesValidate(
Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
var
ValueInt: Integer;
begin
//TcxSpinEditProperties(GT_NormsWorkersAmount.Properties).OnValidate := nil;
TcxDateEdit(Sender).Properties.OnValidate := nil;
try
if DisplayValue = '' then
begin
DisplayValue := FloatToStr(mtNorms.FieldByName(fnWorkersAmount).AsInteger);
Exit; ///// EXIT /////
end;
ValueInt := StrToInt(DisplayValue);
dsrcNorms.DataSet.Edit;
dsrcNorms.DataSet.FieldByName(fnWorkersAmount).AsInteger := ValueInt;
dsrcNorms.DataSet.Post;
CalcEndDate;
finally
//TcxSpinEditProperties(GT_NormsWorkersAmount.Properties).OnValidate := GT_NormsWorkersAmountPropertiesValidate;
TcxDateEdit(Sender).Properties.OnValidate := GT_NormsWorkersAmountPropertiesValidate;
end;
end;
procedure TF_NormsComplete.GT_NormsStartDatePropertiesValidate(
Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
var
ValueDate: TDate;
begin
//TcxDateEditProperties(GT_NormsStartDate.Properties).OnValidate := nil;
TcxDateEdit(Sender).Properties.OnValidate := nil;
try
if DisplayValue = '' then
begin
DisplayValue := FloatToStr(mtNorms.FieldByName(fnStartDate).AsFloat);
Exit; ///// EXIT /////
end;
ValueDate := StrToDate(DisplayValue);
dsrcNorms.DataSet.Edit;
dsrcNorms.DataSet.FieldByName(fnStartDate).AsFloat := ValueDate;
dsrcNorms.DataSet.Post;
CalcEndDate;
finally
//TcxDateEditProperties(GT_NormsStartDate.Properties).OnValidate := GT_NormsStartDatePropertiesValidate;
TcxDateEdit(Sender).Properties.OnValidate := GT_NormsStartDatePropertiesValidate;
end;
end;
procedure TF_NormsComplete.GT_NormsTotalLaborTimeGetDisplayText(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AText: String);
begin
AText := GetDisplayTextToNORMLaborTime(AText);
end;
procedure TF_NormsComplete.GT_NormsTotalLaborTimeCustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
OnDrawCellAsChanged(ACanvas, AViewInfo);
end;
procedure TF_NormsComplete.GT_NormsEndDateCustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
OnDrawCellAsChanged(ACanvas, AViewInfo);
end;
procedure TF_NormsComplete.FormDestroy(Sender: TObject);
begin
FreeAndNil(FIdsChangedTotalLaborTime);
end;
procedure TF_NormsComplete.GT_NormsCompletePctPropertiesValidate(
Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
begin
Timer_DefineTotals.Enabled := true;
end;
end.