ModifyOrderAccessoryAfterWindowsConsumption

<< 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;