unit UError;

interface
uses dbclient,dialogs,strutils,sysutils,db,udmgs;

procedure MostrarError(Error:string;aux:string;tipo:integer);
function TipoError(mensaje:string):integer;
// variable para indicar que el error se ha producido pq el registro ha sido
// cambiado por otro usuario.
var ErrorNotFound:boolean;
implementation
const
  eKeyViol = 9729;
  eRequiredFieldMissing = 9732;
  eForeignKey = 9733;
  eDetailsExist = 9734;
  eRecordNotFound = 9735;

function TipoError(mensaje:string):integer;
begin
    if (pos('23505',mensaje)>0) or (pos('SQL0803N',mensaje)>0) or (pos('Linkfields',mensaje)>0)
       or (pos('[IBM][CLI Driver][DB2/NT]',mensaje)>0)
       OR (pos('CP',mensaje)>0) then
    begin
        result:=ekeyviol;
        exit;
    end;
    if pos('23001',mensaje)>0 then
    begin
        result:=eDetailsExist;
        exit;
    end;
    if (pos('23502',mensaje)>0) or (pos('must have a value',mensaje)>0) or
     (pos('Field value required',mensaje)>0) then
    begin
        result:=eRequiredFieldMissing;
        exit;
    end;
    if (pos('23503',mensaje)>0) OR  (POS('75002',mensaje)>0) OR
       (POS('FK',mensaje)>0) then
    begin
        result:=eForeignKey;
        exit;
    end;
    if (pos('Record not found',mensaje)>0) then
    begin
        result:=eRecordNotFound;
        exit;
    end;
    result:=0;
end;

procedure MostrarError(Error:string;aux:string;tipo:integer);
//la variable aux la utilizo para hacer la funcion mas general
begin
       IF POS('".',Error) <> 0 THEN
       BEGIN
          MessageDlg(copy(Error,POS('"',Error)+1,(pos('".',Error)-pos('"',Error))), mtWarning,[mbOK], 0);
          Abort;
       end;
      case TipoError(Error) of
            eForeignKey:
             case tipo of
              1: begin
                 MessageDlg('No se puede borrar(modificar) la familia. Hay articulos que tienen esta familia.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              2: begin   // articulos
                 if dmgs.tipoerror  then
                   MessageDlg('No se puede borrar(modificar) porque este articulo tiene referencias en otras tablas (EAN).', mtWarning,[mbOK], 0)
                 else
                   MessageDlg('Compruebe que el color y la familia son correctos. O que el proveedor y el código para el articulo del proveedor sea correcto.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              3: begin // colores
                 MessageDlg('No se puede borrar(modificar) el color. Hay articulos que tienen este color.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              5: begin // series
                 if dmgs.tipoerror  then
                   MessageDlg('No se puede borrar(modificar) la serie. Otras tablas hacen referencia a ella.', mtWarning,[mbOK], 0)
                 else
                   MessageDlg('Compruebe que los datos de la empresa son correctos.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              6: begin // clientes
                 MessageDlg('Este cliente no se puede borrar(modificar) porque se accede desde otras tablas.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              8: begin // EMPRESA
                 MessageDlg('Esta empresa no se puede borrar(modificar) porque se accede desde otras tablas.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              9: begin // PRESUPUESTO
                 MessageDlg('Compruebe que los datos del cliente son correctos', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              10: begin // linpresupuesto
                 MessageDlg('Compruebe que el articulo es correcto.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              11: begin // entrada
                 MessageDlg('Compruebe que los datos del proveedor son correctos.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              12: begin // lineaentrada
                 MessageDlg('Compruebe que el articulo es correcto.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              13: begin // albaran
                 MessageDlg('Compruebe que los datos del cliente, forma de pago y el id de serie son correctos.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              14: begin // lineaalbaran
                 MessageDlg('Compruebe que el articulo es correcto.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              15: begin // FACTURA
                 MessageDlg('Compruebe que los datos del cliente y el id de serie son correctos.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              16: begin // lineaFACTURA
                 MessageDlg('Compruebe que el articulo es correcto.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              17: begin // FORMA DE PAGO
                 MessageDlg('No se puede borrar(modificar) el color. Hay otras tablas que referencian esta forma de pago.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              18: begin // COBRO
                 MessageDlg('Compruebe que los datos del cliente es correcto.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              19: begin // LINEACOBRO
                 MessageDlg('Compruebe que la forma de pago es correcta y que hora tenga un valor.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              20: begin   // tarifas
                   MessageDlg('Compruebe que el id_proveedor y el id_articulo son correctos.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              23: begin // lineaentrada
                 MessageDlg('Compruebe que el articulo es correcto.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              25: begin // PEDIDOSPENDIENTES
                 MessageDlg('Compruebe que articulo,proveedor, color o cliente son correctos.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              26: begin // TICKET
                 MessageDlg('Compruebe que en las opciones de empresa este el cliente y la forma de pago por defecto.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              27: begin // LINEATICKET
                 MessageDlg('Compruebe que el articulo es correcto.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              28: begin // opcionesnumericas
                 if dmgs.tipoerror  then
                   MessageDlg('No se puede borrar(modificar) la Opcion. Otras tablas hacen referencia a ella.', mtWarning,[mbOK], 0)
                 else
                   MessageDlg('Compruebe que los datos de la empresa son correctos.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              29: begin // opcionesnumericas
                 if dmgs.tipoerror  then
                   MessageDlg('No se puede borrar(modificar) la Opcion. Otras tablas hacen referencia a ella.', mtWarning,[mbOK], 0)
                 else
                   MessageDlg('Compruebe que todos los datos de los albaranes y factura son correctos.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              30: begin // ARQUEO
                 MessageDlg('Este arqueo no se puede borrar(modificar) porque se accede desde otras tablas.', mtWarning,[mbOK], 0);
                 Abort;
                 end;
              31: begin   // articulos
                 MessageDlg('No se puede borrar(modificar) porque este tipo de iva tiene referencias en otras tablas.', mtWarning,[mbOK], 0);
                 Abort;
                 end
              else
              begin
                  MessageDlg(copy(Error,POS('"',Error)+1,(pos('".',Error)-pos('"',Error))), mtWarning,[mbOK], 0);
                  Abort;
              end;
             end;
            eRequiredFieldMissing:
            case tipo of
              1:begin // FAMILIAS
                  MessageDlg('Debe introducir el identificador de la familia.', mtWarning, [mbOK], 0);
                  Abort;
                 end;
              2:begin // articulos
                  MessageDlg('Debe introducir el codigo de la familia.', mtWarning, [mbOK], 0);
                  Abort;
                 end;
              3:begin // colores
                  MessageDlg('Debe introducir el codigo del Color.', mtWarning, [mbOK], 0);
                  Abort;
                 end;
              4:begin // EAN
                  MessageDlg('Debe introducir el códgio ean.', mtWarning, [mbOK], 0);
                  Abort;
                 end;
              5:begin // series
                  MessageDlg('Debe introducir el codigo de la Serie.', mtWarning, [mbOK], 0);
                  Abort;
                 end;
              6:begin // CLIENTE
                  MessageDlg('Debe introducir el identificador de cliente.', mtWarning, [mbOK], 0);
                  Abort;
                end;
              7:begin // PROVEEDOR_ACREEDOR
                  MessageDlg('Debe introducir el identificador de proveedor.', mtWarning, [mbOK], 0);
                  Abort;
                end;
              8:begin // empresa
                  MessageDlg('Debe introducir el identificador de la empresa.', mtWarning, [mbOK], 0);
                  Abort;
                end;
               9:begin // presupuesto
                  MessageDlg('Debe introducir la empresa,numero de presupuesto.', mtWarning, [mbOK], 0);
                  Abort;
                end;
               10:begin // linpresupuesto
                  MessageDlg('Debe introducir el nº DE LINEA', mtWarning, [mbOK], 0);
                  Abort;
                end;
               11:begin // entrada
                  MessageDlg('Debe introducir el número de entrada.', mtWarning, [mbOK], 0);
                  Abort;
                end;
               12:begin // lineaentrada
                  MessageDlg('Debe introducir el articulo.', mtWarning, [mbOK], 0);
                  Abort;
                end;
               13:begin // albaran
                  MessageDlg('Debe introducir el número de albaran, empresa, año e Id de serie.', mtWarning, [mbOK], 0);
                  Abort;
                end;
               14:begin // lineaalbaran
                  MessageDlg('Debe introducir el articulo.', mtWarning, [mbOK], 0);
                  Abort;
                end;
               15:begin // FACTURA
                  MessageDlg('Debe introducir el número de FACTURA, empresa, año e Id de serie.', mtWarning, [mbOK], 0);
                  Abort;
                end;
               16:begin // lineaFACTURA
                  MessageDlg('Debe introducir el articulo.', mtWarning, [mbOK], 0);
                  Abort;
                end;
               17:begin // forma de pago
                  MessageDlg('Debe introducir el codigo de la forma de pago.', mtWarning, [mbOK], 0);
                  Abort;
                 end;
               18:begin // cobro
                  MessageDlg('Debe introducir el número de cobro y el año.', mtWarning, [mbOK], 0);
                  Abort;
                end;
               19:begin // lineacobro
                  MessageDlg('Debe introducir el número de línea y que hora tenga un valor.', mtWarning, [mbOK], 0);
                  Abort;
                end;
              20:begin // tarifas
                  MessageDlg('Debe introducir el proveedor y el codigo del artículo.', mtWarning, [mbOK], 0);
                  Abort;
                 end;
              21:begin // ALMACEN
                  MessageDlg('Debe introducir el artículo.', mtWarning, [mbOK], 0);
                  Abort;
                 end;
               22:begin // SALIDA
                  MessageDlg('Debe introducir el número de salida.', mtWarning, [mbOK], 0);
                  Abort;
                end;
               23:begin // LINEASALIDA
                  MessageDlg('Debe introducir el número de línea.', mtWarning, [mbOK], 0);
                  Abort;
                end;
              24:begin // AVISO
                  MessageDlg('Debe introducir el identificador del aviso.', mtWarning, [mbOK], 0);
                  Abort;
                end;
//           25: CDSQ_PEDIDOSPENDIENTES
               26:begin // ticket
                  MessageDlg('Debe introducir el número de ticket, anyo, serie, empresa y identifcador de cliente.', mtWarning, [mbOK], 0);
                  Abort;
                end;
               27:begin // lineaticket
                  MessageDlg('Debe introducir el articulo.', mtWarning, [mbOK], 0);
                  Abort;
                end;
               28:begin // opcionesnumericas
                  MessageDlg('Debe introducir el identificador de empresa y el año.', mtWarning, [mbOK], 0);
                  Abort;
                 end;
               29:begin // opcionesnumericas
                  MessageDlg('Debe introducir todos los datos del albaran y de la factura.', mtWarning, [mbOK], 0);
                  Abort;
                 end;
              30:begin // arqueo
                  MessageDlg('Debe introducir la fecha y la hora.', mtWarning, [mbOK], 0);
                  Abort;
                end;
              31:begin // tipos de iva
                  MessageDlg('Debe introducir el tipo de iva.', mtWarning, [mbOK], 0);
                  Abort;
                 end
              else
              begin
//                 MessageDlg('ERROR AL GRABAR '+aux+': '+Error, mtWarning,[mbOK], 0);
//                 Abort;
                  MessageDlg(copy(Error,POS('"',Error)+1,(pos('".',Error)-pos('"',Error))), mtWarning,[mbOK], 0);
                  Abort;
              end;
            end;
            eKeyViol:
            case tipo of
            1:begin // familias
                MessageDlg('Ya existe una familia con ese Código.', mtWarning,[mbOK], 0);
                Abort;
               end;
            2:begin // articulos
                MessageDlg('Ya existe un artículo con ese codigo.', mtWarning,[mbOK], 0);
                Abort;
               end;
            3:begin // colores
                MessageDlg('Ya existe un color con ese codigo.', mtWarning,[mbOK], 0);
                Abort;
               end;
            4:begin // ean
                MessageDlg('Ya existe un código ean para este artículo.', mtWarning,[mbOK], 0);
                Abort;
               end;
            5:begin // series
                MessageDlg('Ya existe una serie con ese codigo.', mtWarning,[mbOK], 0);
                Abort;
               end;
            6:begin // cliente
                MessageDlg('Ya existe un Cliente con ese identificador.', mtWarning,[mbOK], 0);
                Abort;
               end;
           7:begin // PROVEEDOR ACREEDOR
                MessageDlg('Ya existe un Proveedor con ese identificador.', mtWarning,[mbOK], 0);
                Abort;
               end;
            8:begin // empresa
                MessageDlg('Ya existe una Empresa con ese identificador.', mtWarning,[mbOK], 0);
                Abort;
               end;
            9:begin // presupuesto
                MessageDlg('Ya existe un Presupuesto con ese código.', mtWarning,[mbOK], 0);
                Abort;
               end;
           10:begin // linpresupuesto
                MessageDlg('Ya existe una linea de presupuesto con ese artículo.', mtWarning,[mbOK], 0);
                Abort;
               end;
           11:begin // entrada
                MessageDlg('Ya existe una entrada con ese código.', mtWarning,[mbOK], 0);
                Abort;
               end;
           12:begin // lineaentrada
                MessageDlg('Ya existe una linea de entrada con ese artículo.', mtWarning,[mbOK], 0);
                Abort;
               end;
           13:begin // albaran
                MessageDlg('Ya existe un albaran con ese código.', mtWarning,[mbOK], 0);
                Abort;
               end;
           14:begin // lineaalbaran
                MessageDlg('Ya existe una linea de albaran con ese artículo.', mtWarning,[mbOK], 0);
                Abort;
               end;
           15:begin // FACTURA
                MessageDlg('Ya existe un FACTURA con ese código.', mtWarning,[mbOK], 0);
                Abort;
               end;
           16:begin // lineaFACTURA
                MessageDlg('Ya existe una linea de FACTURA con ese artículo.', mtWarning,[mbOK], 0);
                Abort;
               end;
            17:begin // forma de pago
                MessageDlg('Ya existe una forma de pago con ese codigo.', mtWarning,[mbOK], 0);
                Abort;
               end;
           18:begin // cobro
                MessageDlg('Ya existe un cobro con ese código.', mtWarning,[mbOK], 0);
                Abort;
               end;
           19:begin // lineacobro
                MessageDlg('Ya existe una linea de cobro con ese número y que hora tenga un valor.', mtWarning,[mbOK], 0);
                Abort;
               end;
            20:begin // tarifas
                MessageDlg('Ya existe un artículo con ese codigo para este proveedor.', mtWarning,[mbOK], 0);
                Abort;
               end;
            21:begin // ALMACEN
                MessageDlg('Ya existe un artículo con ese codigo para esta empresa en el almacen.', mtWarning,[mbOK], 0);
                Abort;
               end;
           22:begin // salida
                MessageDlg('Ya existe una salida con ese código.', mtWarning,[mbOK], 0);
                Abort;
               end;
           23:begin // lineasalida
                MessageDlg('Ya existe una linea de salida con ese número.', mtWarning,[mbOK], 0);
                Abort;
               end;
           24:begin // aviso
                MessageDlg('Ya existe un Aviso con ese identificador.', mtWarning,[mbOK], 0);
                Abort;
               end;
//           25: CDSQ_PEDIDOSPENDIENTES
           26:begin // ticket
                MessageDlg('Ya existe un ticket con ese código.', mtWarning,[mbOK], 0);
                Abort;
               end;
           27:begin // lineaticket
                MessageDlg('Ya existe una linea de ticket con ese artículo.', mtWarning,[mbOK], 0);
                Abort;
               end;
            28:begin // opcionesnumericas
                MessageDlg('Ya esta definido este año y esta empresa.', mtWarning,[mbOK], 0);
                Abort;
               end;
            29:begin // opcionesnumericas
                MessageDlg('Ya hay una factura con este albaran. O la factura ya esta definida.', mtWarning,[mbOK], 0);
                Abort;
               end;
            30:begin // arqueo
                MessageDlg('Ya existe un arqueo con esa fecha y hora.', mtWarning,[mbOK], 0);
                Abort;
               end;
            31:begin // articulos
                MessageDlg('Ya existe un tipo de iva con ese codigo.', mtWarning,[mbOK], 0);
                Abort;
               end
             else
              begin
                 MessageDlg(copy(Error,POS('"',Error)+1,(pos('".',Error)-pos('"',Error))), mtWarning,[mbOK], 0);
                 Abort;
//                MessageDlg('ERROR AL GRABAR '+aux+': '+Error, mtWarning,[mbOK], 0);
//                Abort;
              end;
             end;
            eRecordNotFound:
                   begin
                      case tipo of
                         1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33:begin
                              MessageDlg('El registro ha sido modificado por otro usuario. Vuelva a consultarlo para mostrar los nuevos valores.', mtWarning,[mbOK], 0);
                              ErrorNotFound:=true;
                              Abort;
                            end
                            else
                             begin
                                MessageDlg(copy(Error,POS('"',Error)+1,(pos('".',Error)-pos('"',Error))), mtWarning,[mbOK], 0);
                                Abort;
                 //              MessageDlg('ERROR AL GRABAR '+aux+': '+Error, mtWarning,[mbOK], 0);
                 //              Abort;
                             end;
                      end;
                  end
            else
            begin
                MessageDlg('ERROR AL GRABAR '+aux+': '+Error, mtWarning,[mbOK], 0);
                Abort;
            end;
       end;
end;




initialization
 ErrorNotFound := false;
end.
