{
===============================================================================
  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: 01-12-2002
  Versión actual: 1.0.0
  Fecha versión actual: 01-12-2002
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
===============================================================================
}

unit TablaVendedores;

interface

uses
  //Generales
  SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB,
  //Particulares

  //Aplicacion
  Framework, StrFunc, Entidades, Constantes, BaseDatos;


type
////////////////////////////////////////////////////////////////////////////////
//TDatosVendedor
////////////////////////////////////////////////////////////////////////////////
  TDatosVendedor = class(TPersistent)
  public
    Codigo : String;
    Nombre : String;
    NIFCIF : String;
    Calle : String;
    Numero : String;
    Piso : String;
    CodigoPostal : String;
    Poblacion : String;
    Provincia : String;
    Telefono1 : String;
    Telefono2 : String;
    Movil1 : String;
    Movil2 : String;
    Porcentaje : String;
    Observaciones : String;
  end;

////////////////////////////////////////////////////////////////////////////////
//TdmTablaVendedores
////////////////////////////////////////////////////////////////////////////////
  TdmTablaVendedores = class(TDataModule)
  private
    procedure IniciarSQL;
    procedure IniciarSQLGrids;
  public
    sqlInsertar : TStrings;
    sqlModificar : TStrings;
    sqlConsultar : TStrings;
    sqlEliminar : TStrings;
    sqlGrid : TStrings;
    sqlConsultarGridVendedoresComisiones : TStrings;

    //Metodos que llamaran a contador
    function DarNuevoCodigo : String;

    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;

    function ExisteCodigo(CodigoVendedor : String) : Boolean;
    function DarDatosVendedor(var Datos: TDatosVendedor): Boolean;

    procedure InicializarGridVendedores(var vGrid: TcxGridDBTableView);
    procedure InicializarGridVendedoresComisiones(var Grid: TcxGridDBTableView);
    procedure InicializarTablaVendedores(Tabla: TPTabla);
  end;

var
  dmTablaVendedores: TdmTablaVendedores;



implementation

{$R *.DFM}

////////////////////////////////////////////////////////////////////////////////
//TdmTablaVendedores
////////////////////////////////////////////////////////////////////////////////
constructor TdmTablaVendedores.Create (AOwner : TComponent);
begin
  inherited;
  sqlInsertar := TStringList.Create;
  sqlModificar := TStringList.Create;
  sqlConsultar := TStringList.Create;
  sqlEliminar := TStringList.Create;
  sqlGrid := TStringList.Create;
  sqlConsultarGridVendedoresComisiones := TStringList.Create;

  IniciarSQL;
  IniciarSQLGrids;
end;

destructor TdmTablaVendedores.Destroy;
begin
  sqlInsertar.Free;
  sqlModificar.Free;
  sqlConsultar.Free;
  sqlEliminar.Free;
  sqlGrid.Free;
  sqlConsultarGridVendedoresComisiones.Free;
  inherited;
end;

procedure TdmTablaVendedores.IniciarSQL;
begin
  with sqlInsertar do
  begin
    Add('INSERT INTO VENDEDORES (');
    Add('CODIGO, NOMBRE, NIFCIF, CALLE, NUMERO, PISO, CODIGOPOSTAL, ');
    Add('POBLACION, PROVINCIA, TELEFONO1, TELEFONO2, MOVIL1, MOVIL2, ');
    Add('PORCENTAJE, OBSERVACIONES, FECHAALTA, USUARIO) ');
    Add('values (:CODIGO, :NOMBRE, :NIFCIF, :CALLE, :NUMERO, :PISO, :CODIGOPOSTAL, ');
    Add(':POBLACION, :PROVINCIA, :TELEFONO1, :TELEFONO2, :MOVIL1, :MOVIL2, ');
    Add(':PORCENTAJE, :OBSERVACIONES, :FECHAALTA, :USUARIO)');
  end;

  with sqlModificar do
  begin
    Add('UPDATE VENDEDORES SET ');
    Add('NOMBRE = :NOMBRE, ');
    Add('NIFCIF = :NIFCIF, ');
    Add('CALLE = :CALLE, ');
    Add('NUMERO = :NUMERO, ');
    Add('PISO = :PISO, ');
    Add('CODIGOPOSTAL = :CODIGOPOSTAL, ');
    Add('POBLACION = :POBLACION, ');
    Add('PROVINCIA = :PROVINCIA, ');
    Add('TELEFONO1 = :TELEFONO1, ');
    Add('TELEFONO2 = :TELEFONO2, ');
    Add('MOVIL1 = :MOVIL1, ');
    Add('MOVIL2 = :MOVIL2, ');
    Add('PORCENTAJE = :PORCENTAJE, ');
    Add('OBSERVACIONES = :OBSERVACIONES ');
    Add('WHERE (CODIGO = :CODIGO)');
  end;

  with sqlEliminar do
  begin
    Add('delete from VENDEDORES ');
    Add('where CODIGO = :CODIGO');
  end;

  with sqlConsultar do
  begin
    Add('select * from VENDEDORES ');
    Add('where CODIGO = :CODIGO');
  end;

end;

function TdmTablaVendedores.darNuevoCodigo : String;
var
  oSQL : TIBSQL;
begin
  Result := '0';

  oSQL := TIBSQL.Create(Self);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select max(CODIGO) + 1 ');
    SQL.Add('from VENDEDORES ');
    try
      Prepare;
      ExecQuery;
      if not esCadenaVacia(Fields[0].AsString) then
         Result := Fields[0].AsString;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

function TdmTablaVendedores.ExisteCodigo(CodigoVendedor: String): Boolean;
var
  oSQL : TIBSQL;
  Codigo : String;
begin
  Result := False;

  if Length(Trim(CodigoVendedor)) = 0 then
    Exit;

  oSQL := TIBSQL.Create(Self);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select CODIGO ');
    SQL.Add('from VENDEDORES ');
    SQL.Add('where CODIGO = :CODIGO ');

  try
    ParamByName('CODIGO').AsString := CodigoVendedor;
    Prepare;
    ExecQuery;

    Codigo := FieldByName('CODIGO').AsString;
    Result := (CodigoVendedor = Codigo);
  finally
    Close;
    Transaction := NIL;
    Free;
  end;
  end;
end;

function TdmTablaVendedores.DarDatosVendedor(var Datos: TDatosVendedor): Boolean;
var
  oSQL : TIBSQL;
begin
  Result := False;

  if EsCadenaVacia(Datos.Codigo) then
    Exit;

  oSQL := TIBSQL.Create(Self);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select * from VENDEDORES ');
    SQL.Add('where CODIGO = :CODIGO');

    try
      ParamByName('CODIGO').AsString := Datos.Codigo;
      Prepare;
      ExecQuery;

      if (RecordCount > 0) then
      begin
        with Datos do
        begin
          NifCif := FieldByName('NIFCIF').AsString;
          Nombre := FieldByName('NOMBRE').AsString;
          Calle := FieldByName('CALLE').AsString;
          Numero := FieldByName('NUMERO').AsString;
          Piso := FieldByName('PISO').AsString;
          CodigoPostal := FieldByName('CODIGOPOSTAL').AsString;
          Poblacion := FieldByName('POBLACION').AsString;
          Provincia := FieldByName('PROVINCIA').AsString;
          Telefono1 := FieldByName('TELEFONO1').AsString;
          Telefono2 := FieldByName('TELEFONO2').AsString;
          Movil1 := FieldByName('MOVIL1').AsString;
          Movil2 := FieldByName('MOVIL2').AsString;
          Porcentaje := FieldByName('PORCENTAJE').AsString;
          Observaciones := FieldByName('OBSERVACIONES').AsString;
          Result := True;
        end;
      end;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

procedure TdmTablaVendedores.InicializarGridVendedores(var vGrid: TcxGridDBTableView);
var
  Columna : TcxGridDBColumn;
begin
  with vGrid do begin
    OptionsView.Footer := True;

    {Columna CODIGO}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'CODIGO';
    Columna.Caption := 'Código';
    Columna.Width := tamColCodigo;
    Columna.Options.Filtering := False;

    with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do
    try
      try
        BeginUpdate;
        Column := Columna;
        FieldName := Columna.DataBinding.FieldName;
        Format := 'Total: 0 vendedores';
        Kind := skCount;
      finally
        EndUpdate;
      end;
    except
      DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1);
    end;

    {Columna NIFCIF}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'NIFCIF';
    Columna.Caption := 'NIF/CIF';
    Columna.Width := tamColNIFCIF;
    Columna.Options.Filtering := False;
    {Columna NOMBRE}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'NOMBRE';
    Columna.Caption := 'Nombre';
    Columna.Width := tamColNombre;
    Columna.Options.Filtering := False;
    Columna.SortOrder := soAscending;
    {Columna TELEFONO 1}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'TELEFONO1';
    Columna.Caption := 'Teléfono 1';
    Columna.Width := tamColTelefono;
    Columna.Options.Filtering := False;
    {Columna MOVIL1}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'MOVIL1';
    Columna.Caption := 'Móvil 1';
    Columna.Width := tamColTelefono;
    Columna.Options.Filtering := False;  end;
end;

procedure TdmTablaVendedores.IniciarSQLGrids;
begin
  with sqlGrid do
  begin
    Add('select CODIGO, NOMBRE, NIFCIF, TELEFONO1, MOVIL1 ');
    Add('from VENDEDORES ');
    Add('order by NOMBRE');
  end;

  with sqlConsultarGridVendedoresComisiones do
  begin
    Add('select NOMBRE, PORCENTAJE, CAST ((0) as float) as IMPORTE');
    Add('from VENDEDORES ');
    Add('order by NOMBRE ');
  end;
end;

procedure TdmTablaVendedores.InicializarGridVendedoresComisiones(var Grid: TcxGridDBTableView);
var
  Columna : TcxGridDBColumn;
begin
  with Grid do begin
    {Columna NOMBRE}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'NOMBRE';
    Columna.Caption := 'Nombre del vendedor';
    Columna.Width := tamColNombre;
    Columna.Options.Filtering := False;
    Columna.Options.Editing := False;
    {Columna PORCENTAJE}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'PORCENTAJE';
    Columna.Caption := 'Porcentaje';
    Columna.Width := tamColPorcentaje;
    Columna.HeaderAlignmentHorz := taRightJustify;
    Columna.Options.Filtering := False;
    Columna.Options.Editing := False;
    {Columna IMPORTE}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'IMPORTE';
    Columna.Caption := 'Importe';
    Columna.HeaderAlignmentHorz := taRightJustify;
    Columna.Width := tamColImporte;
    Columna.Options.Filtering := False;
    Columna.Options.Editing := False;
  end;
end;

procedure TdmTablaVendedores.InicializarTablaVendedores(Tabla: TPTabla);
begin
  with Tabla^.Fields do
  begin
    if FindField('PORCENTAJE') <> NIL then
      with (FieldByName('PORCENTAJE') as TFloatField) do begin
        DisplayFormat := DISPLAY_DTO;
        EditFormat := EDIT_DTO;
      end;
  end;
  with Tabla^.Fields do
  begin
    if FindField('IMPORTE') <> NIL then
      with (FieldByName('IMPORTE') as TFloatField) do begin
        DisplayFormat := DISPLAY_EUROS2;
        EditFormat := EDIT_EUROS2;
      end;
  end;
end;

end.
