Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        /// <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();
                        //}
                    }
                }
            }
        }
Exemple #4
0
        /// <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);
            }
        }