/// <summary> /// Получение значения типа продукта /// </summary> /// <param name="bisValid"></param> /// <param name="l4MsgInfo">Обработчик сообщений по линиям заказа</param> /// <returns>Значение типа продукта</returns> public int CheckValueProductType(bool bisValid, TL4MsgInfoLine l4MsgInfo) { bisValid = false; int res = 0; List <int> values = new List <int>(); string str = "SELECT PRODUCT_TYPE AS PRODUCT_CODE" + "FROM L4_L3_SO_LINE " + "WHERE MSG_COUNTER=:MSG_COUNTER" + "AND SO_ID =:SO_ID " + "AND (SO_LINE_ID/10)= :SO_LINE_ID"; OracleDynamicParameters odp = new OracleDynamicParameters(); odp.Add("MSG_COUNTER", l4MsgInfo.tL4MsgInfo.msgCounter); odp.Add("SO_ID", l4MsgInfo.sSoDescrIDInfoLine); odp.Add("SO_LINE_ID", l4MsgInfo.iSOLineID); using (OracleConnection connection = BaseRepo.GetDBConnection()) { values = connection.Query <int>(str, odp).AsList(); } if (values.Count > 0) { foreach (int val in values) { if (val != 0) { int count = 0; str = "SELECT COUNT(*) AS COUNTER " + "FROM PRODUCT_TYPE_CATALOGUE " + "WHERE SAP_CODE=:SAP_CODE" + "AND FINISHED_PRODUCT_FLAG = 'Y' AND (EXPIRATION_DATE IS NULL OR TO_CHAR(EXPIRATION_DATE, 'DD/MM/YYYY')" + "= '01/01/1970' OR EXPIRATION_DATE > sysdate) AND VALIDITY_DATE < sysdate "; odp = new OracleDynamicParameters(); odp.Add("SAP_CODE", val); using (OracleConnection connection = BaseRepo.GetDBConnection()) { count = connection.ExecuteScalar <int>(str, odp); } if (count > 0) { bisValid = true; res = val; } else { bisValid = false; break; } } } } if (!bisValid) { logger.Error($"Value L4_L3_SO_LINE.SO_TYPE_CODE is not valid"); } return(res); }
/// <summary> /// Получение значения типа кода /// </summary> /// <param name="bisValid"></param> /// <param name="l4MsgInfo">Обработчик сообщений по линиям заказа</param> /// <returns>Значение кода</returns> public int CheckValueType(bool bisValid, TL4MsgInfoLine l4MsgInfo) { bisValid = false; int res = 0; List <int> values = new List <int>(); string str = "SELECT SO_TYPE_CODE AS SO_TYPE_CODE" + "FROM L4_L3_SO_LINE " + "WHERE MSG_COUNTER=:MSG_COUNTER" + "AND SO_ID =:SO_ID " + "AND (SO_LINE_ID/10)= :SO_LINE_ID"; OracleDynamicParameters odp = new OracleDynamicParameters(); odp.Add("MSG_COUNTER", l4MsgInfo.tL4MsgInfo.msgCounter); odp.Add("SO_ID", l4MsgInfo.sSoDescrIDInfoLine); odp.Add("SO_LINE_ID", l4MsgInfo.iSOLineID); using (OracleConnection connection = BaseRepo.GetDBConnection()) { values = connection.Query <int>(str, odp).AsList(); } if (values.Count > 0) { foreach (int val in values) { if (val != 0) { int count = 0; str = "SELECT COUNT(*) AS COUNTER " + "FROM AUX_VALUES " + "WHERE INTEGER_VALUE=:INTEGER_VALUE" + "AND VARIABLE_ID = 'ORDER_TYPE' "; odp = new OracleDynamicParameters(); odp.Add("INTEGER_VALUE", val); using (OracleConnection connection = BaseRepo.GetDBConnection()) { count = connection.ExecuteScalar <int>(str, odp); } if (count > 0) { bisValid = true; res = val; } else { bisValid = false; break; } } } } if (!bisValid) { logger.Error($"Value L4_L3_SO_LINE.SO_TYPE_CODE is not valid"); } return(res); }
/// <summary> /// Получение аттрибутов /// </summary> /// <param name="tL4MsgInfoLine">Расширенная модель для обработки кода в линиях заказа</param> /// <param name="strProductType">Тип продукта</param> /// <param name="iSoID">ИД заказа</param> /// <param name="iSoLineID">ИД линии заказа</param> /// <param name="attrbSO">Сформированный лист аттрибутов заказа</param> /// <param name="strArrayOfAttributes">Лист аттрибутов</param> public void LoadAttrb(TL4MsgInfoLine tL4MsgInfoLine, string strProductType, int iSoID, int iSoLineID, TCheckRelatedList attrbSO = null, List <string> strArrayOfAttributes = null) { bool bTollerances = false; TCheckRealtedListRepo check; string strDecSep, sTmpAttrUnitID, sTmpAttrCode, sTmpAttrCodeL4; if (attrbSO == null) { check = new TCheckRealtedListRepo(); } else { check = new TCheckRealtedListRepo(attrbSO); } if (strArrayOfAttributes == null) { strArrayOfAttributes = new List <string>(); } string sqlstr = "SELECT ATTRB_CODE AS ATTRB_CODE,CONTR_EXT_KEY_FLD_NAME,UNIT_ID " + "FROM ATTRB_CONTR_EXT_LINK " + "WHERE ATTRB_REASON = 'L4_SOM' " + "AND CONTR_EXT_KEY_FLD_NAME IN (" + "SELECT COLUMN_NAME " + "FROM USER_TAB_COLS " + "WHERE TABLE_NAME = 'L4_L3_SO_LINE')"; List <AttrbContrExtLink> extLink; using (OracleConnection connection = GetConnection()) { extLink = connection.Query <AttrbContrExtLink>(sqlstr, null).AsList(); } sqlstr = "select substr(value,1,1) as dec_separator " + "from nls_session_parameters " + "where PARAMETER = 'NLS_NUMERIC_CHARACTERS'"; using (OracleConnection connection = BaseRepo.GetDBConnection()) { strDecSep = connection.ExecuteScalar <string>(sqlstr, null); } foreach (AttrbContrExtLink attrb in extLink) { ACEandSoLine aceandSo = new ACEandSoLine(); sTmpAttrCode = attrb.attrbCode; sTmpAttrCodeL4 = attrb.contExtKeyName; sTmpAttrUnitID = attrb.unitId; sqlstr = $"SELECT '{sTmpAttrCode}' AS ATTRB_CODE, " + $"ATTRIBUTE_TYPE AS ATTRB_FORMAT_CODE, " + $"DECODE (TO_CHAR(attribute_type)," + $"'ALPHA', DECODE( GET_AN_CONTROL_VALUE(EXT_NAME,1,attribute_value), 'NO TRANSALTION FOR ATTRIBUTE'," + $", 1, attribute_value), 'NO TRANSALTION FOR ATTRIBUTE'," + $"attribute_value, GET_AN_CONTROL_VALUE(EXT_NAME " + $", 1, attribute_value))" + $",'') AS attrb_an_value," + $"NVL (TO_NUMBER (DECODE (attribute_type, 'NUMERIC', attribute_value, 0)),0) AS attrb_num_value," + $"NVL (DECODE (TO_CHAR(attribute_type),'NUMERIC', DECODE(attrb_mu_code,NULL, TO_CHAR(attribute_value)," + $"DECODE ({sTmpAttrUnitID},{sTmpAttrUnitID},TO_CHAR(attribute_value),mual_converter (" + $"(SELECT interface_id " + $" FROM l3mu_interface_detail " + $" WHERE unit_id = {sTmpAttrUnitID} " + $"AND ROWNUM = 1)," + $"(SELECT quantity_id" + $"FROM l3mu_unit " + $"WHERE unit_id = {sTmpAttrUnitID}), " + $"(SELECT interface_id " + $"FROM l3mu_interface_detail " + $"WHERE unit_id = ATTRB_MU_CODE" + $"AND ROWNUM = 1), " + $"TO_CHAR(attribute_value) " + $"))), '0' ), '0' ) AS attrb_num_mual_value, " + $"DECODE(TO_CHAR(ATTRIBUTE_TYPE), 'FLAG', TO_CHAR(ATTRIBUTE_VALUE), 'N' ) AS ATTRB_FLAG_VALUE, " + $"DECODE(TO_CHAR(ATTRIBUTE_TYPE), ''DATE'', TO_CHAR(ATTRIBUTE_VALUE), " + $"TO_DATE('01011970','DDMMYYYY') ) AS ATTRB_DATE_VALUE " + $"FROM (SELECT TTL4.MSG_COUNTER, " + $"TTL4.SO_LINE_ID / 10, " + $"'{sTmpAttrCode}' AS ATTRIBUTE_CODE, " + $"ACE.ATTRB_FORMAT_CODE AS ATTRIBUTE_TYPE, " + $"ACE.ATTRB_EXTERN_NAME AS EXT_NAME, " + $"ACE.ATTRB_MU_CODE, " + $"NVL(ACE.ATTRB_DECIM_NUMB,2) AS ATTRB_DECIM_NUMB," + $"TTL4.{sTmpAttrCodeL4} AS ATTRIBUTE_VALUE" + $"from L4_L3_SO_LINE TTL4, " + $"ATTRB_CATALOGUE_ENTITY ACE " + $"where '{sTmpAttrCode}'=ace.attrb_code " + $"and (TTL4.SO_LINE_ID/10) = {tL4MsgInfoLine.iSOLineID}" + $"and TTL4.{sTmpAttrCodeL4} <> '-9999' " + $"and TTL4.MSG_COUNTER = {tL4MsgInfoLine.tL4MsgInfo.msgCounter} )"; using (OracleConnection connection = GetConnection()) { aceandSo = connection.QueryFirstOrDefault <ACEandSoLine>(sqlstr, null); } if (aceandSo != null) { strArrayOfAttributes.Add(aceandSo.attrbCode); if (aceandSo.attrbCode == "THICK_PTOL" || aceandSo.attrbCode == "THICK_NTOL") { bTollerances = true; check.Add("THICK_TOL_CODE", "MANUAL"); } if (aceandSo.attrbCode == "PRODUCT_QUALITY_CODE") { switch (Convert.ToInt32(aceandSo.attrbAnValue)) { case 1: check.Add(aceandSo.attrbCode, "PRIME"); break; case 2: check.Add(aceandSo.attrbCode, "SECONDARY"); break; } } else if (aceandSo.attrbCode == "EDGE_CONDITION_CODE") { if (aceandSo.attrbAnValue == "О") { check.Add(aceandSo.attrbCode, "TRIM"); } else if (aceandSo.attrbAnValue == "НО") { check.Add(aceandSo.attrbCode, "MILL"); } } else if (aceandSo.attrbCode == "PRODUCT_TYPE") { check.Add(aceandSo.attrbCode, strProductType); } else { //switch(AttrFor) //{ throw new NotImplementedException(); //} } } } }
/// <summary> /// Создание и заполнение таблицы SO_LINE /// </summary> /// <param name="line">Модель таблицы</param> /// <param name="l4MsgInfo">Модель таблицы событий для обработки сообщения </param> /// <param name="iCustomerID">ИД заказчика</param> /// <param name="iShipToCode">Код разгрузки</param> /// <param name="lbIsUpdate">Пометка об обновлении</param> /// <returns>Заполненая модель SO_LINE</returns> public TSoLine Create(LinesCom line, TL4MsgInfo l4MsgInfo, int iCustomerID, int iShipToCode, bool lbIsUpdate) { L4L3InterfaceUtility inter = new L4L3InterfaceUtility(); bool bVerifyData = true; int iSysDatePeriodNumID = 0; try { TL4MsgInfoLine m_L4MsgInfoLine = new TL4MsgInfoLine(); m_L4MsgInfoLine.tL4MsgInfo.msgCounter = line.msgCounter; m_L4MsgInfoLine.tL4MsgInfo.msgReport.status = line.msgStatus; m_L4MsgInfoLine.tL4MsgInfo.msgReport.remark = ""; newData.m_iSoLineID = line.soLineMet; TL4EngineInterfaceMngRepo m_eimOELineInterface = new TL4EngineInterfaceMngRepo(m_L4MsgInfoLine.tL4MsgInfo); newData.m_sSoDescrID = line.soId; if (lbIsUpdate) { newData.m_iSoID = inter.GetSoIdFromDescr(newData.m_sSoDescrID); } m_L4MsgInfoLine.sSoDescrIDInfoLine = newData.m_sSoDescrID; switch (som.DecodeContractType(newData.m_sSoDescrID, iCustomerID.ToString())) { case TContractType.coInternal: if (!som.IsCustomerInternal(iCustomerID)) { m_eimOELineInterface.NotifyErrorMessage("Заказ обозначен как внутренний, но имеет внешнего заказчика"); bVerifyData = false; } break; } newData.m_iShipToCode = iShipToCode; if (bVerifyData) { newData.m_iSoTypeCode = CheckValueType(bVerifyData, m_L4MsgInfoLine); } if (newData.m_iSoTypeCode == 2) { newData.m_iSoTypeCode = 4; } if (bVerifyData) { newData.m_iCreditStatus = CheckValueCredit(bVerifyData, m_L4MsgInfoLine); } if (bVerifyData) { newData.m_iOrderLineStatus = -1; if (line.soLineStatus.ToString().Length > 0) { newData.m_iOrderLineStatus = line.soLineStatus; } if (!(newData.m_iOrderLineStatus > 0)) { m_eimOELineInterface.NotifyErrorMessage("Неверный статус строки заказа"); bVerifyData = false; } if (line.dueDeliveryDate.ToString().Length > 0) { newData.m_dDueDelivery = line.dueDeliveryDate; } newData.m_iDeliveryPeriodNumID = som.RetrievePeriodNumID(newData.m_dDueDelivery, 1); if (GetLineStatus(newData.m_iOrderLineStatus) != TLineStatus.IsClosed) { iSysDatePeriodNumID = som.RetrievePeriodNumID(DateTime.Now, 1); } if (bVerifyData) { if (line.productType.Length > 0) { newData.m_strProductCode = CheckValueProductType(bVerifyData, m_L4MsgInfoLine).ToString(); newData.m_strProductCode = ProductTypeCheck(newData.m_strProductCode); } } if (bVerifyData) { newData.m_iInsertUser = m_eimOELineInterface.GetCreateUserId(); if (newData.m_iInsertUser == "") { bVerifyData = false; } } if (bVerifyData) { newData.m_iUpdateUser = m_eimOELineInterface.GetModUserId(); if (newData.m_iUpdateUser == "") { bVerifyData = false; } } if (l4MsgInfo.opCode > 0) { newData.m_iOpCode = l4MsgInfo.opCode; } } if (bVerifyData) { som.LoadAttrb(newData.m_L4MsgInfoLine, newData.m_strProductCode, newData.m_iSoID, newData.m_iSoLineID, attributesOfLine, slArrayofAttributes); } return(newData); } catch (Exception e) { logger.Trace($"TSOLine.Create - Exception - Message:{e.Message}"); return(newData); } }