unit TablaCitas;

interface

uses
  SysUtils, Classes;

type
  TPartidasObra = (poCocina, poEncimeras, poElectro, poVarios);
  TTipoCitas = (tcPersonal, tcMedicion, tcEntrega, tcMontaje, tcRemate,
                tcPedido, tcConfirmacion, tcRecepcion, tcAviso, tcEntregaCliente);

  TdmTablaCitas = class(TDataModule)
  private
    procedure IniciarSQL;
  public
    sqlInsertar : TStrings;
    sqlModificar : TStrings;
    sqlConsultar : TStrings;
    sqlConsultarRecepciones : TStrings;
    sqlEliminar : TStrings;
    sqlRefrescar : TStrings;

    function DarNuevoCodigo : Integer;

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

    //procedure InicializarTablaVisitas(Tabla: TPTabla);
  end;

  function DarTipoCita (Texto : String) : TTipoCitas;
  function esCitaFase (Texto : String) : Boolean;

const
  TextoTipoCita: array[0..9] of String = ('PERSONAL', 'MEDICION', 'ENTREGA',
    'MONTAJE', 'REMATE', 'PEDIDO', 'CONFIRMACION',
    'RECEPCION', 'AVISO', 'ENTREGACLIENTE');

  LiteralTipoCita: array[0..9] of String = ('Personal', 'Medición',
    'Entrega a instalador', 'Montaje', 'Remate', 'Pedido',
    'Confirmación de pedido', 'Recepción de pedido', 'Aviso transportista',
    'Entrega al cliente');

  TextoPartidasObra: array[0..3] of String = ('COCINA', 'ENCIMERAS',
    'ELECTRO', 'VARIOS');

  LiteralPartidasObra: array[0..3] of String = ('Cocina', 'Encimeras',
    'Electrodomésticos', 'Varios');

var
  dmTablaCitas: TdmTablaCitas;

implementation

{$R *.dfm}

uses
  Mensajes, Literales, BaseDatos, IBSQL;

function DarTipoCita (Texto : String) : TTipoCitas;
var
  i : Integer;
begin
  Result := tcPersonal;
  for I := Low(TextoTipoCita) to High(TextoTipoCita) do
  begin
    if UpperCase(TextoTipoCita[i]) = UpperCase(Texto) then
      Result := TTipoCitas(I);
  end;

  if Result = tcPersonal then
    for I := Low(LiteralTipoCita) to High(LiteralTipoCita) do
    begin
      if UpperCase(LiteralTipoCita[i]) = UpperCase(Texto) then
        Result := TTipoCitas(I);
    end;


{
  end;
  if Texto = 'Llegada' then
    Result := tcLlegada
  else if Texto = 'Medición' then
        Result := tcMedicion
  else if Texto = 'Entrega' then
        Result := tcEntrega
  else if Texto = 'Montaje' then
        Result := tcMontaje
  else if Texto = 'Remate' then
        Result := tcRemate
  else Result := tcPersonal;}
end;

function esCitaFase (Texto : String) : Boolean;
var
  I: TTipoCitas;
begin
  Result := False;
  for I:=tcPedido to tcEntregaCliente do
  if (TextoTipoCita[Ord(I)] = Texto) then
     Result := True;
end;


{ TdmTablaCitas }

constructor TdmTablaCitas.Create(AOwner: TComponent);
begin
  inherited;
  sqlInsertar := TStringList.Create;
  sqlModificar := TStringList.Create;
  sqlConsultar := TStringList.Create;
  sqlConsultarRecepciones := TStringList.Create;
  sqlEliminar := TStringList.Create;
  sqlRefrescar := TStringList.Create;
  IniciarSQL;
end;

function TdmTablaCitas.DarNuevoCodigo: Integer;
var
  oSQL : TIBSQL;
begin
  Result := -1;

  oSQL := TIBSQL.Create(Self);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select max(ID)+1 ');
    SQL.Add('from CITAS ');
    try
      Prepare;
      ExecQuery;
      Result := Fields[0].AsInteger;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

destructor TdmTablaCitas.Destroy;
begin
  sqlInsertar.Free;
  sqlModificar.Free;
  sqlConsultar.Free;
  sqlConsultarRecepciones.Free;
  sqlEliminar.Free;
  sqlRefrescar.Free;
  inherited;
end;

{procedure TdmTablaCitas.InicializarTablaVisitas(Tabla: TPTabla);
begin
  //
end;}

procedure TdmTablaCitas.IniciarSQL;
begin
  with sqlInsertar do
  begin
    Add('INSERT INTO CITAS ( ');
    Add('ID, PARENTID, "TYPE", START, ');
    Add('FINISH, OPTIONS, CAPTION,  ');
    Add('RECURRENCEINDEX, RESOURCEID, LOCATION, ');
    Add('"MESSAGE", REMINDER, STATE, LABELCOLOR, ');
    Add('CODIGOCONTRATO, TIPOTAREA, NOMBRECLIENTE, ');
    Add('PARTIDA, COMPLETADA, NOMBREPROVEEDOR) ');
    Add('VALUES (:ID, :PARENTID, :"TYPE", ');
    Add(':START, :FINISH, :OPTIONS, ');
    Add(':CAPTION, :RECURRENCEINDEX, ');
    Add(':RESOURCEID, :LOCATION, :"MESSAGE", ');
    Add(':REMINDER, :STATE, :LABELCOLOR,');
    Add(':CODIGOCONTRATO, :TIPOTAREA, :NOMBRECLIENTE, ');
    Add(':PARTIDA, :COMPLETADA, :NOMBREPROVEEDOR) ');
  end;

  with sqlModificar do
  begin
    Add('UPDATE CITAS');
    Add('SET PARENTID = :PARENTID,');
    Add('"TYPE" = :"TYPE",');
    Add('START = :START,');
    Add('FINISH = :FINISH,');
    Add('OPTIONS = :OPTIONS,');
    Add('CAPTION = :CAPTION,');
    Add('RECURRENCEINDEX = :RECURRENCEINDEX,');
    Add('RESOURCEID = :RESOURCEID,');
    Add('LOCATION = :LOCATION,');
    Add('"MESSAGE" = :"MESSAGE",');
    Add('REMINDER = :REMINDER,');
    Add('STATE = :STATE,');
    Add('LABELCOLOR = :LABELCOLOR,');
    Add('CODIGOCONTRATO = :CODIGOCONTRATO,');
    Add('TIPOTAREA = :TIPOTAREA, ');
    Add('NOMBRECLIENTE = :NOMBRECLIENTE, ');
    Add('PARTIDA = :PARTIDA, ');
    Add('COMPLETADA = :COMPLETADA, ');
    Add('NOMBREPROVEEDOR = :NOMBREPROVEEDOR ');
    Add('WHERE (ID = :ID)');
  end;

  with sqlEliminar do
  begin
    Add('delete from CITAS ');
    Add('WHERE (ID = :ID)');
  end;

  with sqlRefrescar do
  begin
    Add('select * from CITAS ');
    Add('WHERE (ID = :ID)');
  end;

  with sqlConsultar do
  begin
    Add('SELECT * FROM CITAS');
  end;

  with sqlConsultarRecepciones do
  begin
    Add('SELECT CITAS.ID, CITAS.PARENTID, CITAS."TYPE", CITAS.START, ');
    Add('CITAS.FINISH, CITAS.OPTIONS, CITAS.CAPTION, CITAS.RECURRENCEINDEX, ');
    Add('CITAS.RESOURCEID, CITAS.LOCATION, CITAS."MESSAGE", CITAS.REMINDER, ');
    Add('CITAS.STATE, CITAS.LABELCOLOR, CITAS.CODIGOCONTRATO, CITAS.TIPOTAREA, ');
    Add('CITAS.NOMBRECLIENTE, CITAS.PARTIDA, CITAS.COMPLETADA, ');
    Add('CITAS.NOMBREPROVEEDOR, OBRAS.CODIGODOCUMENTO ');
    Add('FROM CITAS LEFT JOIN OBRAS ON (OBRAS.CODIGOCONTRATO = CITAS.CODIGOCONTRATO) ');
  end;
end;

end.
