{ =============================================================================== Copyright (©) 2002. Rodax Software. =============================================================================== Los contenidos de este fichero son propiedad de Rodax Software titular del copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado, en su totalidad o en parte, con el permiso escrito de Rodax Software, o de acuerdo con los términos y condiciones establecidas en el acuerdo/contrato bajo el que se suministra. ----------------------------------------------------------------------------- Web: www.rodax-software.com =============================================================================== Fecha primera versión: 16-11-2002 Versión actual: 1.0.1 Fecha versión actual: 29-01-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 29-01-2004 Utilizar el trimestre por defecto. =============================================================================== } unit ComisionesVendedores; interface uses Windows, Db, StdCtrls, RdxMemo, RdxCampos, RdxTitulos, Forms, RdxPaneles, RdxBotones, Controls, ExtCtrls, RdxBarras, Classes, RdxFrameComisiones, RdxFrame, RXDBCtrl, RxMemDS, ComCtrls, cxDBEdit, cxMaskEdit, cxButtonEdit, Configuracion, cxControls, cxContainer, cxEdit, cxTextEdit, cxMemo, AdvPanel, cxSpinEdit, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDBData, cxGridLevel, cxClasses, cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid, cxDropDownEdit, cxCalendar, InformeComisionesVendedores, vistaPrevia, RdxRadioButton, TablaTrimestres, ActnList, Entidades, RdxEmpresaActiva, cxDataStorage; type TfrComisionesVendedores = class(TRdxFrameComisiones) brSimple: TRdxBarraInferior; dsFacturas: TDataSource; Titulo: TRdxPanelTituloOperacion; pnlDatos: TAdvPanel; pnlCuerpo: TPanel; pnlGridArticulos: TPanel; gridFacturas: TcxGrid; gridFacturasDBTableView1: TcxGridDBTableView; gridFacturasLevel1: TcxGridLevel; Panel1: TPanel; gridVendedores: TcxGrid; gridVendedoresDBTableView1: TcxGridDBTableView; gridVendedoresLevel1: TcxGridLevel; dsVendedores: TDataSource; Panel2: TPanel; bVistaPrevia: TRdxBoton; bImprimir: TRdxBoton; bCancelar: TRdxBoton; ImporteTotal: TLabel; Panel3: TPanel; FechaInicial: TcxDateEdit; eFechaFin: TLabel; FechaFinal: TcxDateEdit; Panel4: TPanel; Label1: TLabel; rbFechas: TRdxRadioButton; rbTrimestre: TRdxRadioButton; cbxTrimestres: TcxComboBox; pnlBarraGrid: TRdxPanel; bSeleccionar: TRdxBoton; bDeseleccionar: TRdxBoton; bAgregar: TRdxBoton; procedure actCancelarExecute(Sender: TObject); procedure bImprimirClick(Sender: TObject); procedure bCancelarClick(Sender: TObject); procedure bVistaPreviaClick(Sender: TObject); procedure FechaInicialPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure gridFacturasDBTableView1CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); procedure FechaFinalPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure cbxTrimestresPropertiesEditValueChanged(Sender: TObject); procedure rbTrimestreClick(Sender: TObject); procedure rbFechasClick(Sender: TObject); procedure bSeleccionarClick(Sender: TObject); procedure bDeseleccionarClick(Sender: TObject); procedure bAgregarClick(Sender: TObject); private FListaTrimestres : TListaTrimestres; FTotal : Double; FInformeComisionesVendedores : TdmInformeComisionesVendedores; FCodigoFactura: Variant; procedure SetTotal (Value : Double); property Total: Double read FTotal write SetTotal; procedure CalcularTotal; procedure CalcularComisiones; procedure setCodigoFactura(const Value: Variant); protected procedure SeleccionChange(Sender: TObject); procedure ActivarModoConsultar; override; procedure FreeContenido; override; procedure BuscarFacturas; override; public property CodigoFactura: Variant read FCodigoFactura write setCodigoFactura; constructor Create (AOwner : TComponent); override; destructor Destroy; override; published end; var frComisionesVendedores: TfrComisionesVendedores; implementation {$R *.DFM} uses TablaVendedores, Mensajes, IB, Colores, IBDatabase, Vendedores, Provincias, RdxFrameProvincias, Poblaciones, RdxFramePoblaciones, TablaProvincias, BaseDatos, IBCustomDataSet, Sysutils, Constantes, StrFunc, TablaPoblaciones, Excepciones, IBErrorCodes, Variants, NumFunc, Literales, TablaFacturasCliente, RdxFrameFacturasCliente, DateFunc, cxCheckBox, cxDateUtils, Graphics, TablaEmpresas, FacturasClientes; procedure TfrComisionesVendedores.ActivarModoConsultar; begin FechaIni := FechaInicial.Date; FechaFin := FechaFinal.Date; BuscarFacturas; Visible := True; FechaFinal.SetFocus; end; procedure TfrComisionesVendedores.BuscarFacturas; begin if Transaccion = NIL then Exit; try TablaFacturasMem.DisableControls; TablaFacturasMem.Close; TablaFacturas.Close; // Buscar la fila a tratar si es necesario if not EsCadenaVacia(FechaIni) and not EsCadenaVacia(FechaFin) then begin TablaFacturas.ParamByName('FECHAINI').AsDate := FechaIni; TablaFacturas.ParamByName('FECHAFIN').AsDate := FechaFin; end; TablaFacturas.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; TablaFacturas.Prepare; TablaFacturas.Open; TablaFacturasMem.Open; TablaFacturasMem.LoadFromDataSet(TablaFacturas, -1, lmCopy); dmTablaFacturasCliente.InicializarTablaFacturas(@TablaFacturasMem); CalcularTotal; CalcularComisiones; TablaFacturasMem.EnableControls; gridFacturas.ActiveView.DataController.GotoFirst; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; constructor TfrComisionesVendedores.Create (AOwner : TComponent); begin inherited Create(AOwner); Entidad := entComisiones; Total := 0; FInformeComisionesVendedores := TdmInformeComisionesVendedores.Create(Self); BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; TablaFacturas := TIBDataSet.Create(Self); TablaVendedores := TIBDataSet.Create(Self); with TablaFacturas do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaFacturasCliente.sqlConsultarGridFacturasComisiones); RefreshSQL.Assign(dmTablaFacturasCliente.sqlConsultarGridFacturasComisiones); end; with TablaVendedores do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaVendedores.sqlConsultarGridVendedoresComisiones); RefreshSQL.Assign(dmTablaVendedores.sqlConsultarGridVendedoresComisiones); Prepare; Open; end; TablaVendedoresMem := TRxMemoryData.Create(Self); dsVendedores.DataSet := TablaVendedoresMem; TablaVendedoresMem.CopyStructure(TablaVendedores); TablaVendedoresMem.LoadFromDataSet(TablaVendedores, -1, lmCopy); dmTablaVendedores.InicializarTablaVendedores(@TablaVendedoresMem); TablaVendedoresMem.Open; TablaFacturasMem := TRxMemoryData.Create(Self); dsFacturas.DataSet := TablaFacturasMem; TablaFacturasMem.CopyStructure(TablaFacturas); TablaFacturasMem.LoadFromDataSet(TablaFacturas, -1, lmCopy); TablaFacturasMem.Open; dmTablaFacturasCliente.InicializarGridFacturasComisiones(gridFacturasDBTableView1); with TcxCheckBoxProperties(gridFacturasDBTableView1.GetColumnByFieldName('SELECCION').Properties) do begin OnChange := SeleccionChange end; dmTablaVendedores.InicializarGridVendedoresComisiones(gridVendedoresDBTableView1); gridFacturas.ActiveView.DataController.GotoFirst; FListaTrimestres := TListaTrimestres.Create(tlcTriTodos); cbxTrimestres.ItemIndex := FListaTrimestres.cargarLista(cbxTrimestres.Properties.Items); FechaInicial.Date := DarDiaInicioMesDat; FechaFinal.Date := DarDiaFinalMesDat; bCancelar.Cancel := True; end; destructor TfrComisionesVendedores.Destroy; begin FInformeComisionesVendedores.Free; FInformeComisionesVendedores:= Nil; TablaFacturas.Close; TablaFacturas.UnPrepare; TablaFacturas.Free; TablaFacturasMem.Close; TablaFacturasMem.Free; TablaVendedores.Close; TablaVendedores.UnPrepare; TablaVendedores.Free; TablaVendedoresMem.Close; TablaVendedoresMem.Free; FListaTrimestres.Free; FListaTrimestres:= Nil; inherited; end; procedure TfrComisionesVendedores.actCancelarExecute(Sender: TObject); begin CloseFrame end; procedure TfrComisionesVendedores.SeleccionChange(Sender: TObject); begin if (TablaFacturasMem.FieldByName('SELECCION').AsString = '0') then Total := Total - TablaFacturasMem.FieldByName('BASEIMPONIBLE').AsFloat else Total := Total + TablaFacturasMem.FieldByName('BASEIMPONIBLE').AsFloat; CalcularComisiones; end; procedure TfrComisionesVendedores.calcularTotal; var ldTotal : Double; begin TablaFacturasMem.DisableControls; TablaFacturasMem.First; ldTotal := 0; while not TablaFacturasMem.Eof do begin ldTotal := ldTotal + TablaFacturasMem.FieldByName('BASEIMPONIBLE').AsFloat; TablaFacturasMem.Next; end; TablaFacturasMem.First; Total := ldTotal; TablaFacturasMem.EnableControls; end; procedure TfrComisionesVendedores.calcularComisiones; begin TablaVendedoresMem.DisableControls; TablaVendedoresMem.First; while not TablaVendedoresMem.Eof do begin TablaVendedoresMem.Edit; TablaVendedoresMem.FieldByName('IMPORTE').Asfloat := (FTotal * TablaVendedoresMem.FieldByName('PORCENTAJE').Asfloat) / 100; TablaVendedoresMem.Post; TablaVendedoresMem.Next; end; TablaVendedoresMem.First; TablaVendedoresMem.EnableControls; end; procedure TfrComisionesVendedores.bImprimirClick(Sender: TObject); begin FInformeComisionesVendedores.SetTablaComisionesVendedores(TablaVendedoresMem); FInformeComisionesVendedores.SetTablaFacturas(TablaFacturasMem); FInformeComisionesVendedores.FechaInicio := DateToStr(FechaIni); FInformeComisionesVendedores.FechaFin := DateToStr(FechaFin); FInformeComisionesVendedores.Preview := nil; FInformeComisionesVendedores.Imprimir; end; procedure TfrComisionesVendedores.bCancelarClick(Sender: TObject); begin CloseFrame; end; procedure TfrComisionesVendedores.SetTotal(Value: Double); begin FTotal := Value; ImporteTotal.Caption := 'Suma total de las facturas: ' + FormatFloat('#,##0.00 €', FTotal) + ' '; end; procedure TfrComisionesVendedores.bVistaPreviaClick(Sender: TObject); var FVistaPrevia : TfrVistaPrevia; begin FInformeComisionesVendedores.SetTablaComisionesVendedores(TablaVendedoresMem); FInformeComisionesVendedores.SetTablaFacturas(TablaFacturasMem); FInformeComisionesVendedores.FechaInicio := DateToStr(FechaIni); FInformeComisionesVendedores.FechaFin := DateToStr(FechaFin); FVistaPrevia := TfrVistaPrevia.Create(Self); FInformeComisionesVendedores.Preview := FVistaPrevia.Preview; FInformeComisionesVendedores.Previsualizar; CaptionModal := 'Informe de comisiones'; WidthModal := 800; HeightModal := 600; ModoModal := Consultar; EntidadModal := entComisiones; ContenidoModal := FVistaPrevia; end; procedure TfrComisionesVendedores.FechaInicialPropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); var ADate : TDateTime; begin try if DisplayValue > FechaFinal.Date then begin ErrorText := msgFechasMal; Error := True; Exit; end; TextToDateEx(DisplayValue, ADate); FechaIni := ADate; except Error := True; ErrorText := msgFechaNoValida; end; end; procedure TfrComisionesVendedores.gridFacturasDBTableView1CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); var IndiceCol : Integer; begin if not AViewInfo.Selected then begin IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName('CLASEFACTURA').Index; if UpperCase(AViewInfo.GridRecord.DisplayTexts[IndiceCol]) = CTE_CF_ABONO then ACanvas.Canvas.Font.Color := $000000CC; end; IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName('SELECCION').Index; if UpperCase(AViewInfo.GridRecord.DisplayTexts[IndiceCol]) = 'FALSE' then begin ACanvas.Canvas.Font.Style := [fsStrikeOut]; if not AViewInfo.Selected then ACanvas.Canvas.Font.Color := clGray; end; end; procedure TfrComisionesVendedores.FechaFinalPropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); var ADate : TDateTime; begin try if DisplayValue < FechaInicial.Date then begin ErrorText := msgFechasMal; Error := True; Exit; end; TextToDateEx(DisplayValue, ADate); FechaFin := ADate; except Error := True; ErrorText := msgFechaNoValida; end; end; procedure TfrComisionesVendedores.cbxTrimestresPropertiesEditValueChanged( Sender: TObject); var i : integer; FCodigoTrimestre : String; begin FCodigoTrimestre := FListaTrimestres.getCodItem(cbxTrimestres.ItemIndex); FechaInicial.Date := dmTablaTrimestres.darFechaIniTrimestre(FCodigoTrimestre); FechaFinal.Date := dmTablaTrimestres.darFechaFinTrimestre(FCodigoTrimestre); FechaIni := FechaInicial.Date; FechaFin := FechaFinal.Date; end; procedure TfrComisionesVendedores.rbTrimestreClick(Sender: TObject); begin cbxTrimestres.Enabled := True; FechaInicial.Enabled := False; FechaFinal.Enabled := False; cbxTrimestresPropertiesEditValueChanged(Sender); end; procedure TfrComisionesVendedores.rbFechasClick(Sender: TObject); begin cbxTrimestres.Enabled := False; FechaInicial.Enabled := True; FechaFinal.Enabled := True; end; procedure TfrComisionesVendedores.bSeleccionarClick(Sender: TObject); begin with TablaFacturasMem do begin DisableControls; First; while not EOF do begin if (FieldByName('SELECCION').AsString <> '1') then begin Edit; FieldByName('SELECCION').AsString := '1'; Post; end; Next; end; First; EnableControls; end; CalcularTotal; CalcularComisiones; end; procedure TfrComisionesVendedores.bDeseleccionarClick(Sender: TObject); begin with TablaFacturasMem do begin DisableControls; First; while not EOF do begin if (FieldByName('SELECCION').AsString <> '0') then begin Edit; FieldByName('SELECCION').AsString := '0'; Post; end; Next; end; First; EnableControls; end; Total := 0; CalcularComisiones; end; procedure TfrComisionesVendedores.FreeContenido; begin if (ContenidoModal is TRdxFrameFacturasCliente) then begin CodigoFactura := (ContenidoModal as TRdxFrameFacturasCliente).CodigoFactura; end; inherited FreeContenido; end; procedure TfrComisionesVendedores.bAgregarClick(Sender: TObject); begin ContenidoModal := TfrFacturasClientes.Create(Self); end; procedure TfrComisionesVendedores.setCodigoFactura(const Value: Variant); var Datos : TDatosFacturaCliente; begin if esCadenaVacia(Value) then Exit; FCodigoFactura := Value; Datos := TDatosFacturaCliente.Create; Datos.Codigo := FCodigoFactura; dmTablaFacturasCliente.DarDatosFactura(Datos); with TablaFacturasMem do begin Append; FieldByName('CODIGO').AsString := Datos.Codigo; FieldByName('SITUACION').AsString := Datos.Situacion; FieldByName('FECHAALTA').AsDateTime := Datos.FechaAlta ; FieldByName('FECHAFACTURA').AsDateTime := Datos.FechaFactura; FieldByName('CODIGOCLIENTE').AsString := Datos.CodigoCliente; FieldByName('NIFCIF').AsString := Datos.NIFCIF; FieldByName('NOMBRE').AsString := Datos.Nombre; FieldByName('BASEIMPONIBLE').AsFloat := Datos.BaseImponible; FieldByName('CLASEFACTURA').AsString := Datos.ClaseFactura; FieldByName('SELECCION').AsString := '1'; Post; Total := Total + TablaFacturasMem.FieldByName('BASEIMPONIBLE').AsFloat; CalcularComisiones; end; Datos.Free; end; end.