{
===============================================================================
  Copyright (©) 2005. 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: 08-06-2005
  Versión actual: 1.0.0
  Fecha versión actual: 08-06-2005
===============================================================================
  Modificaciones:

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

unit TablaTareas;

interface

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

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

  //Contador
  Contadores, RdxGestorContadores;

type
  TDatosTarea = class(TObjeto)
  public
    Codigo : String;
    FechaAlta : String;
    UsuarioAlta : String;
    Usuario : String;
    Tipo : String;
    FechaIni : String;
    HoraIni : String;
    FechaFin : String;
    HoraFin : String;
    Descripcion : String;
    Observaciones : String;
    FechaAviso : String;
    Completada : String;
    EntryId : String;
    Borrado : String;
    UltimoCambio : String;

    constructor Create; overload;
    constructor Create(CodigoObra, Codigo : String); overload;
    procedure ObtenerDatos; override;
    destructor Destroy; override;
  end;

type
  TdmTablaTareas = class(TDataModule)
  private
    procedure IniciarSQL;
  public
    sqlInsertar : TStrings;
    sqlModificar : TStrings;
    sqlConsultar : TStrings;
    sqlEliminar : TStrings;
    sqlGrid : TStrings;
    sqlTareasObrasGrid : TStrings;

    //Metodos que llamaran a contador
    function DarNuevoCodigo : String;
    function IncrementarCodigo: boolean;
    function InsertarContador : boolean;
    function ValidarCodigo(Codigo : String) : Boolean;
    function FormatearCodigo(Codigo : String) : String;

    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
    function insertarTareaPedidoObra(CodigoContrato, CodigoPedido, CodigoTarea: Variant): Boolean;
    function eliminarTareasPedidoObra(CodigoContrato: Variant): Boolean;
    procedure rellenarTareasFase(TablaMem : TRxMemoryData; Codigo: Variant);

    function insertarTareaInstaladorObra(CodigoContrato, Codigoinstalador, CodigoTarea: Variant): Boolean;
    function eliminarTareasInstaladorObra(CodigoContrato: Variant): Boolean;
    procedure InicializarGridTareasObras(var vGrid: TcxGridDBTableView);

//Temporal
    procedure InicializarGrid(var vGrid: TcxGridDBTableView);

  end;

var
  dmTablaTareas: TdmTablaTareas;

implementation

{$R *.DFM}

uses
  IBErrorCodes, IB, Literales, Mensajes, Excepciones, cxCheckBox, cxDBLookupComboBox;

constructor TdmTablaTareas.Create (AOwner : TComponent);
begin
  inherited;
  sqlInsertar := TStringList.Create;
  sqlModificar := TStringList.Create;
  sqlConsultar := TStringList.Create;
  sqlEliminar := TStringList.Create;
  sqlGrid := TStringList.Create;
  sqlTareasObrasGrid := TStringList.Create;

  IniciarSQL;
end;

destructor TdmTablaTareas.Destroy;
begin
  sqlInsertar.Free;
  sqlModificar.Free;
  sqlConsultar.Free;
  sqlEliminar.Free;
  sqlGrid.Free;
  sqlTareasObrasGrid.Free;

  inherited;
end;

procedure TdmTablaTareas.IniciarSQL;
begin
  with sqlInsertar do
  begin
    Add('INSERT INTO TAREAS (');
    Add('CODIGO, FECHAALTA, USUARIOALTA, USUARIO, TIPO, FECHAINI, HORAINI, ');
    Add('FECHAFIN, HORAFIN, DESCRIPCION, OBSERVACIONES, FECHAAVISO, COMPLETADA,');
    Add('ENTRYID, BORRADO, ULTIMOCAMBIO)');
    Add('VALUES (:CODIGO, :FECHAALTA, :USUARIOALTA, :USUARIO, :TIPO, :FECHAINI, :HORAINI, ');
    Add(':FECHAFIN, :HORAFIN, :DESCRIPCION, :OBSERVACIONES, :FECHAAVISO, :COMPLETADA,');
    Add(':ENTRYID, :BORRADO, :ULTIMOCAMBIO)');
  end;

  with sqlModificar do
  begin
    Add('UPDATE TAREAS SET');
    Add('FECHAINI = :FECHAINI,');
    Add('HORAINI = :HORAINI,');
    Add('FECHAFIN = :FECHAFIN,');
    Add('HORAFIN = :HORAFIN,');
    Add('DESCRIPCION = :DESCRIPCION,');
    Add('OBSERVACIONES = :OBSERVACIONES,');
    Add('FECHAAVISO = :FECHAAVISO,');
    Add('COMPLETADA = :COMPLETADA,');
    Add('ENTRYID = :ENTRYID,');
    Add('BORRADO = :BORRADO,');
    Add('ULTIMOCAMBIO = :ULTIMOCAMBIO');
    Add('WHERE (CODIGO = :CODIGO)');
  end;

  with sqlEliminar do
  begin
    Add('delete from TAREAS ');
    Add('WHERE (CODIGO = :CODIGO)');
  end;

  with sqlConsultar do
  begin
    Add('select CODIGO, FECHAALTA, USUARIOALTA, USUARIO, TIPO, FECHAINI, HORAINI, ');
    Add('FECHAFIN, HORAFIN, DESCRIPCION, OBSERVACIONES, FECHAAVISO, COMPLETADA,');
    Add('ENTRYID, BORRADO, ULTIMOCAMBIO');
    Add('from TAREAS, OBRASTAREAS');
    Add('WHERE (OBRASTAREAS.CODIGOTAREA = TAREAS.CODIGO)');
    Add('AND (CODIGOCONTRATO = :CODIGOCONTRATO)');
    Add('AND (CODIGOPEDIDO = :CODIGOPEDIDO)');
  end;

  with sqlGrid do
  begin
    Add('select CODIGOPEDIDO, CODIGO, FECHAALTA, USUARIOALTA, USUARIO, TIPO, FECHAINI, HORAINI, ');
    Add('FECHAFIN, HORAFIN, DESCRIPCION, OBSERVACIONES, FECHAAVISO, COMPLETADA,');
    Add('ENTRYID, BORRADO, ULTIMOCAMBIO');
    Add('from TAREAS, OBRASTAREAS');
    Add('WHERE (OBRASTAREAS.CODIGOTAREA = TAREAS.CODIGO)');
    Add('AND (CODIGOCONTRATO = :CODIGOCONTRATO)');
    Add('AND (CODIGOINSTALADOR is null)');
    Add('order by CODIGOPEDIDO, CODIGO');
  end;

  with sqlTareasObrasGrid do
  begin
    Add('select CODIGO, CODIGOINSTALADOR, FECHAALTA, USUARIOALTA, USUARIO, TIPO, FECHAINI, HORAINI, ');
    Add('FECHAFIN, HORAFIN, DESCRIPCION, OBSERVACIONES, FECHAAVISO, COMPLETADA,');
    Add('ENTRYID, BORRADO, ULTIMOCAMBIO');
    Add('from TAREAS, OBRASTAREAS');
    Add('WHERE (OBRASTAREAS.CODIGOTAREA = TAREAS.CODIGO)');
    Add('AND (CODIGOCONTRATO = :CODIGOCONTRATO)');
    Add('AND (CODIGOPEDIDO is null)');
    Add('order by CODIGOINSTALADOR, CODIGO');
  end;
end;


{ TDatosTarea }

constructor TDatosTarea.Create(CodigoObra, Codigo: String);
begin
  inherited Create;
  Codigo := CodigoObra;
  // Recuperar los datos
  ObtenerDatos;
end;

constructor TDatosTarea.Create;
begin
  inherited Create;
end;

destructor TDatosTarea.Destroy;
begin
  inherited;
end;

procedure TDatosTarea.ObtenerDatos;
var
  oSQL : TIBSQL;
begin
  if EsCadenaVacia(Codigo) then
     raise Exception.Create(msgObrFaltaObr);

  oSQL := TIBSQL.Create(NIL);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select CODIGO, FECHAALTA, USUARIOALTA, USUARIO, TIPO, FECHAINI,');
    SQL.Add('HORAINI, FECHAFIN, HORAFIN, DESCRIPCION, OBSERVACIONES, FECHAAVISO,');
    SQL.Add('COMPLETADA, ENTRYID, BORRADO, ULTIMOCAMBIO');
    SQL.Add('from TAREAS');
    SQL.Add('where CODIGO = :CODIGO');
    ParamByName('CODIGO').AsString := Codigo;

    try
      Prepare;
      ExecQuery;

      // Compruebo si se han recuperado datos
      if (RecordCount > 0) then
      begin
        Codigo := FieldByName('CODIGO').AsString;
        FechaAlta := FieldByName('FECHAALTA').AsString;
        UsuarioAlta := FieldByName('USUARIOALTA').AsString;
        Usuario := FieldByName('USUARIO').AsString;
        Tipo := FieldByName('TIPO').AsString;
        FechaIni := FieldByName('FECHAINI').AsString;
        HoraIni := FieldByName('HORAINI').AsString;
        FechaFin := FieldByName('FECHAFIN').AsString;
        HoraFin := FieldByName('HORAFIN').AsString;
        Descripcion := FieldByName('DESCRIPCION').AsString;
        Observaciones := FieldByName('OBSERVACIONES').AsString;
        FechaAviso := FieldByName('FECHAAVISO').AsString;
        Completada := FieldByName('COMPLETADA').AsString;
        EntryId := FieldByName('ENTRYID').AsString;
        Borrado := FieldByName('BORRADO').AsString;
        UltimoCambio := FieldByName('ULTIMOCAMBIO').AsString;
      end;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

function TdmTablaTareas.DarNuevoCodigo: String;
begin
  Result := GestorContadores.darNuevoCodigo(contTareas);
end;

function TdmTablaTareas.FormatearCodigo(Codigo: String): String;
begin
  Result := GestorContadores.formatearCodigo(contTareas, Codigo);
end;

function TdmTablaTareas.IncrementarCodigo: boolean;
begin
  Result := GestorContadores.IncrementarValor(contTareas);
end;

function TdmTablaTareas.InsertarContador: boolean;
begin
  Result := GestorContadores.InsertarContador(contTareas);
end;

function TdmTablaTareas.ValidarCodigo(Codigo: String): Boolean;
begin
  Result := GestorContadores.validarCodigo(contTareas, Codigo);
end;

procedure TdmTablaTareas.InicializarGrid(var vGrid: TcxGridDBTableView);
var
  Columna : TcxGridDBColumn;
begin
  with vGrid do begin
    ClearItems;
    OptionsView.Footer := True;

    {Columna CODIGOPEDIDO}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'CODIGOPEDIDO';
    Columna.Caption := 'Código ped.';
    Columna.Width := tamColCodigo;
    Columna.Options.Filtering := False;
    {Columna CODIGO}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'CODIGO';
    Columna.Caption := 'CODIGO';
    Columna.Width := tamColNombre;
    Columna.Options.Filtering := False;
    {Columna TIPO}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'TIPO';
    Columna.Caption := 'Tipo';
    Columna.Width := tamColTelefono;
    Columna.Options.Filtering := False;
    {Columna FECHAINI}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'FECHAINI';
    Columna.Caption := 'FechaIni';
    Columna.Width := tamColTelefono;
    Columna.Options.Filtering := False;
    {Columna FECHAFIN}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'FECHAFIN';
    Columna.Caption := 'FechaFin';
    Columna.Width := tamColTelefono;
    Columna.Options.Filtering := False;
    {Columna DESCRIPCION}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'DESCRIPCION';
    Columna.Caption := 'Descripcion';
    Columna.Width := tamColTelefono;
    Columna.Options.Filtering := False;
    {Columna COMPLETADA}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'COMPLETADA';
    Columna.Caption := 'Completada';
    Columna.Width := tamColTelefono;
    Columna.Options.Filtering := False;
  end;
end;

function TdmTablaTareas.insertarTareaPedidoObra(CodigoContrato, CodigoPedido, CodigoTarea: Variant): Boolean;
var
  oSQL : TIBSQL;
begin
  Result := False;

  if EsCadenaVacia(CodigoContrato) or EsCadenaVacia(CodigoPedido)
  or EsCadenaVacia(CodigoTarea) then
     Exit;

  oSQL := TIBSQL.Create(Self);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('insert into OBRASTAREAS ');
    SQL.Add('(CODIGOCONTRATO, CODIGOPEDIDO, CODIGOTAREA)');
    SQL.Add('values(:CODIGOCONTRATO, :CODIGOPEDIDO, :CODIGOTAREA)');
    ParamByName('CODIGOCONTRATO').AsString := CodigoContrato;
    ParamByName('CODIGOPEDIDO').AsString := CodigoPedido;
    ParamByName('CODIGOTAREA').AsString := CodigoTarea;
    try
      Prepare;
      ExecQuery;
      Result := True;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

function TdmTablaTareas.eliminarTareasPedidoObra(CodigoContrato: Variant): Boolean;
var
  oSQL : TIBSQL;
begin
  Result := False;

  if EsCadenaVacia(CodigoContrato) then
     Exit;

  oSQL := TIBSQL.Create(Self);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('delete from OBRASTAREAS ');
    SQL.Add('where CODIGOCONTRATO = :CODIGOCONTRATO');
    SQL.Add('and CODIGOPEDIDO is not null');
    ParamByName('CODIGOCONTRATO').AsString := CodigoContrato;
    try
      Prepare;
      ExecQuery;
      Result := True;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;


procedure TdmTablaTareas.rellenarTareasFase(TablaMem: TRxMemoryData; Codigo: Variant);
var
  oSQL : TIBSQL;
begin
  if (EsCadenaVacia(Codigo)) or (TablaMem = Nil) then
     Exit;

  oSQL := TIBSQL.Create(Self);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select CODIGO, NOMBRE, TIPO');
    SQL.Add('from TAREASFASES');
    try
      Prepare;
      ExecQuery;
      while not EOF do begin
      TablaMem.Append;
      TablaMem.FieldByName('CODIGOPEDIDO').AsInteger := Codigo;
      TablaMem.FieldByName('CODIGO').AsInteger := FieldByName('CODIGO').AsInteger;
      TablaMem.FieldByName('TIPO').AsString := FieldByName('TIPO').AsString;
      TablaMem.FieldByName('DESCRIPCION').AsString := FieldByName('NOMBRE').AsString;
      TablaMem.FieldByName('COMPLETADA').AsInteger := 0;      
      Next;
      end;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

procedure TdmTablaTareas.InicializarGridTareasObras(var vGrid: TcxGridDBTableView);
var
  Columna : TcxGridDBColumn;
begin
  with vGrid do begin
    OptionsView.Footer := False;

    {Columna ID}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'ID';
    Columna.Caption := 'CODIGO';
    Columna.Width := tamColCodigo;
    Columna.Options.Filtering := False;
    Columna.Visible := False;

    {Columna CODIGOCONTRATO}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'CODIGOCONTRATO';
    Columna.Caption := 'CODIGOCONTRATO';
    Columna.Width := tamColCodigo;
    Columna.Options.Filtering := False;
    Columna.Visible := False;

    {Columna TIPOTAREA}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'TIPOTAREA';
    Columna.Caption := 'Tipo';
    Columna.Width := tamColCodigo;
    Columna.Options.Filtering := False;
    Columna.Visible := False;

    {Columna COMPLETADA}
{    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'COMPLETADA';
    Columna.Caption := '     ';
    Columna.Width := 20;
    Columna.PropertiesClassName := 'TcxCheckBoxProperties';
    Columna.Options.Filtering := False;
    with TcxCheckBoxProperties(Columna.Properties) do begin
          DisplayUnchecked := 'False';
          ImmediatePost := True;
          ValueChecked := 1;
          ValueUnchecked := 0;
    end;}

    {Columna FECHAINI}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'START';
    Columna.Caption := 'Fecha';
    Columna.Width := tamColFecha;
    Columna.Options.Filtering := False;
    Columna.SortOrder := soAscending;

    {Columna CODIGOINSTALADOR}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'RESOURCEID';
    Columna.Caption := 'Instalador';
    Columna.Width := tamColNombre;
    Columna.PropertiesClassName := 'TcxLookupComboBoxProperties';
    Columna.Options.Filtering := False;
    with TcxLookupComboBoxProperties(Columna.Properties) do
    begin
      KeyFieldNames := 'CODIGO';
      ListColumns.Add.FieldName := 'NOMBRE';
      ListOptions.AnsiSort := True;
      ListOptions.ShowHeader := False;
    end;
    {Columna DESCRIPCION}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'CAPTION';
    Columna.Caption := 'Material entregado';
    Columna.Width := tamColNombre;
    Columna.Options.Filtering := False;

    {Columna OBSERVACIONES}
{    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'OBSERVACIONES';
    Columna.Caption := 'Observaciones';
    Columna.Width := tamColNombre;
    Columna.Options.Filtering := False;}
  end;
end;

function TdmTablaTareas.eliminarTareasInstaladorObra(CodigoContrato: Variant): Boolean;
var
  oSQL : TIBSQL;
begin
  Result := False;

  if EsCadenaVacia(CodigoContrato) then
     Exit;

  oSQL := TIBSQL.Create(Self);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('delete from OBRASTAREAS ');
    SQL.Add('where CODIGOCONTRATO = :CODIGOCONTRATO');
    SQL.Add('and CODIGOINSTALADOR is not null');
    ParamByName('CODIGOCONTRATO').AsString := CodigoContrato;
    try
      Prepare;
      ExecQuery;
      Result := True;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

function TdmTablaTareas.insertarTareaInstaladorObra(CodigoContrato, Codigoinstalador, CodigoTarea: Variant): Boolean;
var
  oSQL : TIBSQL;
begin
  Result := False;

  if EsCadenaVacia(CodigoContrato) or EsCadenaVacia(CodigoInstalador)
  or EsCadenaVacia(CodigoTarea) then
     Exit;

  oSQL := TIBSQL.Create(Self);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('insert into OBRASTAREAS ');
    SQL.Add('(CODIGOCONTRATO, CODIGOINSTALADOR, CODIGOTAREA)');
    SQL.Add('values(:CODIGOCONTRATO, :CODIGOINSTALADOR, :CODIGOTAREA)');
    ParamByName('CODIGOCONTRATO').AsString := CodigoContrato;
    ParamByName('CODIGOINSTALADOR').AsString := CodigoInstalador;
    ParamByName('CODIGOTAREA').AsString := CodigoTarea;
    try
      Prepare;
      ExecQuery;
      Result := True;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

end.
