You are on page 1of 6

FUNCTION zhcimf_cargabeneficios .

*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" VALUE(PERNR) TYPE PERNR_D
*" VALUE(EFFECTIVE_FROM) TYPE BEGDA
*" VALUE(PAY_COMPONENT) TYPE LGART OPTIONAL
*" VALUE(ENROLLMENT_AMOUNT) TYPE PAD_AMT7S OPTIONAL
*" VALUE(ENROLLMENT_VALUE_UNTIL) TYPE ENDDA OPTIONAL
*" VALUE(EXTERNALNAME) TYPE UZORD OPTIONAL
*" VALUE(SUBTYPE) TYPE SUBTY OPTIONAL
*" VALUE(SOCIAL_INSURANCE_ENTITY_ID) TYPE PCO_ENTIT OPTIONAL
*" VALUE(AFFILIATION_ACCOUNT) TYPE PCO_ACCAF OPTIONAL
*" VALUE(EMPLOYEE_PERCENTAGE) TYPE PCO_PEEMP OPTIONAL
*" VALUE(COMPANY_PERCENTAGE) TYPE PCO_PECOM OPTIONAL
*" VALUE(EMPLOYEE_VALUE) TYPE PCO_BTEMP OPTIONAL
*" VALUE(ID_BENEFICIO) TYPE ZHCIED_IDBENEF OPTIONAL
*" VALUE(TIPO_BENEFICIO) TYPE ZCOHCMPYDE_TIPOBF OPTIONAL
*" VALUE(IS_0014) TYPE XFELD OPTIONAL
*" VALUE(IS_0831) TYPE XFELD OPTIONAL
*" EXPORTING
*" VALUE(MESSAGES_OUT) TYPE HRPP_T_BAPIRETURN1
*"----------------------------------------------------------------------
* Historial de modificaciones:
*----------------------------------------------------------------------*
* Fecha: 26/05/2020
* Autor: Diego Ignacio Pagano
* Fabrica: TIVIT
* Modificación: @0001.
* Detalle: Se modifica la carga para evitar la duplicación de registros
*----------------------------------------------------------------------*
* Fecha: 27/07/2020
* Autor: Diego Ignacio Pagano
* Fabrica: TIVIT
* Modificación: @0002.
* Detalle: Se añade el parámetro tipo de beneficio para evitar errores
* de carga en los registros
*----------------------------------------------------------------------*
***"----------------------------------------------------------------------

DATA: ls_return TYPE bapireturn1,


fecha_fin TYPE endda,
seqnr TYPE seqnr.

DATA: lt_p0014 TYPE TABLE OF p0014,


lt_p0831 TYPE TABLE OF p0831.

DATA: lt_homcc TYPE STANDARD TABLE OF zthomolo_ccnomin.

CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'


EXPORTING
number = pernr
IMPORTING
return = ls_return.

IF ls_return IS INITIAL.
fecha_fin = enrollment_value_until.
IF is_0014 EQ abap_true.
ls_p0014-pernr = pernr.
ls_p0014-begda = effective_from.
ls_p0014-endda = enrollment_value_until.
ls_p0014-subty = pay_component.
ls_p0014-lgart = pay_component.
ls_p0014-betrg = enrollment_amount.
ls_p0014-zuord = externalname.
ls_p0014-zzidbf = id_beneficio.
*** INICIO MOD-@0002 - DPAGANO - 29/07/2020
ls_p0014-zztipobf = tipo_beneficio.
*** FIN MOD-@0002 - DPAGANO - 29/07/2020
IF employee_percentage GT 0.
ls_p0014-anzhl = employee_percentage.
ELSE.
CLEAR : ls_p0014-anzhl, ls_p0014-zeinh.
ENDIF.

**** Ini 04/04/2022 AG Se limita la fecha del registro anterior


SELECT * FROM zthomolo_ccnomin INTO TABLE lt_homcc .
READ TABLE lt_homcc INTO DATA(ls_homcc) WITH KEY subty = ls_p0014-subty
cc_nomina = ls_p0014-lgart.
IF sy-subrc = 0.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = pernr
infty = '0014'
TABLES
infty_tab = lt_p0014
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.

SORT lt_p0014 BY endda DESCENDING.


READ TABLE lt_p0014 INTO DATA(ls_p0014_mod2)
WITH KEY pernr = pernr subty = ls_p0014-subty zuord = ls_p0014-zuord.
IF sy-subrc = 0.
lv_actio = 'LIS9'.
ls_p0014_mod2-endda = ls_p0014-begda - 1.
ENDIF.
ENDIF.
UPDATE pa0014 SET endda = ls_p0014_mod2-endda
WHERE pernr EQ ls_p0014_mod2-pernr
AND zzidbf EQ ls_p0014_mod2-zzidbf.
IF sy-subrc = 0.
COMMIT WORK.
FREE: ls_p0014_mod2.
CLEAR: ls_p0014_mod2.
ls_retur-type = 'S'.
ls_retur-message = 'La fecha del registro se limito .'.
ELSE.
ls_retur-log_no = pernr.
APPEND ls_retur TO messages_out.
ENDIF.
**** FIN AJUSTE 04/04/2022
IF enrollment_value_until EQ '99991231'.
lv_actio = 'INS'.
DELETE FROM pa0014 WHERE pernr EQ pernr
AND begda EQ effective_from
AND zzidbf EQ id_beneficio.
ELSE.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = pernr
infty = '0014'
TABLES
infty_tab = lt_p0014
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.

READ TABLE lt_p0014 INTO DATA(ls_p0014_mod)


WITH KEY begda = effective_from zzidbf = id_beneficio.
IF sy-subrc EQ 0.
lv_actio = 'MOD'.
fecha_fin = ls_p0014_mod-endda.
ls_p0014_mod-endda = enrollment_value_until.
ls_p0014 = ls_p0014_mod.
ELSE."Solo para el caso de carga inicial
lv_actio = 'INS'.
fecha_fin = enrollment_value_until.
ENDIF.
ENDIF.

CLEAR: ls_retur.
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
infty = '0014'
number = pernr
subtype = ls_p0014-subty
validitybegin = ls_p0014-begda
validityend = fecha_fin
recordnumber = ls_p0014-seqnr
record = ls_p0014
operation = lv_actio
IMPORTING
return = ls_retur.

CALL FUNCTION 'HR_PSBUFFER_INITIALIZE'.

IF ls_retur IS INITIAL.
ls_retur-type = 'S'.
ls_retur-message = 'Inftipo 0014 cargado con exito.'.
ELSE.
ls_retur-log_no = pernr.
APPEND ls_retur TO messages_out.
ROLLBACK WORK.
CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'
EXPORTING
number = pernr.
EXIT.
ENDIF.
ls_retur-log_no = pernr.
APPEND ls_retur TO messages_out.

ENDIF.
ENDIF.
CALL FUNCTION 'HR_PSBUFFER_INITIALIZE'.

IF ls_retur IS INITIAL.
ls_retur-type = 'S'.
ls_retur-message = 'Inftipo 0014 cargado con exito.'.
ELSE.
ls_retur-log_no = pernr.
APPEND ls_retur TO messages_out.
ROLLBACK WORK.
CALL FUNCTION 'HR_EMPLOYEE_DEQUEUE'
EXPORTING
number = pernr.
EXIT.
ENDIF.
ls_retur-log_no = pernr.
APPEND ls_retur TO messages_out.

IF is_0831 EQ abap_true.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'


EXPORTING
input = social_insurance_entity_id
IMPORTING
output = ls_p0831-entit.

ls_p0831-pernr = pernr.
ls_p0831-begda = effective_from.
ls_p0831-endda = enrollment_value_until.
ls_p0831-subty = subtype.
ls_p0831-dataf = effective_from.
ls_p0831-accaf = affiliation_account.
ls_p0831-peemp = employee_percentage.
ls_p0831-pecom = company_percentage.
ls_p0831-btemp = employee_value.
ls_p0831-zzidbf = id_beneficio.
*** INICIO MOD-@0002 - DPAGANO - 29/07/2020
ls_p0831-zztipobf = tipo_beneficio.
*** FIN MOD-@0002 - DPAGANO - 29/07/2020

IF enrollment_value_until EQ '99991231'.
*** INICIO MOD-@0001 - DPAGANO 26/05/2020
*Con la validación anterior, comentar de la línea 138 a la 141.
*Para que no haga ningún DELETE y no consuma consecutivos
*innecesariamente.
* DELETE FROM pa0831 WHERE pernr EQ pernr
* AND begda EQ effective_from
* AND zzidbf EQ id_beneficio.
*** FIN MOD-@0001 - DPAGANO 26/05/2020

PERFORM procesar_831 USING ls_p0831 pay_component


CHANGING messages_out.

ELSE.

CALL FUNCTION 'HR_READ_INFOTYPE'


EXPORTING
pernr = pernr
infty = '0831'
TABLES
infty_tab = lt_p0831
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.

CLEAR: ls_retur.
READ TABLE lt_p0831 INTO DATA(ls_p0831_mod)
WITH KEY begda = effective_from
zzidbf = id_beneficio.
**** INICIO MOD-@0002 - DPAGANO - 29/07/2020
* zztipobf = tipo_beneficio.
**** FIN MOD-@0002 - DPAGANO - 29/07/2020

IF sy-subrc EQ 0.

**** INICIO MOD-@0001 - DPAGANO 07/06/2020


* DATA: vl_modificado.
*
* CLEAR vl_modificado.
*
* " Validamos si se creo un registro nuevo
* PERFORM f_validar_modificado
* USING ls_p0831_mod CHANGING vl_modificado.
*
* IF vl_modificado EQ abap_true.
*
* " Si se genero un registro nuevo, se puede limitar
**** FIN MOD-@0001 - DPAGANO 07/06/2020

*Son maximo 2 registros


UPDATE pa0831 SET endda = enrollment_value_until
WHERE pernr EQ ls_p0831_mod-pernr
AND begda EQ ls_p0831_mod-begda
AND endda EQ ls_p0831_mod-endda
AND zzidbf EQ ls_p0831_mod-zzidbf.
**** INICIO MOD-@0002 - DPAGANO - 29/07/2020
* AND zztipobf EQ ls_p0831_mod-zztipobf.
**** FIN MOD-@0002 - DPAGANO - 29/07/2020

IF sy-subrc EQ 0.
ls_retur-type = 'S'.
ls_retur-message = 'Inftipo 0831 cargado con exito.'.
ELSE.
ls_retur-type = 'E'.
ls_retur-message = 'Inftipo 0831 no limitado.'.
ENDIF.
ls_retur-log_no = ls_p0831-pernr.
APPEND ls_retur TO messages_out.

*la opcion delimitar no funciona,


*en este caso no puede hacer con MOD porq chequea retroactividad
* CALL FUNCTION 'HR_INFOTYPE_OPERATION'
* EXPORTING
* infty = '0831'
* number = pernr
* subtype = ls_p0831-subty
* validitybegin = ls_p0831-begda
* validityend = fecha_fin
* recordnumber = ls_p0831-seqnr
* record = ls_p0831
* operation = lv_actio
* IMPORTING
* return = ls_retur.
*
* CALL FUNCTION 'HR_PSBUFFER_INITIALIZE'.

**** INICIO MOD-@0001 - DPAGANO 07/06/2020


* ENDIF.
**** FIN MOD-@0001 - DPAGANO 07/06/2020

ELSE."Solo para el caso de carga inicial


PERFORM procesar_831 USING ls_p0831 pay_component
CHANGING messages_out.

ENDIF.
ENDIF.
CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'
EXPORTING
number = pernr.
ELSE.
ls_retur-log_no = pernr.
APPEND ls_return TO messages_out.
ENDIF.
ENDFUNCTION.

You might also like