Tuesday, 16 January 2018

CAT employee email trigger


REPORT zhr_r_email_time_reject.

INFOTYPES 0105.

TABLES pernr.

TYPES BEGIN OF gty_pernr,
          pernr TYPE pernr_d,
          ename TYPE emnam,
          email TYPE comm_id_long,
        END OF gty_pernr,

        BEGIN OF gty_final,
          pernr TYPE pernr_d,
          ename TYPE emnam,
          date  TYPE catsdate,
          hours TYPE catshours,
          text  TYPE catsretext,
          email TYPE comm_id_long,
        END OF gty_final,

        BEGIN OF gty_catsdb,
          pernr     TYPE pernr_d,
          workdate  TYPE catsdate,
          catshours  TYPE catshours,
          status    TYPE catsstatus,
          laetm      TYPE cats_laetm,
          reason    TYPE catsreason,
        END OF gty_catsdb.


DATA gs_pernr    TYPE gty_pernr,
       gs_final    TYPE gty_final,
       gs_catsdb   TYPE gty_catsdb,
       gs_catsdb1  TYPE gty_catsdb,
       gs_body_msg LIKE solisti1,
       gs_tcatsdt  TYPE tcatsdt,
       gt_tcatsdt  TYPE STANDARD TABLE OF tcatsdt,
       gt_body_msg TYPE STANDARD TABLE OF solisti1,
       gt_catsdb   TYPE STANDARD TABLE OF gty_catsdb,
       gt_final    TYPE STANDARD TABLE OF gty_final,
       gt_pernr    TYPE STANDARD TABLE OF gty_pernr.

DATA lv_string  TYPE string,
       lv_string1 TYPE string,
       lv_reason  TYPE catsdb-reason,
       gv_email   TYPE comm_id_long,
       gv_time    TYPE cats_laetm.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS     p_status TYPE catsstatus OBLIGATORY DEFAULT '40',
                 p_time   TYPE cats_laetm.
SELECT-OPTIONS s_reason FOR lv_reason NO INTERVALS.
PARAMETERS p_test   AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b1.

INITIALIZATION.

  s_reason-sign   'I'.
  s_reason-option 'EQ'.
  s_reason-low    'YB15'.
  APPEND s_reason.
  s_reason-low    'YB20'.
  APPEND s_reason.
  s_reason-low    'YB25'.
  APPEND s_reason.
  s_reason-low    'YB30'.
  APPEND s_reason.
  s_reason-low    'YB35'.
  APPEND s_reason.

  GET pernr.

  gs_pernr-pernr pernr-pernr.
  gs_pernr-ename pernr-ename.
  rp-provide-from-last p0105 '0010' pn-begda pn-endda.
  IF pnp-sw-found 1.
    gs_pernr-email p0105-usrid_long.
  ENDIF.
  APPEND gs_pernr TO gt_pernr.

END-OF-SELECTION.

  IF gt_pernr IS NOT INITIAL.
    IF p_time IS NOT INITIAL.
      gv_time sy-uzeit p_time.
    ELSE.

    ENDIF.

    SELECT FROM tcatsdt INTO TABLE gt_tcatsdt
             WHERE reason IN s_reason.
    IF sy-subrc 0.
      SORT gt_tcatsdt BY reason.
    ENDIF.

    SELECT pernr
           workdate
           catshours
           status
           laetm
           reason FROM catsdb INTO TABLE gt_catsdb
            FOR ALL ENTRIES IN gt_pernr
            WHERE pernr gt_pernr-pernr
              AND status p_status
              AND laeda >= pn-begda AND laeda <= pn-endda
              AND reason IN s_reason.
    IF sy-subrc 0.
      IF p_time IS NOT INITIAL.
        DELETE gt_catsdb WHERE laetm NOT BETWEEN gv_time AND sy-uzeit.
      ENDIF.
      SORT gt_catsdb BY pernr.
      LOOP AT gt_catsdb INTO gs_catsdb1.
        gs_catsdb gs_catsdb1.
        gs_final-pernr gs_catsdb-pernr.
        gs_final-date  gs_catsdb-workdate.
        gs_final-hours gs_catsdb-catshours.
        CLEAR gs_tcatsdt.
        READ TABLE gt_tcatsdt INTO gs_tcatsdt
            WITH KEY reason gs_catsdb-reason.
        IF sy-subrc 0.
          gs_final-text gs_tcatsdt-text.
        ENDIF.
        READ TABLE gt_pernr INTO gs_pernr WITH KEY pernr gs_catsdb-pernr.
        IF sy-subrc 0.
          gs_final-ename gs_pernr-ename.
          gv_email gs_final-email gs_pernr-email.
        ENDIF.
        AT NEW pernr.
          IF p_test IS INITIAL.
            "Body
            CLEAR gt_body_msglv_string.
            CONCATENATE 'Hi' gs_final-ename ','
                        INTO lv_string SEPARATED BY space.
            PERFORM body_mail USING:spacelv_stringspace,
                                    'Hours on your timesheet have been REJECTED'.
          ENDIF.
        ENDAT.
        IF p_test IS INITIAL.
          CLEAR lv_string1lv_string.
          CONCATENATE gs_final-date+4(2'/' gs_final-date+6(2'/'
                      gs_final-date+0(4INTO lv_string.
          CONCATENATE 'Date  : ' lv_string space
                      INTO lv_string1 SEPARATED BY space.
*          PERFORM body_mail USING: lv_string.
          CLEAR lv_string.
          lv_string gs_final-hours.
          CONCATENATE lv_string1 'Hours  : ' lv_string space
                      INTO lv_string1 SEPARATED BY space.
*          PERFORM body_mail USING: lv_string.
*          CLEAR lv_string.
          CONCATENATE lv_string1 'Reason  : ' gs_final-text space
                      INTO lv_string1 SEPARATED BY space.
          PERFORM body_mail USINGlv_string1.
        ENDIF.
        APPEND gs_final TO gt_final.
        CLEAR gs_final.
        AT END OF pernr.
          IF p_test IS INITIAL AND gv_email IS NOT INITIAL.
            PERFORM body_mail USING:space,
                    'If you are an hourly employee, please contact your manager immediately for discussion regarding this.  Then please correct your time in the system and resubmit.',
                    space,
                    'Please Note:',
'If you are a salaried employee and your hours exceeded 40 in a week, and the rejection reason is SALARIED, you are receiving this message because our system, while capturing all hours worked, only passes the initial 40 on to the payroll system',
                    'please disregard this message.',
                    space,
                    'If you are a salaried employee and your hours are being rejected for some other reason, please contact your manager immediately for discussion regarding this.  Then please correct your time in the system and resubmit.',
                    space,
                    'If your manager is not available, please reach out to your HR Representative for support.',
                    space,
                    'Regards,',
                    'Time System Administration',
                    '-------------------------------------------------------------------------------------------'.
            PERFORM email.
          ENDIF.
          CLEAR lv_stringgt_body_msggv_email.
        ENDAT.
      ENDLOOP.
    ENDIF.
  ENDIF.

  IF gt_final IS NOT INITIAL.
    PERFORM display.
  ELSE.
    MESSAGE 'No Data Found' TYPE 'I'.
  ENDIF.

FORM email.

  DATA:  lv_lines        TYPE i,
         ls_doc          TYPE sodocchgi1,
         ls_receivers    TYPE somlreci1,
         ls_packing_list TYPE sopcklsti1,
         lt_packing_list TYPE STANDARD TABLE OF sopcklsti1,
         lt_receivers    TYPE STANDARD TABLE OF somlreci1.

  ls_receivers-rec_type   'U'.  "Internet address
  ls_receivers-receiver   gv_email.
  ls_receivers-com_type   'INT'.
  APPEND ls_receivers TO lt_receivers .

  "Subject of the
  ls_doc-obj_name  'Timesheet'.
  ls_doc-obj_descr 'SAP Timesheet – Request has been rejected'.
  ls_doc-obj_langu  sy-langu.

  "Write Packing List for Body
  DESCRIBE TABLE gt_body_msg LINES lv_lines.
  ls_packing_list-head_start 1.
  ls_packing_list-head_num   0.
  ls_packing_list-body_start 1.
  ls_packing_list-body_num   lv_lines.
  ls_packing_list-doc_type   'RAW'.
  APPEND ls_packing_list TO lt_packing_list.
  CLEAR  ls_packing_list.

  CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
    EXPORTING
      document_data              ls_doc
      put_in_outbox              'X'
      commit_work                'X'
      sender_address             'SAP@csscorp.com'
      sender_address_type        'INT'
    TABLES
      packing_list               lt_packing_list
      contents_txt               gt_body_msg
      receivers                  lt_receivers
    EXCEPTIONS
      too_many_receivers         1
      document_not_sent          2
      document_type_not_exist    3
      operation_no_authorization 4
      parameter_error            5
      x_error                    6
      enqueue_error              7
      OTHERS                     8.
  WAIT UP TO SECONDS.
  SUBMIT rsconn01 WITH mode 'INT'
          AND RETURN.
ENDFORM.

FORM body_mail USING p_space.
  gs_body_msg p_space.
  APPEND gs_body_msg TO gt_body_msg.
  CLEAR  gs_body_msg.
ENDFORM.

FORM display.
  DATA lo_alv       TYPE REF TO cl_salv_table,
         lo_functions TYPE REF TO cl_salv_functions,
         lo_columns   TYPE REF TO cl_salv_columns_table,
         lo_column    TYPE REF TO cl_salv_column_table.

  CALL METHOD cl_salv_table=>factory
    IMPORTING
      r_salv_table lo_alv
    CHANGING
      t_table      gt_final.
  lo_functions lo_alv->get_functions).
  lo_functions->set_allabap_true ).
  CALL METHOD lo_alv->get_columns
    RECEIVING
      value lo_columns.
  lo_columns->set_optimize'X' ).

  CALL METHOD lo_alv->display.
ENDFORM.

No comments:

Post a Comment