public void CreateLine(RetailSOLine soDaily)
        {
            EntityKey[] entitykey = new EntityKey[1];
            if (!string.IsNullOrEmpty(soDaily.Series))
            {
                string orderDate = soDaily.Date.ToShortDateString();

                var callContextLine = new CallContext()
                {
                    MessageId   = Guid.NewGuid().ToString(),
                    LogonAsUser = string.Format(@"{0}\{1}", UserAccount.Domain, UserAccount.Username),
                    Language    = "en-us"
                };

                var lineEntity = new AxdEntity_StmSalesSoDailyLine();

                lineEntity.Series = soDaily.Series;
                lineEntity.Model  = soDaily.Model;
                lineEntity.Sink   = soDaily.Sink;

                if (soDaily.Date != DateTime.MinValue)
                {
                    lineEntity.SalesDate          = DateTime.ParseExact(orderDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                    lineEntity.SalesDateSpecified = true;
                }

                //lineEntity.SalesDate = orderDate;
                //lineEntity.SalesDateSpecified = true;
                lineEntity.StmStoreId = soDaily.Top;//ใช้เก็บข้อมูล Top แทน
                //lineEntity.SalesPoolId = soDaily.Pool;
                lineEntity.SalesQty                 = Convert.ToDecimal(soDaily.Qty);
                lineEntity.SalesQtySpecified        = true;
                lineEntity.SalesAmount              = Convert.ToDecimal(soDaily.Amount);
                lineEntity.SalesAmountSpecified     = true;
                lineEntity.SalesOrderDaily          = Convert.ToInt64(soDaily.RecIdHeader);
                lineEntity.SalesOrderDailySpecified = true;

                var soLine = new AxdSTMSODailyLine()
                {
                    StmSalesSoDailyLine = new AxdEntity_StmSalesSoDailyLine[1] {
                        lineEntity
                    }
                };

                using (var client = new STMSODailyLineServiceClient())
                {
                    client.ClientCredentials.Windows.ClientCredential.Domain   = UserAccount.Domain;
                    client.ClientCredentials.Windows.ClientCredential.UserName = UserAccount.Username;
                    client.ClientCredentials.Windows.ClientCredential.Password = UserAccount.Password;
                    entitykey = client.create(callContextLine, soLine);
                }

                long refRecId = Convert.ToInt64(entitykey[0].KeyData[0].Value);
                RetailSOLog.Create(refRecId, soDaily.CreateBy);
            }
        }
        public void EditLine(RetailSOLine soDaily)
        {
            EntityKey[]       entitykey = new EntityKey[1];
            AxdSTMSODailyLine axdSoLine = new AxdSTMSODailyLine();
            var callContext             = new CallContext()
            {
                MessageId   = Guid.NewGuid().ToString(),
                LogonAsUser = string.Format(@"{0}\{1}", UserAccount.Domain, UserAccount.Username),
                Language    = "en-us"
            };

            KeyField keyField = new KeyField()
            {
                Field = "RecId", Value = soDaily.RecId
            };
            EntityKey entityKey = new EntityKey();

            entityKey.KeyData = new KeyField[1] {
                keyField
            };

            EntityKey[] entityKeys = new EntityKey[1] {
                entityKey
            };

            using (var client = new STMSODailyLineServiceClient())
            {
                client.ClientCredentials.Windows.ClientCredential.Domain   = UserAccount.Domain;
                client.ClientCredentials.Windows.ClientCredential.UserName = UserAccount.Username;
                client.ClientCredentials.Windows.ClientCredential.Password = UserAccount.Password;
                axdSoLine = client.read(callContext, entityKeys);
            }

            string orderDate = soDaily.Date.ToShortDateString();

            using (var client = new STMSODailyLineServiceClient())
            {
                AxdEntity_StmSalesSoDailyLine soLineEntity = axdSoLine.StmSalesSoDailyLine[0];
                var axdsoline2 = new AxdSTMSODailyLine()
                {
                    ClearNilFieldsOnUpdate          = axdSoLine.ClearNilFieldsOnUpdate,
                    ClearNilFieldsOnUpdateSpecified = true,
                    DocPurpose          = axdSoLine.DocPurpose,
                    DocPurposeSpecified = true,
                    SenderId            = axdSoLine.SenderId
                };

                var solineEntityNew = new AxdEntity_StmSalesSoDailyLine();
                solineEntityNew._DocumentHash  = soLineEntity._DocumentHash; ///for update method
                solineEntityNew.RecId          = Convert.ToInt64(soDaily.RecId);
                solineEntityNew.RecIdSpecified = true;

                if (soDaily.Date != DateTime.MinValue)
                {
                    solineEntityNew.SalesDate = DateTime.ParseExact(orderDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                }
                else
                {
                    solineEntityNew.SalesDate = soLineEntity.SalesDate;
                }

                solineEntityNew.SalesDateSpecified = true;
                //solineEntityNew.SalesPoolId = soDaily.Pool;
                solineEntityNew.Series                   = soDaily.Series;
                solineEntityNew.Model                    = soDaily.Model;
                solineEntityNew.Sink                     = soDaily.Sink;
                solineEntityNew.SalesQty                 = Convert.ToDecimal(soDaily.Qty);
                solineEntityNew.SalesQtySpecified        = true;
                solineEntityNew.StmStoreId               = soDaily.Top;
                solineEntityNew.SalesAmount              = Convert.ToDecimal(soDaily.Amount);
                solineEntityNew.SalesAmountSpecified     = true;
                solineEntityNew.SalesOrderDaily          = Convert.ToInt64(soDaily.RecIdHeader);
                solineEntityNew.SalesOrderDailySpecified = true;
                axdsoline2.StmSalesSoDailyLine           = new AxdEntity_StmSalesSoDailyLine[1] {
                    solineEntityNew
                };

                client.ClientCredentials.Windows.ClientCredential.Domain   = UserAccount.Domain;
                client.ClientCredentials.Windows.ClientCredential.UserName = UserAccount.Username;
                client.ClientCredentials.Windows.ClientCredential.Password = UserAccount.Password;
                client.update(callContext, entityKeys, axdsoline2);
            }
        }