示例#1
0
        private List <SqlDataRecord> BuildSqlRecordList(CurrencyModel DataModel)
        {
            string  CurrencyCode;
            decimal CurrencyRate;

            PropertyInfo[] PublicProps;
            Type           ModelType;
            SqlDataRecord  Record;

            SqlMetaData[]        Columns;
            SqlMetaData          C_Code, C_Rate;
            List <SqlDataRecord> CurrencyTable = new List <SqlDataRecord>();

            C_Code  = new SqlMetaData("Code", SqlDbType.NVarChar, 5);
            C_Rate  = new SqlMetaData("Rate", SqlDbType.Decimal, 18, 2);
            Columns = new SqlMetaData[] { C_Code, C_Rate };

            ModelType   = typeof(CurrencyRateModel);
            PublicProps = ModelType.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
            foreach (PropertyInfo Property in PublicProps)
            {
                CurrencyCode = Property.Name.ToString();
                CurrencyRate = Convert.ToDecimal(Property.GetValue(DataModel.quotes).ToString());
                Record       = new SqlDataRecord(Columns);
                Record.SetValue(Record.GetOrdinal("Code"), CurrencyCode.Substring(3));
                Record.SetValue(Record.GetOrdinal("Rate"), Math.Round(CurrencyRate, 2));
                CurrencyTable.Add(Record);
            }
            Record = new SqlDataRecord(Columns);
            Record.SetValue(Record.GetOrdinal("Code"), DataModel.source);
            Record.SetValue(Record.GetOrdinal("Rate"), 1.00M);
            CurrencyTable.Add(Record);
            return(CurrencyTable);
        }
        public void GetOrdinal_ThrowsOutOfRange_IfNameIsNotAColumn()
        {
            SqlMetaData[] metaData = new SqlMetaData[]
            {
                new SqlMetaData("col1", SqlDbType.NVarChar, 50),
                new SqlMetaData("col2", SqlDbType.Int)
            };
            SqlDataRecord record = new SqlDataRecord(metaData);


            Assert.Throws <IndexOutOfRangeException>(() => record.GetOrdinal("outofrange"));

            Assert.Throws <IndexOutOfRangeException>(() => record.GetOrdinal("col1 "));
        }
示例#3
0
        internal void WriteTo(SqlDataRecord record, object row)
        {
            var ordinal      = record.GetOrdinal(ColumnName);
            var value        = _accessor[row, PropertyName];
            var valueToWrite = ToDatabase(value);

            record.SetValue(ordinal, valueToWrite);
        }
        public void GetOrdinal_ReturnsIndexOfColumn_CaseInsensitive()
        {
            SqlMetaData[] metaData = new SqlMetaData[]
            {
                new SqlMetaData("col1", SqlDbType.NVarChar, 50),
                new SqlMetaData("col2", SqlDbType.Int)
            };
            SqlDataRecord record = new SqlDataRecord(metaData);

            Assert.Equal(1, record.GetOrdinal("Col2"));
        }
        public void GetOrdinal_ThrowsAgumentNull_IfNameIsNull()
        {
            SqlMetaData[] metaData = new SqlMetaData[]
            {
                new SqlMetaData("col1", SqlDbType.NVarChar, 50),
                new SqlMetaData("col2", SqlDbType.Int)
            };
            SqlDataRecord record = new SqlDataRecord(metaData);

            Assert.Throws <ArgumentNullException>(() => record.GetOrdinal(null));
        }
        /// <summary>
        /// To TableType <see cref="TableType.Company"/>
        /// </summary>
        /// <param name="companies">Collection of data to change</param>
        /// <returns>List of <see cref="SqlDataRecord"/> objects</returns>
        public static List <SqlDataRecord> ToTableTypeCompanies(this IList <Company> companies)
        {
            if (companies == null || companies.Count == 0)
            {
                return(null);
            }

            var returnList = new List <SqlDataRecord>();

            foreach (var company in companies)
            {
                var sqlDataRecord = new SqlDataRecord(
                    new SqlMetaData("Name", SqlDbType.NVarChar, 400),
                    new SqlMetaData("BusinessCode", SqlDbType.NVarChar, 50),
                    new SqlMetaData("VatNo", SqlDbType.NVarChar, 200),
                    new SqlMetaData("Status", SqlDbType.VarChar, 20),
                    new SqlMetaData("FullAddress", SqlDbType.NVarChar, 1024),
                    new SqlMetaData("Url", SqlDbType.VarChar, 200)
                    );

                sqlDataRecord.SetSqlString(sqlDataRecord.GetOrdinal("Name"), company.CompanyName);
                sqlDataRecord.SetSqlString(sqlDataRecord.GetOrdinal("BusinessCode"), company.BusinessCode);
                sqlDataRecord.SetSqlString(sqlDataRecord.GetOrdinal("VatNo"), company.VatNo);
                sqlDataRecord.SetSqlString(sqlDataRecord.GetOrdinal("Status"), company.Status.ToString());
                sqlDataRecord.SetSqlString(sqlDataRecord.GetOrdinal("FullAddress"), company.CompanyAddress.FullAddress);
                sqlDataRecord.SetSqlString(sqlDataRecord.GetOrdinal("Url"), company.UrlOfAriregister);

                returnList.Add(sqlDataRecord);
            }

            return(returnList);
        }
        /// <summary>
        /// Gets the ordinal.
        /// </summary>
        /// <param name="record">The record.</param>
        /// <param name="fieldName">Name of the field.</param>
        /// <returns>System.Int32.</returns>
        /// <exception cref="System.ArgumentNullException">record
        /// or
        /// fieldName</exception>
        private static int GetOrdinal(SqlDataRecord record, string fieldName)
        {
            if (record == null)
            {
                throw new ArgumentNullException("record");
            }
            if (String.IsNullOrWhiteSpace(fieldName))
            {
                throw new ArgumentNullException("fieldName");
            }
            int ordinal = record.GetOrdinal(fieldName);

            return(ordinal);
        }
示例#8
0
        public void SendOfferEmail(dynamic ApplicationContext, IJobExecutionContext ExecutionContext)
        {
            bool                   WriteEventLog = true;
            SqlCommand             cmd;
            SqlDataReader          DataReader = null;
            List <OfferEmailModel> emailList  = new List <OfferEmailModel>();
            OfferEmailModel        eModel;
            string                 LogName          = ConfigurationManager.AppSettings["ServiceLog"];
            string                 SourceName       = ConfigurationManager.AppSettings["OfferEmailSource"];
            string                 ConnectionString = ConfigurationManager.ConnectionStrings["CentralConnection"].ConnectionString;
            EventLog               ServiceLog       = (EventLog)ExecutionContext.MergedJobDataMap["ServiceLog"];

            string InitMessage = string.Format("Initiating to run offer email algorithm.\nALGORITHM: {0}\nDB: {1}",
                                               ApplicationContext.ProcedureName, ConnectionString);

            ServiceLog.WriteEntry(InitMessage, EventLogEntryType.Warning, 45);
            SqlConnection dbConnection = new SqlConnection(ConnectionString);

            try
            {
                dbConnection.Open();
                cmd                = new SqlCommand(ApplicationContext.ProcedureName, dbConnection);
                cmd.CommandType    = CommandType.StoredProcedure;
                cmd.CommandTimeout = 0;
                DataReader         = cmd.ExecuteReader();
                Log.AppendLine("Procedure ran. Reading list of eligible translators.");
                while (DataReader.Read() == true)
                {
                    eModel                   = new OfferEmailModel();
                    eModel.OrderID           = DataReader["OrderID"] == DBNull.Value ? (Guid?)null : Guid.Parse(DataReader["OrderID"].ToString());
                    eModel.OrderNo           = DataReader["OrderNo"].ToString();
                    eModel.TranslatorID      = DataReader["TranslatorID"] == DBNull.Value ? (Guid?)null : Guid.Parse(DataReader["TranslatorID"].ToString());
                    eModel.EmailTo           = DataReader["EmailAddress"].ToString();
                    eModel.TranslationType   = Convert.ToInt32(DataReader["TranslationType"] == DBNull.Value ? "0" : DataReader["TranslationType"].ToString());
                    eModel.DeliveryLevelName = DataReader["DeliveryLevelName"].ToString();
                    eModel.OfferLogID        = DataReader["OfferLogID"] == DBNull.Value ? (Guid?)null : Guid.Parse(DataReader["OfferLogID"].ToString());
                    eModel.LogCommand        = DataReader["LogCommand"].ToString();
                    emailList.Add(eModel);
                    Log.AppendFormat("--> Order: {0} Log: {2} Translator: {1}.", eModel.OrderNo, eModel.EmailTo, eModel.LogCommand);
                    Log.AppendLine();
                }
            }
            catch (Exception ex)
            {
                string message = Utility.DeepestExceptionMessage(ex);
                Utility.SetErrorLog(null, SourceName, message);
                Log.AppendFormat("Error while reading translator information list: {0}", message);
                Log.AppendLine();
                goto END;
            }
            finally
            {
                if (DataReader != null)
                {
                    DataReader.Close();
                }
                if (dbConnection.State == ConnectionState.Open)
                {
                    dbConnection.Close();
                }
            }
            if (emailList.Count == 0)
            {
                Log.AppendLine("No eligible translator was found to send offer email.");
                WriteEventLog = false;
                goto END;
            }

            StringBuilder Builder     = new StringBuilder();
            OrderFilter   FilterOrder = new OrderFilter();

            FilterOrder.cultureId     = ApplicationContext.CultureID;
            FilterOrder.ApplicationId = ApplicationContext.ApplicationID;

            Log.AppendFormat("Sending email to {0} translator(s).", emailList.Count);
            Log.AppendLine();
            foreach (OfferEmailModel model in emailList)
            {
                bool          SendStatus   = false;
                string        ErrorMessage = null;
                OrderWebModel OrderModel   = null;
                FilterOrder.orderNo = model.OrderNo;

                try
                {
                    OrderModel = DataAccess.GetOrderDetailsById(FilterOrder);
                    string Code    = null;
                    string Comment = string.Empty;

                    if (model.DeliveryLevelName == "Light")
                    {
                        Code    = "04003";
                        Comment = CommentLightData[ApplicationContext.CultureID];
                    }
                    else if (model.DeliveryLevelName == "Expert")
                    {
                        Code    = "04012";
                        Comment = CommentExpertData[ApplicationContext.CultureID];
                    }
                    else if (model.DeliveryLevelName == "Business")
                    {
                        Code    = "04013";
                        Comment = CommentBusinessData[ApplicationContext.CultureID];
                    }
                    else
                    {
                        continue;
                    }

                    if (model.TranslationType == 2 || model.TranslationType == 5)       // Type is Appointed or Appointed-Native-Check
                    {
                        Code = "04004";
                    }

                    string             OrderTitle = string.Format("{0}->{1} {2} {3} {4}", OrderModel.SourceLanguage, OrderModel.TargetLanguage, OrderModel.TranslationTypeName, OrderModel.TranslationFieldName, OrderModel.DeliveryPlan);
                    int                CharCount  = (int)(OrderModel.CountType == 1 ? OrderModel.WordCount : OrderModel.CharacterCount);
                    string             CountType  = OrderModel.CountType == 1 ? "words" : "characters";
                    EmailTemplateModel Template   = DataAccess.GetEmailTemplateByTemplateCode(Code, ApplicationContext.CultureID);

                    TranslatorPaymentQueryModel TrPaymentModel = new TranslatorPaymentQueryModel();
                    TrPaymentModel.OrderNo      = model.OrderNo;
                    TrPaymentModel.TranslatorID = model.TranslatorID.Value;
                    DataAccess.GetTranslatorPaymentAmount(TrPaymentModel);

                    decimal PaymentAmount_AU, PaymentAmount_JP;
                    if (TrPaymentModel.ReturnValue == 0)
                    {
                        DataAccess.DirectCurrencyConversion(OrderModel.CurrencyID.Value, 3, OrderModel.OrderDate.Value, TrPaymentModel.TranslatorPayment, out PaymentAmount_JP);
                        DataAccess.DirectCurrencyConversion(OrderModel.CurrencyID.Value, 7, OrderModel.OrderDate.Value, TrPaymentModel.TranslatorPayment, out PaymentAmount_AU);
                    }
                    else
                    {
                        PaymentAmount_JP = PaymentAmount_AU = 0.0M;
                    }


                    Builder.Clear();
                    Builder.Append(Template.Body);
                    Builder.Replace("[SECTION-1]", "");
                    Builder.Replace("[SECTION-3]", Section3Data[ApplicationContext.CultureID]);
                    Builder.Replace("%txt01%", OrderTitle);
                    Builder.Replace("%txt02%", OrderModel.SourceLanguage);
                    Builder.Replace("%txt03%", string.Format("{0} {1}", CharCount.ToString(), CountType));
                    Builder.Replace("%txt04%", OrderModel.DeliveryPlan);
                    Builder.Replace("%txt06%", OrderModel.ClientNo);
                    Builder.Replace("%txt07%", OrderModel.OrderNo);
                    Builder.Replace("%txt08%", Comment);
                    Builder.Replace("%txt09%", OrderModel.MenuScript.Substring(0, OrderModel.MenuScript.Length / 3));
                    Builder.Replace("%txt10%", string.Format("{0} AUD ({1} JPY)", PaymentAmount_AU.ToString(), PaymentAmount_JP.ToString()));
                    Builder.Replace("%txtDeliveryLevel%", model.DeliveryLevelName);

                    try
                    {
                        SendStatus   = Utility.SendEmail(model.EmailTo, null, null, Template.Subject, Builder.ToString(), null, false);
                        ErrorMessage = null;
                        Log.AppendFormat("--> Order: {0}, Stat: SENT {1}.", OrderModel.OrderNo, model.EmailTo);
                        Log.AppendLine();
                    }
                    catch (Exception ex)
                    {
                        ErrorMessage = Utility.DeepestExceptionMessage(ex);
                        Log.AppendFormat("--> Order: {0}, Stat: NOT SENT {1} Error: {2}.", OrderModel.OrderNo, model.EmailTo, ErrorMessage);
                        Log.AppendLine();
                    }
                    if (model.LogCommand == "INSERT")
                    {
                        SqlDataRecord Record = new SqlDataRecord(Col_NewLogEntry);
                        Record.SetValue(Record.GetOrdinal("OrderID"), model.OrderID);
                        Record.SetValue(Record.GetOrdinal("TranslatorID"), model.TranslatorID);
                        Record.SetValue(Record.GetOrdinal("Status"), (SendStatus == true ? "SENT" : "NOT SENT"));
                        if (ErrorMessage == null)
                        {
                            Record.SetDBNull(Record.GetOrdinal("ErrorMessage"));
                        }
                        else
                        {
                            Record.SetValue(Record.GetOrdinal("ErrorMessage"), ErrorMessage);
                        }
                        NewLogList.Add(Record);
                    }
                    else if (model.LogCommand == "UPDATE")
                    {
                        SqlDataRecord Record = new SqlDataRecord(Col_OldLogEntry);
                        Record.SetValue(Record.GetOrdinal("ID"), model.OfferLogID);
                        Record.SetValue(Record.GetOrdinal("Status"), SendStatus);
                        if (ErrorMessage == null)
                        {
                            Record.SetDBNull(Record.GetOrdinal("ErrorMessage"));
                        }
                        else
                        {
                            Record.SetValue(Record.GetOrdinal("ErrorMessage"), ErrorMessage);
                        }
                        ModifyLogList.Add(Record);
                    }
                }
                catch (Exception ex)
                {
                    string message = Utility.DeepestExceptionMessage(ex);
                    Utility.SetErrorLog(null, SourceName, message);
                    Log.AppendFormat("Error while accessing database: {0}", message);
                    Log.AppendLine();
                }
            }

            Log.AppendLine("Updating offer email log data.");
            try
            {
                dbConnection.Open();
                cmd             = new SqlCommand("SP_LogOfferEmailInfo_TVP", dbConnection);
                cmd.CommandType = CommandType.StoredProcedure;
                SqlParameter ParamNewLog = new SqlParameter("@LOG_NEW", SqlDbType.Structured);
                ParamNewLog.Direction = ParameterDirection.Input;
                ParamNewLog.TypeName  = "TYPE_NEW_EMAILLOG";
                ParamNewLog.Value     = NewLogList.Count == 0 ? null : NewLogList;
                SqlParameter ParamModifyLog = new SqlParameter("@LOG_MODIFY", SqlDbType.Structured);
                ParamModifyLog.Direction = ParameterDirection.Input;
                ParamModifyLog.TypeName  = "TYPE_MODIFY_EMAILLOG";
                ParamModifyLog.Value     = ModifyLogList.Count == 0 ? null : ModifyLogList;
                cmd.Parameters.Add(ParamNewLog);
                cmd.Parameters.Add(ParamModifyLog);
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                string message = Utility.DeepestExceptionMessage(ex);
                Utility.SetErrorLog(null, SourceName, message);
                Log.AppendFormat("Error while updating log data: {0}", message);
                Log.AppendLine();
            }
            finally
            {
                if (dbConnection.State == ConnectionState.Open)
                {
                    dbConnection.Close();
                }
            }

END:
            NewLogList.Clear();
            ModifyLogList.Clear();

            Log.AppendLine("Process finished.");
            if (WriteEventLog == true)
            {
                ServiceLog.WriteEntry(Log.ToString(), EventLogEntryType.Information, 100);
            }
            return;
        }
示例#9
0
        /// <summary>
        /// Returns an enumerator that iterates through the collection.
        /// </summary>
        /// <returns>A <see cref="T:System.Collections.Generic.IEnumerator`1" /> that can be used to iterate through the collection.</returns>
        public IEnumerator <SqlDataRecord> GetEnumerator()
        {
            if (_data == null || !_data.Any())
            {
                yield break;
            }

            PropertyInfo[] properties = _importType.GetProperties();
            StringComparer comparer   = StringComparer.InvariantCultureIgnoreCase;

            this._validator = this._validator ?? new ObjectValidator();
            bool?isDynamicType = null;

            int errorColumnOrdinal = -1;
            var sqlMetaArray       = _sqlMetadata.ToArray();

            if (_sqlMetadata.Any(x => comparer.Equals(x.Name, _errorColumn)))
            {
                SqlDataRecord tempRecord = new SqlDataRecord(sqlMetaArray);
                errorColumnOrdinal = tempRecord.GetOrdinal(_errorColumn);                 //will cause an exception if it does not exist, hence the any check
                tempRecord         = null;
            }

            foreach (dynamic row in _data)
            {
                _rowIndex++;
                SqlDataRecord record = new SqlDataRecord(sqlMetaArray);
                List <string> errors = new List <string>();

                //check the first object to see if it is a dynamic type as we dont need to run it throught the object mapper in that case
                if (!isDynamicType.HasValue)
                {
                    isDynamicType = FileIOHelpers.IsDynamicType(row);
                }

                T rowObj = default(T);

                if (isDynamicType.Value)
                {
                    try
                    {
                        rowObj = FileIOUtilities.MapObject <T>(row, _rowIndex, _validator, _fileValuesMapper, ref errors);
                    }
                    catch (Exception ex)
                    {
                        errors.Add(ex.ToString());
                    }
                }
                else
                {
                    rowObj = row;
                }

                try
                {
                    //built in data annotation validation
                    this._validator.TryValidate(rowObj, ref errors);
                    //custom validation
                    if (_customValidator != null)
                    {
                        _customValidator.Invoke(rowObj, ref errors);
                    }
                }
                catch (Exception ex)
                {
                    errors.Add(ex.ToString());
                }

                ISqlRecordMapper mapperObj = null;
                //if they provide a custom mapper use that one over the interface.
                if (this._customSqlMapper != null)
                {
                    this._customSqlMapper.Invoke(rowObj, record, _rowIndex, errors);
                }
                else if ((mapperObj = rowObj as ISqlRecordMapper) != null)
                {
                    mapperObj.MapSqlRecord(record, _rowIndex, errors);
                }
                else                 //last ditch effort, hopefully they don't rely on this
                {
                    object val;
                    //try to set the rows from the metadata, and the properties
                    foreach (SqlMetaData metaData in _sqlMetadata)
                    {
                        string name = metaData.Name;
                        val = null;
                        if (!comparer.Equals(name, _errorColumn))
                        {
                            var prop = properties.FirstOrDefault(x => comparer.Equals(x.Name, name));
                            if (prop != null && (val = prop.GetValue(rowObj, null)) != null)
                            {
                                record.SetValue(record.GetOrdinal(name), val);
                            }
                        }
                    }
                    //if an error column is defined, set the import errors
                    if (errorColumnOrdinal != -1 && errors.Count != 0)
                    {
                        string errorMessage = FileIOHelpers.ErrorsToXml(errors, _rowIndex);
                        record.SetString(errorColumnOrdinal, errorMessage);
                    }
                }
                yield return(record);
            }
        }