|
<< Click to Display Table of Contents >> Navigation: WinArhi > Fereastra principala > Oferte si Comenzi deschise > Meniu > Optiuni > Editare Script funcții > Funcții speciale > ModifyOrderAccessoryAfterWindowsConsumption |
ModifyOrderAccessoryAfterWindowsConsumption - Dacă în script există această funcție atunci aceasta va fi apelată după calcularea consumului la ferestre, accesoriile ferestrelor si panouri dar înainte de al calcula consumul la accesoriile comenzii.
function ModifyOrderAccessoryAfterWindowsConsumption: Boolean; //valoarea returnată nu este folosită
În cadrul acestei funcții se vor folosi următoarelor funcții pentru a modifica accesoriile:
procedure WA_AddAccessory(const ACode: String; AQuantity: Double; APrice: Double = 0; AObs: String = '');
procedure WA_AddOrModifyAccessory(const ACode: String; AQuantity: Double; APrice: Double = 0; AObs: String = '');
procedure WA_DeleteAccessory(const ACode: String);
Exemplu:
Va adăuga căte un acceosoriu cu codul TaxaFolie pentru fiecare profil dintr-o lista de categorii de culoare de pe anumite serii de profile:
function ModifyOrderAccessoryAfterWindowsConsumption: Boolean; //valoarea returnată nu este folosită de WinArhi
const
CodAccesoriu = 'TaxaFolie';
LListaSerii = ['Rehau 70'];
LListaCatCul = ['foliat ext', 'foliat ext2'];
var
ListaPr: array of String;
CodPlusCul: String;
begin
SetLength(ListaPr, 0);
cdsCutDim.First;
while not cdsCutDim.Eof do begin
CodPlusCul := cdsCutDim.FieldByName('CodP').AsString + '---' + cdsCutDim.FieldByName('CuloareP').AsString;
if (cdsCutDim.FieldByName('TipProfilSimplu').AsInteger > 0)
and WA_StrInArray(cdsCutDim.FieldByName('SerieProfile').AsString, LListaSerii)
and WA_StrInArray(cdsCutDim.FieldByName('CatCuloareP').AsString, LListaCatCul)
and not WA_StrInArray(CodPlusCul, ListaPr) then begin
//Adaugam la lista pr
SetLength(ListaPr, Length(ListaPr) + 1);
ListaPr[Length(ListaPr) - 1] := CodPlusCul;
end;
cdsCutDim.Next;
end;
if Length(ListaPr) = 0 then
WA_DeleteAccessory(CodAccesoriu)
else
WA_AddOrModifyAccessory(CodAccesoriu, Length(ListaPr));
end;
Va adăuga căte un acceosoriu cu codul TaxaFolie pentru fiecare culoare pe care profilele sunt sub o anumita lungime pe anumite serii de profile:
function ModifyOrderAccessoryAfterWindowsConsumption: Boolean; //valoarea returnată nu este folosită de WinArhi
const
//lungimea minima in metri sub care se adauga taxa
MinLungime = 20;
CodAccesoriu = 'TaxaFolie';
LListaSerii = [
'Serie profile 1',
'Serie profile 2'];
LListaCatCul = [
'folie1',
'folie2'];
var
ListaCulori: TStringList;
ListaLung: array of Double;
Cul: String;
i, NrBucati: Integer;
begin
ListaCulori := TStringList.Create;
try
//Parcurgem tabelul de debitare pentru a determina lista de culori
cdsCutDim.First;
while not cdsCutDim.Eof do begin
Cul := cdsCutDim.FieldByName('CuloareP').AsString;
if (cdsCutDim.FieldByName('TipProfilSimplu').AsInteger > 0)
and WA_StrInArray(cdsCutDim.FieldByName('SerieProfile').AsString, LListaSerii)
and WA_StrInArray(cdsCutDim.FieldByName('CatCuloareP').AsString, LListaCatCul)
and (ListaCulori.IndexOf(Cul) < 0) then
ListaCulori.Add(Cul);
cdsCutDim.Next;
end;
//Setam pe 0 lista de lungimi
SetLength(ListaLung, ListaCulori.Count);
for i := 0 to Length(ListaLung) - 1 do
ListaLung[i] := 0;
//Parcurgem tabelul de consum pentru a insuma cantitatiile
cdsCons.First;
while not cdsCons.Eof do begin
Cul := cdsCons.FieldByName('Culoare').AsString;
i := ListaCulori.IndexOf(Cul);
if (i >= 0) then
ListaLung[i] := ListaLung[i] + cdsCons.FieldByName('Cantitate').AsFloat;
cdsCons.Next;
end;
//Calculam de cate ori trebuie adaugata taxa
NrBucati := 0;
for i := 0 to Length(ListaLung) - 1 do begin
if ListaLung[i] < MinLungime then
Inc(NrBucati);
end;
//Ajustam taxa ca accesoriu pe oferta
if NrBucati = 0 then
WA_DeleteAccessory(CodAccesoriu)
else
WA_AddOrModifyAccessory(CodAccesoriu, NrBucati);
finally
ListaCulori.Free;
end;
end;