/
YakuninAV
/
Convertors
Обзор
Документация
Войти
/
YakuninAV
/
Convertors
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Estimate/SumEstimates.pas
495 строк
17 KB
YakuninAV
begin with gitflick
31 июл 2026, 15:21
31 июл 2026, 15:21
1dc0fc6
Код
Авторство
О чём код?
unit SumEstimates; {$I mormot.defines.inc} interface uses {$IFDEF DELPHIXE2} System.SysUtils, System.Classes, System.Types, System.DateUtils, System.StrUtils, System.TypInfo, {$ELSE} SysUtils, Classes, Types, DateUtils, StrUtils, TypInfo, {$ENDIF} mormot.core.base, mormot.core.variants, mormot.core.os, mormot.core.unicode, mormot.core.text, mormot.core.json, mormot.core.rtti, mormot.core.interfaces, mormot.core.data, mormot.core.datetime, DBDIntfs, DBDNotifiers, DBDStrUtils, DBDUtils, EstTypes, EstIntfsV2, EstIntfsV3, EstPrices, EstInflationRates, EstimatesV3, EstItemsV3, EstRequisites; type /// Класс реализующий интерфейс для работы с информацией о сметах объекта строительства TSumEstimateV3 = class(TEstimateV3, ISumEstimateV3) protected class var FrWorkType, FrMethodic, FrKind, FrName, FrNum, FrDate, FrReason, FrReasonLink, FrQuantity, FrQtyName, FrQty, FrQtyUnit, FrPriceLevel, FrIndex, FrCreated, FrApproved, FrCustomer, FrAccessLevel, FrChapter, FrPosition, FrGUID, FrNormative, FrSignature, FrOPNorms, FrOverdraftRegion, FrIdxType: RawUTF8; protected // FChapters: TEstSectionV3DynArray; // FItems: TEstItemV3DynArray; // FSignatures: TEstSignatureV3DynArray; FApproved, FCreated: TDateTime; FName, FNum, FCustomer, FQtyUnit, FReason, FReasonLink: string; // FOwner: IInterface; /////////////////////////////// // FOwnerPtr: PEstObjectV3; FSummaries:TEstSummaryV3DynArray; FEstSummaries:TEstSummaryV3DynArray; FQty: Double; FRateVAT, FRateReserve: Double; function FindSummary(const num: integer): Integer; private function GetApproved: TDateTime; function GetCreated: TDateTime; function GetChapter(Index: Integer): IEstSectionV3; function GetChapters: TEstSectionV3DynArray; function GetItem(Index: Integer): IEstItemV3; function GetItems: TEstItemV3DynArray; // function GetName: string; // function GetNum: string; // function GetOwner: IEstObjectV3; // function GetOwnerPtr: PEstObjectV3; function GetPticeLevel: TEstimatePriceLevel; function GetQty: Double; function GetQtyUnit: string; function GetReason: string; function GetReasonLink: string; function GetSummary(Num: Integer): IEstSummaryV3; function GetSummaries: TEstSummaryV3DynArray; function GetEstSummaries: TEstSummaryV3DynArray; procedure SetApproved(Value: TDateTime); procedure SetCreated(Value: TDateTime); procedure SetChapter(Index: Integer; Value: IEstSectionV3); procedure SetItem(Index: Integer; Value: IEstItemV3); // procedure SetName(Value: string); // procedure SetNum(Value: string); // procedure SetOwner(Value: IEstObjectV3); // procedure SetOwnerPtr(Value: PEstObjectV3); procedure SetPriceLevel(Value: TEstimatePriceLevel); procedure SetQty(const Value: Double); procedure SetQtyUnit(const Value: string); procedure SetReason(const Value: string); procedure SetReasonLink(const Value: string); procedure SetSummary(Num: Integer; const Value: IEstSummaryV3); function GetCustomer: string; function GetNewBuilding: Integer; function GetRenewal: Integer; procedure SetCustomer(Value: string); procedure SetNewBuilding(Value: Integer); procedure SetRenewal(Value: Integer); function GetRateReserve: Double; function GetRateVAT: Double; procedure SetRateReserve(const Value: Double); procedure SetRateVAT(const Value: Double); public class property rWorkType: RawUTF8 read FrWorkType write FrWorkType; class property rKind: RawUTF8 read FrKind write FrKind; class property rMethodic: RawUTF8 read FrMethodic write FrMethodic; class property rName: RawUTF8 read FrName write FrName; class property rNum: RawUTF8 read FrNum write FrNum; class property rDate: RawUTF8 read FrDate write FrDate; class property rReason: RawUTF8 read FrReason write FrReason; class property rReasonLink: RawUTF8 read FrReasonLink write FrReasonLink; class property rAccessLevel: RawUTF8 read FrAccessLevel write FrAccessLevel; class property rQuantity: RawUTF8 read FrQuantity write FrQuantity; class property rQtyName: RawUTF8 read FrQtyName write FrQtyName; class property rCreated: RawUTF8 read FrCreated write FrCreated; class property rApproved: RawUTF8 read FrApproved write FrApproved; class property rCustomer: RawUTF8 read FrCustomer write FrCustomer; class property rQty: RawUTF8 read FrQty write FrQty; class property rQtyUnit: RawUTF8 read FrQtyUnit write FrQtyUnit; class property rPriceLevel: RawUTF8 read FrPriceLevel write FrPriceLevel; class property rIndex: RawUTF8 read FrIndex write FrIndex; class property rChapter: RawUTF8 read FrChapter write FrChapter; class property rPosition: RawUTF8 read FrPosition write FrPosition; class property rNormative: RawUTF8 read FrNormative write FrNormative; class property rGUID: RawUTF8 read FrGUID write frGUID; class property rSignature: RawUtf8 read FrSignature write FrSignature; class property rOPNorms: RawUTF8 read FrOPNorms write FrOPNorms; class property rOverdraftRegion: RawUTF8 read FrOverdraftRegion write FrOverdraftRegion; class property rIdxType: RawUtf8 read FrIdxType write FrIdxType; public /// Дата составления property Created: TDateTime read GetCreated write SetCreated; /// Дата утверждения property Approved: TDateTime read GetApproved write SetApproved; /// Наименование // property Name: string read GetName write SetName; /// Номер // property Num: string read GetNum write SetNum; /// Раздел объектной сметы property Chapter[Index: Integer]: IEstSectionV3 read GetChapter write SetChapter; /// Массив разделов объектной сметы property Chapters: TEstSectionV3DynArray read GetChapters; /// Строка сметы property Item[Index: Integer]: IEstItemV3 read GetItem write SetItem; /// Массив строк сметы property Items: TEstItemV3DynArray read GetItems; /// Указатель на интерфейс для работы с информацией об объекте строительства, которому принадлежит смета property Owner: IEstObjectV3 read GetOwner write SetOwner; /// Указатель на интерфейс для работы с информацией об объекте строительства, которому принадлежит смета // property OwnerPtr: PEstObjectV3 read GetOwnerPtr write SetOwnerPtr; /// Текущий или базовый уровень цен property PticeLevel: TEstimatePriceLevel read GetPticeLevel write SetPriceLevel; /// Объём строительства property Qty: Double read GetQty write SetQty; /// Размерность единицы объёма property QtyUnit: string read GetQtyUnit write SetQtyUnit; /// Основание ОСР(ОС) - проектная или иная техническая документация property Reason: string read GetReason write SetReason; /// Ссылка на файл с проектной или иной технической документацией property ReasonLink: string read GetReasonLink write SetReasonLink; /// Заказчик (наименование организации) property Customer: string read GetCustomer write SetCustomer; /// ССРСС "Новое строительство" property NewBuilding: Integer read GetNewBuilding write SetNewBuilding; /// ССРСС "Капитальный ремонт" property Renewal: Integer read GetRenewal write SetRenewal; property RateReserve: Double read GetRateReserve write SetRateReserve; property RateVAT: Double read GetRateVAT write SetRateVAT; /// Итоги сметы property Summary[Num: Integer]: IEstSummaryV3 read GetSummary write SetSummary; property Summaries: TEstSummaryV3DynArray read GetSummaries; /// итоги локальных смет, включённых в сводную смету property EstSummaries: TEstSummaryV3DynArray read GetEstSummaries; /// Конструктор constructor Create(const aNum, aName: string; const Notifier: IDBDNotifierV1=nil); /// Деструктор destructor Destroy; override; /// Функция добавляет строку в смету function AddItem(aItem: IEstItemV3): Integer; /// Функция добавляет итоги локальной сметы function AddEstSummary(aSum: IEstSummaryV3): Integer; /// Функция добавляет раздел в смету // function AddChapter(aChapter: IEstSectionV3): Integer; /// Функция добавляет итоговую строку в смету function AddSummary(aSum: IEstSummaryV3): Integer; /// Функция возвращает количество строк в смете function ItemsCount: Integer; /// Функция возвращает количество всех строк в смете // function ItemsCountEx: Integer; /// Функция загружает информацию из JSON-документа function FromDoc(const PDoc: PDocVariantData): Boolean; overload; /// Функция возвращает JSON-документ function ToDoc: Variant; end; implementation procedure InitModule; begin TSumEstimateV3.rAccessLevel:=StringToUTF8('AccLvl'); TSumEstimateV3.rApproved:=StringToUTF8('Approved'); TSumEstimateV3.rChapter:=StringToUTF8('Chapters'); TSumEstimateV3.rCreated:=StringToUTF8('Created'); TSumEstimateV3.rCustomer:=StringToUTF8('Customer'); TSumEstimateV3.rDate:=StringToUTF8('Date'); TSumEstimateV3.rGUID:=StringToUTF8('GUID'); TSumEstimateV3.rIdxType:=StringToUtf8('idxType'); TSumEstimateV3.rIndex:=StringToUTF8('Index'); TSumEstimateV3.rKind:=StringToUtf8('Kind'); TSumEstimateV3.rMethodic:=StringToUTF8('Methodic'); TSumEstimateV3.rName:=StringToUTF8('Name'); TSumEstimateV3.rNormative:=StringToUTF8('Normative'); TSumEstimateV3.rNum:=StringToUTF8('Num'); TSumEstimateV3.rOPNorms:=StringToUtf8('OPNorms'); TSumEstimateV3.rOverdraftRegion:=StringToUtf8('ORegion'); TSumEstimateV3.rPosition:=StringToUTF8('Positions'); TSumEstimateV3.rQuantity:=StringToUTF8('Quantity'); TSumEstimateV3.rQtyUnit:=StringToUTF8('QtyUnit'); TSumEstimateV3.rQtyName:=StringToUTF8('QtyName'); TSumEstimateV3.rReason:=StringToUTF8('Reason'); TSumEstimateV3.rReasonLink:=StringToUTF8('ReasonLink'); TSumEstimateV3.rSignature:=StringToUtf8('Signatures'); TSumEstimateV3.rWorkType:=StringToUTF8('WorkType'); end; { TSumEstimateV3 } function TSumEstimateV3.AddEstSummary(aSum: IEstSummaryV3): Integer; begin if aSum<>nil then begin Result:=Length(FEstSummaries); SetLength(FEstSummaries,Result+1); FEstSummaries[Result]:=aSum; end else Result:=-1; end; function TSumEstimateV3.AddItem(aItem: IEstItemV3): Integer; begin if aItem=nil then Result:=-1 else begin Result:=Length(FItems); SetLength(FItems,Result+1); FItems[Result]:=aItem; aItem.Owner:=Self; end; end; function TSumEstimateV3.AddSummary(aSum: IEstSummaryV3): Integer; begin if aSum<>nil then begin Result:=Length(FSummaries); SetLength(FSummaries,Result+1); FSummaries[Result]:=aSum; end else Result:=-1; end; constructor TSumEstimateV3.Create(const aNum, aName: string; const Notifier: IDBDNotifierV1=nil); begin inherited Create(aNum,aName, FNotifier); FEstType:=etSEC; SetLength(FEstSummaries,0); end; destructor TSumEstimateV3.Destroy; begin SetLength(FSections,0); SetLength(FItems,0); //SetLength(FSignatures,0); SetLength(FSummaries,0); SetLength(FEstSummaries,0); inherited; end; function TSumEstimateV3.GetApproved: TDateTime; begin Result:=FApproved; end; function TSumEstimateV3.GetChapter(Index: Integer): IEstSectionV3; begin if (Index>=0) and (Index<Length(FSections)) then Result:=FSections[Index] else Result:=nil; end; function TSumEstimateV3.GetChapters: TEstSectionV3DynArray; begin Result:=FSections; end; function TSumEstimateV3.GetCreated: TDateTime; begin Result:=FCreated; end; function TSumEstimateV3.GetCustomer: string; begin Result:=FCustomer; end; function TSumEstimateV3.GetEstSummaries: TEstSummaryV3DynArray; begin Result:=FEstSummaries; end; function TSumEstimateV3.GetItem(Index: Integer): IEstItemV3; begin if (Index>=0) and (Index<Length(FItems)) then Result:=FItems[Index] else Result:=nil; end; function TSumEstimateV3.GetItems: TEstItemV3DynArray; begin Result:=FItems; end; function TSumEstimateV3.GetNewBuilding: Integer; begin end; function TSumEstimateV3.GetPticeLevel: TEstimatePriceLevel; begin Result:=FPriceLevel; end; function TSumEstimateV3.GetQty: Double; begin Result:=FQty; end; function TSumEstimateV3.GetQtyUnit: string; begin Result:=FQtyUnit; end; function TSumEstimateV3.GetRateReserve: Double; begin Result:=FRateReserve; end; function TSumEstimateV3.GetRateVAT: Double; begin Result:=FRateVAT; end; function TSumEstimateV3.GetReason: string; begin end; function TSumEstimateV3.GetReasonLink: string; begin end; function TSumEstimateV3.GetRenewal: Integer; begin end; function TSumEstimateV3.GetSummaries: TEstSummaryV3DynArray; begin Result:=FSummaries; end; function TSumEstimateV3.GetSummary(Num: Integer): IEstSummaryV3; var i: Integer; begin i:=FindSummary(Num); if i>=0 then Result:=FSummaries[i] else Result:=nil; end; function TSumEstimateV3.ItemsCount: Integer; begin Result:=Length(FItems); end; //function TSumEstimateV3.ItemsCountEx: Integer; //begin // //end; procedure TSumEstimateV3.SetApproved(Value: TDateTime); begin FApproved:=Value; end; procedure TSumEstimateV3.SetChapter(Index: Integer; Value: IEstSectionV3); begin if (Index>=0) and (Index<Length(FSections)) then FSections[Index]:=Value; end; procedure TSumEstimateV3.SetCreated(Value: TDateTime); begin FCreated:=Value; end; procedure TSumEstimateV3.SetCustomer(Value: string); begin FCustomer:=Value; end; procedure TSumEstimateV3.SetItem(Index: Integer; Value: IEstItemV3); begin if (Index>=0) and (Index<Length(FItems)) then FItems[Index]:=Value; end; procedure TSumEstimateV3.SetNewBuilding(Value: Integer); begin end; procedure TSumEstimateV3.SetPriceLevel(Value: TEstimatePriceLevel); begin FPriceLevel:=Value; end; procedure TSumEstimateV3.SetQty(const Value: Double); begin FQty:=Value; end; procedure TSumEstimateV3.SetQtyUnit(const Value: string); begin FQtyUnit:=Value; end; procedure TSumEstimateV3.SetRateReserve(const Value: Double); begin FRateReserve:=Value; end; procedure TSumEstimateV3.SetRateVAT(const Value: Double); begin FRateVAT:=Value; end; procedure TSumEstimateV3.SetReason(const Value: string); begin FReason:=Value; end; procedure TSumEstimateV3.SetReasonLink(const Value: string); begin FReasonLink:=Value; end; procedure TSumEstimateV3.SetRenewal(Value: Integer); begin end; procedure TSumEstimateV3.SetSummary(Num: Integer; const Value: IEstSummaryV3); begin end; function TSumEstimateV3.FindSummary(const num: integer): Integer; var i: Integer; begin Result:=-1; for i := Low(FSummaries) to High(FSummaries) do if {(FSummaries[i].kind=eskSubsummary) and }(num=FSummaries[i].Num) then begin Result:=i; Exit; end; end; function TSumEstimateV3.FromDoc(const PDoc: PDocVariantData): Boolean; begin end; function TSumEstimateV3.ToDoc: Variant; var v,a: Variant; ch: IEstSectionV3; sig: IEstSignatureV3; su: IEstSummaryV3; begin Result:=_Obj([FrNum,StringToUtf8(FNum), FrName,StringToUtf8(FName), FrCustomer,StringToUtf8(FCustomer), FrReason,StringToUtf8(FReason), FrReasonLink,StringToUtf8(FReasonLink), FrQuantity,FQty, FrQtyUnit, StringToUtf8(FQtyUnit), FrCreated,FCreated, FrApproved,FApproved, FrAccessLevel,StringToUtf8(FAccessLevel)]); TDocVariantData(Result).AddValue('Reserve',FRateReserve); TDocVariantData(Result).AddValue('VAT',FRateVAT); v:=FPriceLevel.ToDoc; TDocVariantData(Result).AddValue(FrPriceLevel,v); TDocVariantData(v).Clear; if Length(FSummaries)>0 then begin a:=_Arr([]); for su in FSummaries do begin v:=su.ToDoc; TDocVariantData(a).AddItem(v); TDocVariantData(v).Clear; end; TDocVariantData(Result).AddValue('Summaries',a); TDocVariantData(a).Clear; end; if Length(FEstSummaries)>0 then begin a:=_Arr([]); for su in FEstSummaries do begin v:=su.ToDoc; TDocVariantData(a).AddItem(v); TDocVariantData(v).Clear; end; TDocVariantData(Result).AddValue('LocEstimates',a); TDocVariantData(a).Clear; end; if Length(FSections)>0 then begin a:=_Arr([]); for ch in FSections do begin v:=ch.ToDoc; TDocVariantData(a).AddItem(v); TDocVariantData(v).Clear; end; TDocVariantData(Result).AddValue('Chapters',a); TDocVariantData(a).Clear; end; if FSignatures.Count>0 then begin a:=_Arr([]); for sig in FSignatures.Signatures do begin v:=sig.ToDoc; TDocVariantData(a).AddItem(v); TDocVariantData(v).Clear; end; TDocVariantData(Result).AddValue('Signatures',a); TDocVariantData(a).Clear; end; end; initialization InitModule; end.