create or replace package trascaja is

   FUNCTION ultimodia (pcia char, pcaja char, palias varchar2)  RETURN varchar2;

   PROCEDURE CopiaOps(pcia in char, pcaja in char, pcajalocal in char, pfecha in date, palias in varchar2);

   PROCEDURE CopiaMovsCaja(pcia in char, pcaja in char, pcajalocal in char, pfecha in char, palias in varchar2);

   PROCEDURE CopiaMovsVenta(pcia in char, pcaja in char, pcajalocal in char, pfecha in char, palias in varchar2);

end;
/

create or replace package body trascaja is

   FUNCTION ultimodia (pcia char, pcaja char, palias varchar2)  RETURN varchar2 IS
      ultimodia date;
      mensaje varchar2(128);
   BEGIN
      EXECUTE IMMEDIATE
           'Select max(dia) from operacioncaja@'||palias||' '||
           'where cia=:xcia and (caja=:xcaja or :xcaja is null)'
         into ultimodia
         using pcia, pcaja, pcaja;

      if ultimodia is not null then
         mensaje:='Ultimo dia procesado Para '||palias||' '||to_char(ultimodia,'dd-mm-yyyy');
      else
         mensaje:='No hay datos';
      end if;

      return mensaje;
  
   END UltimoDia;

   PROCEDURE CopiaOps(pcia in char, pcaja in char, pcajalocal in char, pfecha in date, palias in varchar2) IS
   BEGIN
      EXECUTE IMMEDIATE
         'Insert into operacioncaja '||
         '(CIA, CAJA, DIA, CAJERO, ANO_FISCAL, PER_PROCESO, TIPO, SALDOINICIO,'||
         ' BALANCECAJA, SOBRACOMPENSA, ESTADO) '||
         'select cia, nvl(:xcajalocal,caja), dia, cajero, ano_fiscal, per_proceso, tipo, saldoinicio,'||
         '   balancecaja, sobracompensa, estado '||
         'from operacioncaja@'||palias||' r '||
         'where r.cia=:xcia and r.caja=:xcaja and trunc(r.dia)=:xfecha and r.estado=''C'''
      USING pcajalocal, pcia, pcaja, pfecha;
   EXCEPTION
      WHEN OTHERS THEN
         raise_application_error(-20004, 'ERROR <COPIAOPS>: '||SQLERRM);
   END CopiaOps;

   PROCEDURE CopiaMovsCaja(pcia in char, pcaja in char, pcajalocal in char, pfecha in char, palias in varchar2) IS
   BEGIN
      EXECUTE IMMEDIATE
         'Insert into movimientocaja '||
         '(CIA, CAJA, DIA, CONCEPTO, REFERENCIA, ANO_FISCAL, PER_PROCESO, OBSERVACION, MONTO,'||
         ' NUM_ASIENTO, TIPOCAMBIO, CAMBIOBASE, DOCUMENTO) '||
         'select cia, nvl(:xcajalocal,caja), dia, concepto, referencia, ano_fiscal, per_proceso, observacion, monto,'||
         '  num_asiento, tipocambio, cambiobase, documento '||
         'from movimientocaja@'||palias||' r '||
         'where r.cia=:xcia and r.caja=:xcaja and trunc(r.dia)=:xfecha'
      USING pcajalocal, pcia, pcaja, pfecha;
   EXCEPTION
      WHEN OTHERS THEN
         raise_application_error(-20004, 'ERROR <COPIAMOVSCAJA>: '||SQLERRM);
   END CopiaMovsCaja;

   PROCEDURE CopiaMovsVenta(pcia in char, pcaja in char, pcajalocal in char, pfecha in char, palias in varchar2) IS
   BEGIN
      EXECUTE IMMEDIATE
         'Insert into movimientoventa '||
         '(CIA, CAJA, DIA, DEPARTAMENTO, CONCEPTO, ANO_FISCAL, PER_PROCESO, MONTO, IMPUESTO,'||
         ' NUM_ASIENTO, COSTO, TIPOCAMBIO,CAMBIOBASE) '||
         'select cia, nvl(:xcajalocal,caja), dia, departamento, concepto, ano_fiscal, per_proceso, monto, impuesto,'||
         '  num_asiento, costo, tipocambio, cambiobase '||
         'from movimientoventa@'||palias||' r '||
         'where r.cia=:xcia and r.caja=:xcaja and trunc(r.dia)=:xfecha'
      USING pcajalocal, pcia, pcaja, pfecha;
   EXCEPTION
      WHEN OTHERS THEN
         raise_application_error(-20004, 'ERROR <COPIAMOVSVENTA>: '||SQLERRM);
   END CopiaMovsVenta;

end;
/
