Index: src/main/java/com/napa/pulse/config/InformaticaConfig.java =================================================================== diff -u -rc4f1ef27d1bef9672baa899482a379cddde36a1d -rc7c248af56f493df5214c78b8938885513b67b4f --- src/main/java/com/napa/pulse/config/InformaticaConfig.java (.../InformaticaConfig.java) (revision c4f1ef27d1bef9672baa899482a379cddde36a1d) +++ src/main/java/com/napa/pulse/config/InformaticaConfig.java (.../InformaticaConfig.java) (revision c7c248af56f493df5214c78b8938885513b67b4f) @@ -1,114 +1,123 @@ -package com.napa.pulse.config; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ConfigurationProperties(prefix = "informatica.client") -public class InformaticaConfig { - - private String url; - private String userName; - private String password; - - // Login - private String domain; - private String repo; - private String userNameSpace; - - // Workflow - private String folderName; - private String adhocWorkflowName; - private String finalizeWorkflowName; - private String requestMode; - private String serviceName; - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public String getUserName() { - return userName; - } - - public void setUserName(String userName) { - this.userName = userName; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getDomain() { - return domain; - } - - public void setDomain(String domain) { - this.domain = domain; - } - - public String getRepo() { - return repo; - } - - public void setRepo(String repo) { - this.repo = repo; - } - - public String getUserNameSpace() { - return userNameSpace; - } - - public void setUserNameSpace(String userNameSpace) { - this.userNameSpace = userNameSpace; - } - - public String getFolderName() { - return folderName; - } - - public void setFolderName(String folderName) { - this.folderName = folderName; - } - - public String getAdhocWorkflowName() { - return adhocWorkflowName; - } - - public void setAdhocWorkflowName(String adhocWorkflowName) { - this.adhocWorkflowName = adhocWorkflowName; - } - - public String getFinalizeWorkflowName() { - return finalizeWorkflowName; - } - - public void setFinalizeWorkflowName(String finalizeWorkflowName) { - this.finalizeWorkflowName = finalizeWorkflowName; - } - - public String getRequestMode() { - return requestMode; - } - - public void setRequestMode(String requestMode) { - this.requestMode = requestMode; - } - - public String getServiceName() { - return serviceName; - } - - public void setServiceName(String serviceName) { - this.serviceName = serviceName; - } - +package com.napa.pulse.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties(prefix = "informatica.client") +public class InformaticaConfig { + + private String url; + private String userName; + private String password; + + // Login + private String domain; + private String repo; + private String userNameSpace; + + // Workflow + private String folderName; + private String adhocWorkflowName; + private String finalizeWorkflowName; + private String finalizeMinMaxWorkflowName; + private String requestMode; + private String serviceName; + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getDomain() { + return domain; + } + + public void setDomain(String domain) { + this.domain = domain; + } + + public String getRepo() { + return repo; + } + + public void setRepo(String repo) { + this.repo = repo; + } + + public String getUserNameSpace() { + return userNameSpace; + } + + public void setUserNameSpace(String userNameSpace) { + this.userNameSpace = userNameSpace; + } + + public String getFolderName() { + return folderName; + } + + public void setFolderName(String folderName) { + this.folderName = folderName; + } + + public String getAdhocWorkflowName() { + return adhocWorkflowName; + } + + public void setAdhocWorkflowName(String adhocWorkflowName) { + this.adhocWorkflowName = adhocWorkflowName; + } + + public String getFinalizeWorkflowName() { + return finalizeWorkflowName; + } + + public void setFinalizeWorkflowName(String finalizeWorkflowName) { + this.finalizeWorkflowName = finalizeWorkflowName; + } + + public String getFinalizeMinMaxWorkflowName() { + return finalizeMinMaxWorkflowName; + } + + public void setFinalizeMinMaxWorkflowName(String finalizeMinMaxWorkflowName) { + this.finalizeMinMaxWorkflowName = finalizeMinMaxWorkflowName; + } + + public String getRequestMode() { + return requestMode; + } + + public void setRequestMode(String requestMode) { + this.requestMode = requestMode; + } + + public String getServiceName() { + return serviceName; + } + + public void setServiceName(String serviceName) { + this.serviceName = serviceName; + } + } \ No newline at end of file Index: src/main/java/com/napa/pulse/controller/rest/SessionRestController.java =================================================================== diff -u -r190d15a629a927641c9c8f969488e9166bb429ea -rc7c248af56f493df5214c78b8938885513b67b4f --- src/main/java/com/napa/pulse/controller/rest/SessionRestController.java (.../SessionRestController.java) (revision 190d15a629a927641c9c8f969488e9166bb429ea) +++ src/main/java/com/napa/pulse/controller/rest/SessionRestController.java (.../SessionRestController.java) (revision c7c248af56f493df5214c78b8938885513b67b4f) @@ -844,8 +844,6 @@ Map map = new HashMap(); map = (Map) gson.fromJson(sessionDetailsString, map.getClass()); - System.out.println("sessionTypeCode = "+map.get("sessionTypeCode")); - if(map.get("sessionTypeCode").equals("MM")) { sessionService.getMinMaxSessionDashboardData(sessionId, pageNumber, numberOfRecordsPerPage, exportType, response, user); }else { @@ -916,8 +914,6 @@ Map map = new HashMap(); map = (Map) gson.fromJson(sessionDetailsString, map.getClass()); - System.out.println("sessionTypeCode = "+map.get("sessionTypeCode")); - if(map.get("sessionTypeCode").equals("MM")) { return sessionService.getMinMaxSessionDashboardCnt(sessionId); }else { Index: src/main/java/com/napa/pulse/dao/impl/SessionDAOImpl.java =================================================================== diff -u -re605cca2f30d680e64d7638fceb1a26aec6301c3 -rc7c248af56f493df5214c78b8938885513b67b4f --- src/main/java/com/napa/pulse/dao/impl/SessionDAOImpl.java (.../SessionDAOImpl.java) (revision e605cca2f30d680e64d7638fceb1a26aec6301c3) +++ src/main/java/com/napa/pulse/dao/impl/SessionDAOImpl.java (.../SessionDAOImpl.java) (revision c7c248af56f493df5214c78b8938885513b67b4f) @@ -1413,6 +1413,102 @@ } @Override + public void finalizeMinMaxSession(Integer userId, Integer sessionId, Transmission[] transmissionArray) { + long start = System.currentTimeMillis(); + + java.sql.Date now = new java.sql.Date(new java.util.Date().getTime()); + + jdbcTemplate.batchUpdate( + "INSERT INTO TRANSMISSION_MIN_MAX (SESSION_ID, SITE_ID, " + + " TRANSMISSION_STATUS_ID, TRANSMISSION_DATE, " + + " I8_FILE_NAME ) " + " SELECT ?, SITE_ID, " + + " CASE WHEN 'Pending' = ? THEN TRANSMISSION_STATUS_ID " + " ELSE null " + " END CASE, " + +" ?, ? FROM TRANSMISSION_STATUS TS, SESSION_SITE SS " + + " WHERE SS.SESSION_ID = ? AND SS.SITE_ID = ? AND TS.TRANSMISSION_STATUS_CD = 'PP'", + new BatchPreparedStatementSetter() { + + @Override + public void setValues(PreparedStatement ps, int i) throws SQLException { + Transmission t = transmissionArray[i]; + ps.setInt(1, sessionId); + ps.setString(2,"Pending"); + ps.setDate(3, now); + ps.setString(4, null); + ps.setInt(5, sessionId); + ps.setInt(6, t.getSiteId()); + + } + + @Override + public int getBatchSize() { + return transmissionArray.length; + } + }); + + jdbcTemplate + .update("UPDATE PULSE_SESSION SET STATUS_ID = 3, LAST_MODIFIED_DATE = sysdate, FINALIZE_USER_ID=?, FINALIZE_DATE = sysdate" + + " WHERE SESSION_ID = ? ", userId, sessionId); + + String insertTransmissionSQL = "INSERT INTO TRANSMISSION_DETAIL_MIN_MAX\n" + + " (TRANSMISSION_ID, PRODUCT_ID, HQ_ABBR, FIELD_ABBR, PART_NUMBER,\n" + + " PRODUCT_DESC, MIN_STOCKING_QTY, MAX_STOCKING_QTY, SOLD_LAST_12_MONTHS, SOLD_LAST_24_MONTHS, PER_CAR, FORMULA_ID," + + " LEAD_TIME )\n" + + " (SELECT TRANSMISSION_ID, P.PRODUCT_ID, P.HQ_ABBR, P.FIELD_ABBR, P.PART_NUMBER, P.PRODUCT_DESC,\n" + + " MIN_STOCKING_QTY, SSP.MAX_STOCKING_QTY, SSP.SOLD_LAST_12_MONTHS,SSP.SOLD_LAST_24_MONTHS, PER_CAR,\n" + + "cl.calc_formula_id as FORMULA_ID, ( CASE WHEN cl.calc_formula_id = 2 THEN pc.config_value ELSE NULL END ) lead_time\n" + + "FROM pulseui.TRANSMISSION_MIN_MAX T\n" + + "INNER JOIN pulseui.SESSION_SITE_PRODUCT SSP ON T.SESSION_ID = SSP.SESSION_ID AND T.SITE_ID = SSP.SITE_ID\n" + + "INNER JOIN pulseui.PRODUCT P ON SSP.PRODUCT_ID = P.PRODUCT_ID\n" + + "INNER JOIN pulseui.min_max_calc_line cl ON cl.field_abbr = p.field_abbr\n" + + "INNER JOIN pulseui.pulse_config pc ON pc.config_code = 'FILTERS_LEAD_TIME'\n" + + "WHERE SSP.SESSION_ID = ?)"; + jdbcTemplate.update(insertTransmissionSQL, sessionId); + + jdbcTemplate.update( + "MERGE INTO PULSE_SESSION PS " + " USING (select SUM(NVL(ORDER_TOTAL,0)) AS ORDER_TOTAL, " + + " SUM(NVL(STOCKING_RETURN,0)) AS STOCKING_RETURN, " + + " SUM(NVL(NON_STOCKING_RETURN,0)) AS NON_STOCKING_RETURN " + + " from session_site_parameter SSP " + + " where session_id = ? and site_id in (select site_id from session_site where session_id = ?) " + + " and HIERARCHY_LEVEL=1) B " + " ON (ps.session_id = ?) " + " WHEN MATCHED THEN " + + " UPDATE SET PS.ORDER_TOTAL=B.ORDER_TOTAL, " + + " PS.STOCKING_RETURN_TOTAL=B.STOCKING_RETURN, " + + " PS.NON_STOCKING_RETURN_TOTAL=B.NON_STOCKING_RETURN", + sessionId, sessionId, sessionId); + + List sites = jdbcTemplate.queryForList("SELECT SITE_ID FROM SESSION_SITE WHERE SESSION_ID = ? ", + new Object[]{sessionId}, Integer.class); + + for (Integer s : sites) { + jdbcTemplate + .update("insert into session_site_product_finalized (SESSION_ID, SITE_ID, PRODUCT_ID, EFFECTIVE_PTS, " + + " ON_HAND, SOLD_LAST_12_MONTHS, MIN_STOCKING_QTY, MAX_STOCKING_QTY, INITIAL_STOCK_AMOUNT, LEVEL4_PARENT_ID, " + + " PRICE_WT_CORE, INITIAL_STOCKING_DT, DEMAND_12_MONTHS, OCCURANCE_12_MONTHS, OCCURANCE_18_MONTHS, OCCURANCE_24_MONTHS, " + + " CLASS, KEEP_FLAG, DISPLAY_QTY, SOLD_LAST_24_MONTHS, VIO, LOST_SALES_12_MONTHS, LOST_SALES_24_MONTHS, " + + " ORDER_QTY, KEEP_QTY, PCT_MARKET, RETURN_QTY, PTS, STD_PKG, RECOMMENDED_RETURN_QTY, RECOMMENDED_ORDER_QTY, " + + " BLOCK_ORDER, BLOCK_RETURN, USER_ID, REASON_ID, FORECAST_MODEL_ID, CLUSTER_PCT_SALE, DC_SALES_LAST_12_MONTHS, " + + " DC_SALES_LAST_24_MONTHS, TRANSFER_12_MONTHS, TRANSFER_24_MONTHS, PEER_SALES_12, REVIEWED, FLEET_FLAG, SYSTEM_FLAG, " + + "SYSTEM_RECOMMENDED, EDIT_LINKED_SIM_PROD_ID, SIMILAR_PRODUCT_EDIT, DECLINE_ORDER, DECLINE_RETURN, LAST_SALE_DT, BUSINESS_RULES_APPLIED, HQ_ORDER_QTY, HQ_KEEP_QTY) " + + " (select SESSION_ID, SITE_ID, PRODUCT_ID, EFFECTIVE_PTS, " + + " ON_HAND, SOLD_LAST_12_MONTHS, MIN_STOCKING_QTY, MAX_STOCKING_QTY, INITIAL_STOCK_AMOUNT, LEVEL4_PARENT_ID, " + + " PRICE_WT_CORE, INITIAL_STOCKING_DT, DEMAND_12_MONTHS, OCCURANCE_12_MONTHS, OCCURANCE_18_MONTHS, OCCURANCE_24_MONTHS, " + + " CLASS, KEEP_FLAG, DISPLAY_QTY, SOLD_LAST_24_MONTHS, VIO, LOST_SALES_12_MONTHS, LOST_SALES_24_MONTHS, " + + " ORDER_QTY, KEEP_QTY, PCT_MARKET, RETURN_QTY, PTS, STD_PKG, RECOMMENDED_RETURN_QTY, RECOMMENDED_ORDER_QTY, " + + " BLOCK_ORDER, BLOCK_RETURN, USER_ID, REASON_ID, FORECAST_MODEL_ID, CLUSTER_PCT_SALE, DC_SALES_LAST_12_MONTHS, " + + " DC_SALES_LAST_24_MONTHS, TRANSFER_12_MONTHS, TRANSFER_24_MONTHS, PEER_SALES_12, REVIEWED, FLEET_FLAG, SYSTEM_FLAG, SYSTEM_RECOMMENDED, " + + " EDIT_LINKED_SIM_PROD_ID, SIMILAR_PRODUCT_EDIT, DECLINE_ORDER, DECLINE_RETURN, LAST_SALE_DT, BUSINESS_RULES_APPLIED, HQ_ORDER_QTY, HQ_KEEP_QTY " + + " from session_site_product where site_Id = ? and session_id = ?)", s, sessionId); + + } + + jdbcTemplate.update("delete from SESSION_SEND_DATE where SESSION_ID=? ", sessionId); + + LOGGER.info("finalizeMinMaxSession| Finalize duration for sessionId " + sessionId + ": " + + (System.currentTimeMillis() - start)); + updateFollowerSiteProduct(sessionId); + } + + @Override public void finalizeACOSession(Integer userId, Integer sessionId, Transmission[] transmissionArray) { long start = System.currentTimeMillis(); @@ -2348,16 +2444,17 @@ } String sql = "WITH min_max_data as (\n" + - " SELECT c.field_abbr , c.part_number , a.min_stocking_qty as newmin , a.max_stocking_qty as newmax , b.initial_stocking_dt ,\n" + + " SELECT d.site_short_name , c.field_abbr , c.part_number , a.min_stocking_qty as newmin , a.max_stocking_qty as newmax , b.initial_stocking_dt ,\n" + " b.min_stocking_qty as currmin, b.max_stocking_qty as currmax , c.product_desc ,\n" + " b.sold_last_12_months , (b.max_stocking_qty * c.golden_price) as currentinv ,\n" + " (a.min_stocking_qty * c.golden_price) as recommended, ROW_NUMBER() over (order by c.part_number asc) RN\n" + - " FROM pulseui.session_site_product a, pulseui.site_product b, pulseui.product c\n" + + " FROM pulseui.session_site_product a, pulseui.site_product b, pulseui.product c, pulseui.site d\n" + " WHERE session_id = \n" +sessionId+ " AND a.site_id = b.site_id\n" + " AND a.product_id = b.product_id\n" + - " AND b.product_id = c.product_id)\n" + - " SELECT field_abbr \"line\", part_number \"partNumber\",\n" + + " AND b.product_id = c.product_id\n" + + " AND a.site_id = d.site_id)\n" + + " SELECT site_short_name \"siteName\" , field_abbr \"line\", part_number \"partNumber\",\n" + " newmin \"newMin\",newmax \"newMax\", initial_stocking_dt \"firstStockDate\",\n" + " currmin \"currMin\", currmax \"currMax\", product_desc \"partDescription\",\n" + " sold_last_12_months \"salesHistory\", currentinv \"currentInv\",\n" + @@ -3028,6 +3125,32 @@ * @return */ @Override + public List> getMinMaxSessionOrderReturnTotals(int sessionId) { + //boolean isFinalized = isSessionFinalized(sessionId); + + String sql = "SELECT a.session_id ,a.site_id , d.site_short_name, SUM(b.max_stocking_qty * c.golden_price) AS \"currentInvTotal\" ," + + " SUM(a.min_stocking_qty * c.golden_price) AS \"recommendedTotal\" , " + + " (SUM(b.max_stocking_qty * c.golden_price)- SUM(a.min_stocking_qty * c.golden_price)) as \"netChange\" \n" + + " FROM session_site_product a, site_product b, product c, site d\n" + + " WHERE session_id = ?" +"\n"+ + " AND a.site_id = b.site_id\n" + + " AND a.product_id = b.product_id\n" + + " AND b.product_id = c.product_id\n" + + " AND b.site_id = d.site_id\n" + + " group by a.session_id, a.site_id, d.SITE_SHORT_NAME"; + + List> minMaxSessionTotals; + + minMaxSessionTotals = jdbcTemplate.queryForList(sql, sessionId); + + return minMaxSessionTotals; + } + + /** + * @param sessionId + * @return + */ + @Override public List> getSessionOrderReturnTotalsDetails(int sessionId) { boolean isFinalized = isSessionFinalized(sessionId); @@ -3630,7 +3753,7 @@ @Override public List> getMinMaxSessionProducts(){ - return jdbcTemplate.queryForList("SELECT MM.LINE_ID as \"id\", MM.FIELD_ABBR as \"code\" FROM PUlSEUI.MIN_MAX_CALC_LINE MM where MM.active_flag = 1"); + return jdbcTemplate.queryForList("SELECT MM.LINE_ID as \"id\", MM.FIELD_ABBR as \"code\" FROM PUlSEUI.MIN_MAX_CALC_LINE MM where MM.active_flag = 1 order by mm.field_abbr asc"); } @Override Index: src/main/java/com/napa/pulse/dao/interfaces/SessionDAO.java =================================================================== diff -u -re605cca2f30d680e64d7638fceb1a26aec6301c3 -rc7c248af56f493df5214c78b8938885513b67b4f --- src/main/java/com/napa/pulse/dao/interfaces/SessionDAO.java (.../SessionDAO.java) (revision e605cca2f30d680e64d7638fceb1a26aec6301c3) +++ src/main/java/com/napa/pulse/dao/interfaces/SessionDAO.java (.../SessionDAO.java) (revision c7c248af56f493df5214c78b8938885513b67b4f) @@ -168,6 +168,13 @@ void finalizeACOSession(Integer userId, Integer sessionId, Transmission[] transmissionArray); /** + * @param userId + * @param sessionId + * @param transmissionArray + */ + void finalizeMinMaxSession(Integer userId, Integer sessionId, Transmission[] transmissionArray); + + /** * @param user * @param sessionId * @return @@ -342,6 +349,12 @@ * @param sessionId * @return */ + List> getMinMaxSessionOrderReturnTotals(int sessionId); + + /** + * @param sessionId + * @return + */ List> getSessionOrderReturnTotalsDetails(int sessionId); /** Index: src/main/java/com/napa/pulse/service/impl/SessionServiceImpl.java =================================================================== diff -u -re605cca2f30d680e64d7638fceb1a26aec6301c3 -rc7c248af56f493df5214c78b8938885513b67b4f --- src/main/java/com/napa/pulse/service/impl/SessionServiceImpl.java (.../SessionServiceImpl.java) (revision e605cca2f30d680e64d7638fceb1a26aec6301c3) +++ src/main/java/com/napa/pulse/service/impl/SessionServiceImpl.java (.../SessionServiceImpl.java) (revision c7c248af56f493df5214c78b8938885513b67b4f) @@ -135,15 +135,20 @@ */ @Override public ActionResult finalizeSession(Integer userId, Integer sessionId, Transmission[] transmissionArray) { - if (sessionDAO.isACO(sessionId)) { - sessionDAO.finalizeACOSession(userId, sessionId, transmissionArray); + + if (sessionDAO.isMinMax(sessionId)) { + sessionDAO.finalizeMinMaxSession(userId, sessionId, transmissionArray); + informaticaServiceClient.startMinMaxWorkflowFinalize(); } else { - sessionDAO.finalizeSession(userId, sessionId, transmissionArray); + if (sessionDAO.isACO(sessionId)) { + sessionDAO.finalizeACOSession(userId, sessionId, transmissionArray); + }else { + sessionDAO.finalizeSession(userId, sessionId, transmissionArray); + } + informaticaServiceClient.startWorkflowFinalize(); } // Sends Informatica an event that a session has been finalized - informaticaServiceClient.startWorkflowFinalize(); - return new ActionResult(true); } @@ -408,7 +413,11 @@ public List> getSessionOrderReturnTotalsDetails(int sessionId) { if (sessionDAO.isACO(sessionId)) { return sessionDAO.getACOSessionOrderReturnTotals(sessionId); - } else { + } + if (sessionDAO.isMinMax(sessionId)) { + return sessionDAO.getMinMaxSessionOrderReturnTotals(sessionId); + } + else { return sessionDAO.getSessionOrderReturnTotalsDetails(sessionId); } } Index: src/main/java/com/napa/pulse/utils/informatica/InformaticaServiceClient.java =================================================================== diff -u -rc4f1ef27d1bef9672baa899482a379cddde36a1d -rc7c248af56f493df5214c78b8938885513b67b4f --- src/main/java/com/napa/pulse/utils/informatica/InformaticaServiceClient.java (.../InformaticaServiceClient.java) (revision c4f1ef27d1bef9672baa899482a379cddde36a1d) +++ src/main/java/com/napa/pulse/utils/informatica/InformaticaServiceClient.java (.../InformaticaServiceClient.java) (revision c7c248af56f493df5214c78b8938885513b67b4f) @@ -1,249 +1,261 @@ -package com.napa.pulse.utils.informatica; - -import com.napa.pulse.config.InformaticaConfig; -import com.napa.pulse.dao.interfaces.AdHocRefreshDAO; -import com.napa.pulse.entity.pulseui.PulseSystem; -import com.napa.pulse.repository.PulseSystemRepository; -import com.napa.pulse.utils.schedulers.AdHocRequestWatchDog; -import org.apache.http.HttpEntity; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.message.BasicHeader; -import org.apache.http.util.EntityUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.web.util.HtmlUtils; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import java.security.cert.X509Certificate; -import java.util.StringJoiner; - -@Service -public class InformaticaServiceClient { - - private static final Logger LOGGER = LoggerFactory.getLogger(InformaticaServiceClient.class); - - @Autowired - private AdHocRequestWatchDog adHocRequestWatchDog; - - @Autowired - private PulseSystemRepository pulseSystemRepository; - - @Autowired - private AdHocRefreshDAO adHocRefreshDAO; - - @Autowired - private InformaticaConfig informaticaConfig; - - // LOGIN - private String sessionId = ""; - private String login = null; - private String logout = null; - - // START WORKFLOW - private String workflowName = ""; - private String startWorkFlow = null; - - public void startWorkflowFinalize() { - workflowName = informaticaConfig.getFinalizeWorkflowName(); - try { - if (!isLockedOut(workflowName)) { - LOGGER.info("startWorkflowFinalize: " + workflowName); - callWorkFlowSvc(-1); - } - } catch (Exception e) { - LOGGER.error("Error startWorkflowFinalize: ", e); - } - } - - public void startWorkflowAdhoc(int requestLogId) { - workflowName = informaticaConfig.getAdhocWorkflowName(); - try { - if (!isLockedOut(workflowName)) { - LOGGER.info("startWorkflowAdhoc " + workflowName + " for REQUEST_LOG_ID: " + requestLogId); - callWorkFlowSvc(requestLogId); - adHocRequestWatchDog.runWatchDog(); - } - } catch (Exception e) { - LOGGER.error("Error startWorkflowAdhoc: ", e); - } - } - - private void callWorkFlowSvc(int requestId) throws Exception { - this.init(); - - //Call logout login end point - String loginResponse = this.post(informaticaConfig.getUrl(), login); - - if (loginResponse.contains("")) { - sessionId = loginResponse.substring((loginResponse.indexOf("") + 11), loginResponse.indexOf("")); - LOGGER.info("SessionId: " + sessionId); - - this.buildWFCalls(); - - //Call logout startWorkFlow end point - adHocRefreshDAO.updateSvcStatus(requestId, "Infra_Called"); - String startWorkFlowResponse = this.post(informaticaConfig.getUrl(), startWorkFlow); - adHocRefreshDAO.updateSvcStatus(requestId, "Infra_Resp"); - LOGGER.info("startWorkFlowResponse " + startWorkFlowResponse); - - //Call logout service end point - String logoutResponse = this.post(informaticaConfig.getUrl(), logout); - } else if (requestId != -1) { - adHocRefreshDAO.updateSvcStatus(requestId, "No_Session"); - } - } - - private String post(String RequestURL, String data) throws Exception { - CloseableHttpClient client = null; - String responseAsString; - - try { - SSLContext sslContext = this.getSSLContext(); - client = HttpClients.custom().setSSLContext(sslContext).build(); - - LOGGER.debug("RequestURL : " + RequestURL); - HttpPost httpPost = new HttpPost(RequestURL); - httpPost.addHeader(new BasicHeader("User-Agent", "Mozilla/5.0")); - httpPost.addHeader(new BasicHeader("Accept-Language", "en-US,en;q=0.8")); - httpPost.addHeader(new BasicHeader("Accept-Encoding", "gzip, deflate, br")); - httpPost.addHeader("SOAPAction", ""); - httpPost.addHeader(new BasicHeader("Origin", "https://infws-eim-dev.genpt.net")); - httpPost.addHeader(new BasicHeader("Referer", "https://infws-eim-dev.genpt.net/wsh/")); - httpPost.addHeader(new BasicHeader("Host", "infws-eim-dev.genpt.net")); - - httpPost.setEntity(new StringEntity(data)); - - LOGGER.debug("executing informatica service client request : " + httpPost.getRequestLine()); - LOGGER.debug("data : " + data); - - CloseableHttpResponse response = client.execute(httpPost); - - if (response.getStatusLine().getStatusCode() == 200) { - responseAsString = EntityUtils.toString(response.getEntity()); - LOGGER.debug("Response informatica service client success : " + responseAsString); - } else { - responseAsString = EntityUtils.toString(response.getEntity()); - LOGGER.debug("Response informatica service client fail : " + responseAsString); - } - - try { - HttpEntity entity = response.getEntity(); - - if (entity != null) { - LOGGER.debug("Response content length: " + entity.getContentLength()); - } - - EntityUtils.consume(entity); - } finally { - response.close(); - } - } finally { - if (client != null) { - client.close(); - } - } - - return responseAsString; - } - - private SSLContext getSSLContext() { - SSLContext sslContext = null; - - TrustManager[] trustAllCerts = new TrustManager[]{ - new X509TrustManager() { - public java.security.cert.X509Certificate[] getAcceptedIssuers() { - return new X509Certificate[0]; - } - - public void checkClientTrusted( - java.security.cert.X509Certificate[] certs, String authType) { - } - - public void checkServerTrusted( - java.security.cert.X509Certificate[] certs, String authType) { - } - } - }; - - try { - sslContext = SSLContext.getInstance("SSL"); - sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); - } catch (Exception e) { - LOGGER.error("Error building ssl context: " + e); - } - - return sslContext; - } - - private void init() { - StringJoiner loginSJ = new StringJoiner(""); - loginSJ.add(""); - loginSJ.add(""); - loginSJ.add(""); - loginSJ.add(""); - loginSJ.add("" + informaticaConfig.getDomain() + ""); - loginSJ.add("" + informaticaConfig.getRepo() + ""); - loginSJ.add("" + informaticaConfig.getUserName() + ""); - loginSJ.add("" + HtmlUtils.htmlEscape(informaticaConfig.getPassword()) + ""); - loginSJ.add("" + informaticaConfig.getUserNameSpace() + ""); - loginSJ.add(""); - loginSJ.add(""); - loginSJ.add(""); - this.login = loginSJ.toString(); - } - - private void buildWFCalls() { - StringJoiner startWorkFlowSJ = new StringJoiner(""); - startWorkFlowSJ.add(""); - startWorkFlowSJ.add(""); - startWorkFlowSJ.add(""); - startWorkFlowSJ.add("" + sessionId + ""); - startWorkFlowSJ.add(""); - startWorkFlowSJ.add(""); - startWorkFlowSJ.add(""); - startWorkFlowSJ.add(""); - startWorkFlowSJ.add(""); - startWorkFlowSJ.add("" + informaticaConfig.getDomain() + ""); - startWorkFlowSJ.add("" + informaticaConfig.getServiceName() + ""); - startWorkFlowSJ.add(""); - startWorkFlowSJ.add("" + informaticaConfig.getFolderName() + ""); - startWorkFlowSJ.add("" + workflowName + ""); - startWorkFlowSJ.add("" + informaticaConfig.getRequestMode() + ""); - startWorkFlowSJ.add(""); - startWorkFlowSJ.add(""); - startWorkFlowSJ.add(""); - this.startWorkFlow = startWorkFlowSJ.toString(); - - StringJoiner logoutSJ = new StringJoiner(""); - logoutSJ.add(""); - logoutSJ.add(""); - logoutSJ.add(""); - logoutSJ.add("" + sessionId + ""); - logoutSJ.add(""); - logoutSJ.add(""); - logoutSJ.add(""); - logoutSJ.add(""); - logoutSJ.add(""); - logoutSJ.add(""); - this.logout = logoutSJ.toString(); - } - - private boolean isLockedOut(String workflow) { - PulseSystem ps = pulseSystemRepository.findById(workflow.toUpperCase()).get(); - if (ps.getFeatureEnabled() == 0) { - LOGGER.info("Workflow { " + workflow + " } is locked out"); - return true; - } else { - return false; - } - } - +package com.napa.pulse.utils.informatica; + +import com.napa.pulse.config.InformaticaConfig; +import com.napa.pulse.dao.interfaces.AdHocRefreshDAO; +import com.napa.pulse.entity.pulseui.PulseSystem; +import com.napa.pulse.repository.PulseSystemRepository; +import com.napa.pulse.utils.schedulers.AdHocRequestWatchDog; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicHeader; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.util.HtmlUtils; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import java.security.cert.X509Certificate; +import java.util.StringJoiner; + +@Service +public class InformaticaServiceClient { + + private static final Logger LOGGER = LoggerFactory.getLogger(InformaticaServiceClient.class); + + @Autowired + private AdHocRequestWatchDog adHocRequestWatchDog; + + @Autowired + private PulseSystemRepository pulseSystemRepository; + + @Autowired + private AdHocRefreshDAO adHocRefreshDAO; + + @Autowired + private InformaticaConfig informaticaConfig; + + // LOGIN + private String sessionId = ""; + private String login = null; + private String logout = null; + + // START WORKFLOW + private String workflowName = ""; + private String startWorkFlow = null; + + public void startWorkflowFinalize() { + workflowName = informaticaConfig.getFinalizeWorkflowName(); + try { + if (!isLockedOut(workflowName)) { + LOGGER.info("startWorkflowFinalize: " + workflowName); + callWorkFlowSvc(-1); + } + } catch (Exception e) { + LOGGER.error("Error startWorkflowFinalize: ", e); + } + } + + public void startMinMaxWorkflowFinalize() { + workflowName = informaticaConfig.getFinalizeMinMaxWorkflowName(); + try { + if (!isLockedOut(workflowName)) { + LOGGER.info("startMinMaxWorkflowFinalize: " + workflowName); + callWorkFlowSvc(-1); + } + } catch (Exception e) { + LOGGER.error("Error startMinMaxWorkflowFinalize: ", e); + } + } + + public void startWorkflowAdhoc(int requestLogId) { + workflowName = informaticaConfig.getAdhocWorkflowName(); + try { + if (!isLockedOut(workflowName)) { + LOGGER.info("startWorkflowAdhoc " + workflowName + " for REQUEST_LOG_ID: " + requestLogId); + callWorkFlowSvc(requestLogId); + adHocRequestWatchDog.runWatchDog(); + } + } catch (Exception e) { + LOGGER.error("Error startWorkflowAdhoc: ", e); + } + } + + private void callWorkFlowSvc(int requestId) throws Exception { + this.init(); + + //Call logout login end point + String loginResponse = this.post(informaticaConfig.getUrl(), login); + + if (loginResponse.contains("")) { + sessionId = loginResponse.substring((loginResponse.indexOf("") + 11), loginResponse.indexOf("")); + LOGGER.info("SessionId: " + sessionId); + + this.buildWFCalls(); + + //Call logout startWorkFlow end point + adHocRefreshDAO.updateSvcStatus(requestId, "Infra_Called"); + String startWorkFlowResponse = this.post(informaticaConfig.getUrl(), startWorkFlow); + adHocRefreshDAO.updateSvcStatus(requestId, "Infra_Resp"); + LOGGER.info("startWorkFlowResponse " + startWorkFlowResponse); + + //Call logout service end point + String logoutResponse = this.post(informaticaConfig.getUrl(), logout); + } else if (requestId != -1) { + adHocRefreshDAO.updateSvcStatus(requestId, "No_Session"); + } + } + + private String post(String RequestURL, String data) throws Exception { + CloseableHttpClient client = null; + String responseAsString; + + try { + SSLContext sslContext = this.getSSLContext(); + client = HttpClients.custom().setSSLContext(sslContext).build(); + + LOGGER.debug("RequestURL : " + RequestURL); + HttpPost httpPost = new HttpPost(RequestURL); + httpPost.addHeader(new BasicHeader("User-Agent", "Mozilla/5.0")); + httpPost.addHeader(new BasicHeader("Accept-Language", "en-US,en;q=0.8")); + httpPost.addHeader(new BasicHeader("Accept-Encoding", "gzip, deflate, br")); + httpPost.addHeader("SOAPAction", ""); + httpPost.addHeader(new BasicHeader("Origin", "https://infws-eim-dev.genpt.net")); + httpPost.addHeader(new BasicHeader("Referer", "https://infws-eim-dev.genpt.net/wsh/")); + httpPost.addHeader(new BasicHeader("Host", "infws-eim-dev.genpt.net")); + + httpPost.setEntity(new StringEntity(data)); + + LOGGER.debug("executing informatica service client request : " + httpPost.getRequestLine()); + LOGGER.debug("data : " + data); + + CloseableHttpResponse response = client.execute(httpPost); + + if (response.getStatusLine().getStatusCode() == 200) { + responseAsString = EntityUtils.toString(response.getEntity()); + LOGGER.debug("Response informatica service client success : " + responseAsString); + } else { + responseAsString = EntityUtils.toString(response.getEntity()); + LOGGER.debug("Response informatica service client fail : " + responseAsString); + } + + try { + HttpEntity entity = response.getEntity(); + + if (entity != null) { + LOGGER.debug("Response content length: " + entity.getContentLength()); + } + + EntityUtils.consume(entity); + } finally { + response.close(); + } + } finally { + if (client != null) { + client.close(); + } + } + + return responseAsString; + } + + private SSLContext getSSLContext() { + SSLContext sslContext = null; + + TrustManager[] trustAllCerts = new TrustManager[]{ + new X509TrustManager() { + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[0]; + } + + public void checkClientTrusted( + java.security.cert.X509Certificate[] certs, String authType) { + } + + public void checkServerTrusted( + java.security.cert.X509Certificate[] certs, String authType) { + } + } + }; + + try { + sslContext = SSLContext.getInstance("SSL"); + sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); + } catch (Exception e) { + LOGGER.error("Error building ssl context: " + e); + } + + return sslContext; + } + + private void init() { + StringJoiner loginSJ = new StringJoiner(""); + loginSJ.add(""); + loginSJ.add(""); + loginSJ.add(""); + loginSJ.add(""); + loginSJ.add("" + informaticaConfig.getDomain() + ""); + loginSJ.add("" + informaticaConfig.getRepo() + ""); + loginSJ.add("" + informaticaConfig.getUserName() + ""); + loginSJ.add("" + HtmlUtils.htmlEscape(informaticaConfig.getPassword()) + ""); + loginSJ.add("" + informaticaConfig.getUserNameSpace() + ""); + loginSJ.add(""); + loginSJ.add(""); + loginSJ.add(""); + this.login = loginSJ.toString(); + } + + private void buildWFCalls() { + StringJoiner startWorkFlowSJ = new StringJoiner(""); + startWorkFlowSJ.add(""); + startWorkFlowSJ.add(""); + startWorkFlowSJ.add(""); + startWorkFlowSJ.add("" + sessionId + ""); + startWorkFlowSJ.add(""); + startWorkFlowSJ.add(""); + startWorkFlowSJ.add(""); + startWorkFlowSJ.add(""); + startWorkFlowSJ.add(""); + startWorkFlowSJ.add("" + informaticaConfig.getDomain() + ""); + startWorkFlowSJ.add("" + informaticaConfig.getServiceName() + ""); + startWorkFlowSJ.add(""); + startWorkFlowSJ.add("" + informaticaConfig.getFolderName() + ""); + startWorkFlowSJ.add("" + workflowName + ""); + startWorkFlowSJ.add("" + informaticaConfig.getRequestMode() + ""); + startWorkFlowSJ.add(""); + startWorkFlowSJ.add(""); + startWorkFlowSJ.add(""); + this.startWorkFlow = startWorkFlowSJ.toString(); + + StringJoiner logoutSJ = new StringJoiner(""); + logoutSJ.add(""); + logoutSJ.add(""); + logoutSJ.add(""); + logoutSJ.add("" + sessionId + ""); + logoutSJ.add(""); + logoutSJ.add(""); + logoutSJ.add(""); + logoutSJ.add(""); + logoutSJ.add(""); + logoutSJ.add(""); + this.logout = logoutSJ.toString(); + } + + private boolean isLockedOut(String workflow) { + PulseSystem ps = pulseSystemRepository.findById(workflow.toUpperCase()).get(); + if (ps.getFeatureEnabled() == 0) { + LOGGER.info("Workflow { " + workflow + " } is locked out"); + return true; + } else { + return false; + } + } + } \ No newline at end of file Index: src/main/resources/application-us-dev.properties =================================================================== diff -u -r5b0723338ff0935584b79ee1a34c6e9b7fee738e -rc7c248af56f493df5214c78b8938885513b67b4f --- src/main/resources/application-us-dev.properties (.../application-us-dev.properties) (revision 5b0723338ff0935584b79ee1a34c6e9b7fee738e) +++ src/main/resources/application-us-dev.properties (.../application-us-dev.properties) (revision c7c248af56f493df5214c78b8938885513b67b4f) @@ -23,6 +23,7 @@ # Informatica informatica.client.adhoc-workflow-name=wf_APG_START_ADHOC_PROCESS informatica.client.finalize-workflow-name=wf_APG_EXPORT_ORDER_AND_RETURNS +informatica.client.finalize-min-max-workflow-name=wf_PULSE_I8MINMAX # JWT jwt.secret=PTiBquu5LLARmKXr0hL/w2IPW1o1XR1ObfZEHNJHvKVpzhU4DkQI49sBttGXcmrjY7AX85EOyqqPyamrL6qLTg== Index: src/main/webapp/app/src/session/dashboard/templates/sessionDashboardView.html =================================================================== diff -u -r72edb39eb185f8a2bfeb781aa631ba449a6130ce -rc7c248af56f493df5214c78b8938885513b67b4f --- src/main/webapp/app/src/session/dashboard/templates/sessionDashboardView.html (.../sessionDashboardView.html) (revision 72edb39eb185f8a2bfeb781aa631ba449a6130ce) +++ src/main/webapp/app/src/session/dashboard/templates/sessionDashboardView.html (.../sessionDashboardView.html) (revision c7c248af56f493df5214c78b8938885513b67b4f) @@ -31,7 +31,9 @@ -
+
Order @@ -302,6 +305,7 @@ class="flex-row recco" ng-show="vm.dashboardTableData.length>0" ng-class="{'expanded':vm.chartExpanded}" + ng-if="sessionTypeCode != MM" >
- - - - + + + + + + + {{sd.SITE_SHORT_NAME}} - + {{sd.orderTotal|currency}} - + {{sd.stockingReturn|currency}} - + {{sd.nonStockingReturn|currency}} - + {{sd.netTotal|currency}} + + {{sd.currentInvTotal|currency}} + + + {{sd.recommendedTotal|currency}} + + + {{sd.netChange|currency}} + + @@ -174,6 +187,7 @@ ng-click=" crossPage.toPreferenceReview()" class="button button-default go-preference-btn" translate="preferences" + ng-if="!vm.isMinMaxSession" > Preferences @@ -200,7 +214,7 @@
+
+ +
Index: src/main/webapp/app/src/session/sessionPreferenceSettingService.js =================================================================== diff -u -r154a303c3807243d162f8bebad57151ff06ca4f3 -rc7c248af56f493df5214c78b8938885513b67b4f --- src/main/webapp/app/src/session/sessionPreferenceSettingService.js (.../sessionPreferenceSettingService.js) (revision 154a303c3807243d162f8bebad57151ff06ca4f3) +++ src/main/webapp/app/src/session/sessionPreferenceSettingService.js (.../sessionPreferenceSettingService.js) (revision c7c248af56f493df5214c78b8938885513b67b4f) @@ -327,14 +327,27 @@ } }, { + id: 'siteName', + label: 'Site Name', + key: 'sitetName', + checked: true, + hidable: false, + relativeWidth: 3, + template: + '{{value}}', + access: ({sessionDetail}) => { + return sessionDetail.sessionTypeCode === 'MM'; + } + }, + { id: 'line', label: 'Line', key: 'line', checked: true, hidable: false, relativeWidth: 3, template: - '{{value}}', + '{{value}}', access: ({sessionDetail}) => { return sessionDetail.sessionTypeCode === 'MM'; }