unit uBizReferenciaGenerica; interface uses Classes, DB, SysUtils, uROClasses, uDADataTable, uDBSelectionList, schReferenciaGenericaClient_Intf; const BIZ_REFERENCIAGENERICA = 'Client.ReferenciaGenerica'; type TRefGenEstado = (rgPendiente, rgEnEspera, rgResuelto); IBizReferenciaGenerica = interface(IReferenciaGenerica) ['{31C0DE0B-9B92-43A6-810D-7E94F5FF12FE}'] procedure VerTodos; procedure VerPendientes; procedure VerEnEspera; procedure VerResueltos; procedure DesglosarReferencia; procedure Show; procedure Print (const Centro, Vendedor : string; const Estado : TRefGenEstado; const AFiltro : String = ''); procedure Preview (const Centro, Vendedor : string; const Estado : TRefGenEstado; const AFiltro : String = ''); procedure SetEstado(const AValue : TRefGenEstado); function GetEstado : TRefGenEstado ; property Estado : TRefGenEstado read GetEstado write SetEstado; end; TBizReferenciaGenericaDataTableRules = class(TReferenciaGenericaDataTableRules, IBizReferenciaGenerica, ISelectedRowList) private FSelectedRows : TSelectedRowList; protected procedure SetEstado(const AValue : TRefGenEstado); function GetEstado : TRefGenEstado ; function GetSelectedRows : TSelectedRowList; procedure OnNewRecord(Sender: TDADataTable); override; public procedure VerTodos; procedure VerPendientes; procedure VerEnEspera; procedure VerResueltos; procedure DesglosarReferencia; procedure Show; procedure Print (const Centro, Vendedor : string; const Estado : TRefGenEstado; const AFiltro : String = ''); procedure Preview (const Centro, Vendedor : string; const Estado : TRefGenEstado; const AFiltro : String = ''); property Estado : TRefGenEstado read GetEstado write SetEstado; property SelectedRows : TSelectedRowList read GetSelectedRows; constructor Create(aDataTable: TDADataTable); override; destructor Destroy; override; end; implementation uses uEditorUtils, uDataModuleReferenciaGenerica, uDataTableUtils, uDACDSDataTable; { TBizReferenciaGenericaDataTableRules } constructor TBizReferenciaGenericaDataTableRules.Create( aDataTable: TDADataTable); begin inherited; FSelectedRows := TSelectedRowList.Create(aDataTable); end; procedure TBizReferenciaGenericaDataTableRules.DesglosarReferencia; var ADataTable : TDACDSDataTable; AEstado : TRefGenEstado; i : integer; begin if (Abs(VTAPROCESO) < 2) and (Abs(VTAFINAL) < 2) and (Abs(VTATERM) < 2) then Exit; // No se puede desglosar si la cantidad es menor que 2. AEstado := Estado; DataTable.Edit; try if (VTAPROCESO <> 0) then begin if (VTAPROCESO > 0) then VTAPROCESO := VTAPROCESO - 1 else VTAPROCESO := VTAPROCESO + 1 end else begin if (VTAFINAL <> 0) then begin if (VTAFINAL > 0) then VTAFINAL := VTAFINAL - 1 else VTAFINAL := VTAFINAL + 1 end else begin if (VTATERM <> 0) then begin if (VTATERM > 0) then VTATERM := VTATERM - 1 else VTATERM := VTATERM + 1 end end; end; finally DataTable.Post; end; SelectedRows.Clear; SelectedRows.CurrentRowSelected := True; ADataTable := TDACDSDataTable.Create(nil); try ADataTable.RemoteFetchEnabled := False; ADataTable.LogChanges := False; CopyDataTable(DataTable, ADataTable, True); // Duplicar el registro DataTable.Next; if not DataTable.EOF then DataTable.Insert else DataTable.Append; for i := 0 to DataTable.FieldCount - 1 do DataTable.Fields[i].Value := ADataTable.Fields[i].Value; DataTable.Post; finally ADataTable.Free; end; DataTable.Edit; Estado := AEstado; FECHACAMBIO := Now; { Todavía no sé el valor que va a tener asi que le asigno uno cualquiera para que en el cliente pueda diferenciar la fila nueva } NUMCON := 99; try if (VTAPROCESO <> 0) then begin if (VTAPROCESO > 0) then VTAPROCESO := 1 else VTAPROCESO := -1 end else begin if (VTAFINAL <> 0) then begin if (VTAFINAL > 0) then VTAFINAL := 1 else VTAFINAL := -1 end else begin if (VTATERM <> 0) then begin if (VTATERM > 0) then VTATERM := 1 else VTATERM := -1 end end; end; finally DataTable.Post; end; end; destructor TBizReferenciaGenericaDataTableRules.Destroy; begin FreeAndNil(FSelectedRows); inherited; end; function TBizReferenciaGenericaDataTableRules.GetEstado: TRefGenEstado; var aux : String; begin aux := GetESTADOValue; Result := rgPendiente; if aux = 'E' then Result := rgEnEspera else if aux = 'R' then Result := rgResuelto; end; function TBizReferenciaGenericaDataTableRules.GetSelectedRows: TSelectedRowList; begin Result := FSelectedRows; end; procedure TBizReferenciaGenericaDataTableRules.OnNewRecord( Sender: TDADataTable); begin inherited; ESTADO := rgPendiente; FECHACAMBIO := Now; end; procedure TBizReferenciaGenericaDataTableRules.Preview(const Centro, Vendedor: string; const Estado : TRefGenEstado; const AFiltro : String); var AEstado : String; begin case Estado of rgPendiente : AEstado := 'P'; rgEnEspera : AEstado := 'E'; rgResuelto : AEstado := 'R'; else AEstado := ''; end; dmReferenciaGenerica.Preview(Centro, Vendedor, AEstado, AFiltro); end; procedure TBizReferenciaGenericaDataTableRules.Print(const Centro, Vendedor: string; const Estado : TRefGenEstado; const AFiltro : String); var AEstado : String; begin case Estado of rgPendiente : AEstado := 'P'; rgEnEspera : AEstado := 'E'; rgResuelto : AEstado := 'R'; else AEstado := ''; end; dmReferenciaGenerica.Print(Centro, Vendedor, AEstado, AFiltro); end; procedure TBizReferenciaGenericaDataTableRules.SetEstado( const AValue: TRefGenEstado); begin case AValue of rgPendiente : SetESTADOValue('P'); rgEnEspera : SetESTADOValue('E'); rgResuelto : SetESTADOValue('R'); else SetESTADOValue('P'); end; end; procedure TBizReferenciaGenericaDataTableRules.Show; begin ShowEditor(IBizReferenciaGenerica, Self, etItem); end; procedure TBizReferenciaGenericaDataTableRules.VerEnEspera; begin with Self.DataTable do begin DisableControls; DisableEventHandlers; try Filtered := False; Filter := '(' + fld_ReferenciaGenericaESTADO + ' = ''E'')'; Filtered := True; finally EnableEventHandlers; EnableControls; end; end; end; procedure TBizReferenciaGenericaDataTableRules.VerPendientes; begin with Self.DataTable do begin DisableControls; DisableEventHandlers; try Filtered := False; Filter := '(' + fld_ReferenciaGenericaESTADO + ' = ''P'') OR ' + '(' + fld_ReferenciaGenericaESTADO + ' IS NULL)'; Filtered := True; finally EnableEventHandlers; EnableControls; end; end; end; procedure TBizReferenciaGenericaDataTableRules.VerResueltos; begin with Self.DataTable do begin DisableControls; DisableEventHandlers; try Filtered := False; Filter := '(' + fld_ReferenciaGenericaESTADO + ' = ''R'')'; Filtered := True; finally EnableEventHandlers; EnableControls; end; end; end; procedure TBizReferenciaGenericaDataTableRules.VerTodos; begin Self.DataTable.Filtered := False; end; initialization RegisterDataTableRules(BIZ_REFERENCIAGENERICA, TBizReferenciaGenericaDataTableRules); end.