Ejemplo n.º 1
0
        private void ClickEarningsItem(CommissionItem item)
        {
            if (this.GoToDetailsScreen == null)
            {
                throw new NullReferenceException(string.Format("I, {0} dont dont know what to do with the selected item", this.GetType().FullName));
            }

            this.GoToDetailsScreen(item);
        }
Ejemplo n.º 2
0
        private bool HasDetails(CommissionItem item)
        {
            Fragment fragment = DecideDetailsFragment(item.Name);

            if (fragment == null)
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 3
0
        private void GoToDetailsScreen(CommissionItem item)
        {
            string name = item.Name;

            Fragment fragment = this.DecideDetailsFragment(name);

            if (fragment == null)
            {
                return;
            }

            this.parentActivity.LoadFragment(fragment, CommissionsView.CommissionDetailsTag);
            this.parentActivity.SetScreenTitle(name);
        }
Ejemplo n.º 4
0
        public Int32 UpdateCommissionItem(CommissionItem item)
        {
            DataCommand command = DataCommandManager.GetDataCommand("UpdateCommissionItem");

            command.SetParameterValue("@SysNo", item.SysNo);
            command.SetParameterValue("@CommissionMasterSysNo", item.CommissionMasterSysNo);
            command.SetParameterValue("@VendorManufacturerSysNo", item.VendorManufacturerSysNo);
            command.SetParameterValue("@RuleSysNo", item.RuleSysNo);
            command.SetParameterValue("@RentFee", item.Rent);
            command.SetParameterValue("@DeliveryFee", item.DeliveryFee);
            command.SetParameterValue("@SaleCommissionAmt", item.SalesCommissionFee);
            command.SetParameterValue("@OrderCommissionAmt", item.OrderCommissionFee);
            command.SetParameterValue("@TotalSaleAmt", item.TotalSaleAmt);
            command.SetParameterValue("@EditUser", item.EditUser);
            command.SetParameterValue("@CompanyCode", GlobalSettings.CompanyCode);

            return(command.ExecuteNonQuery());
        }
Ejemplo n.º 5
0
        public CommissionMaster GetManualCommissionMaster(CommissionMaster master, bool isCreateCommission = false)
        {
            #region valid

            if (!master.MerchantSysNo.HasValue)
            {
                throw new BizException(GetMessageString("Commission_Error_VendorSelect"));
            }
            if (!master.BeginDate.HasValue || !master.EndDate.HasValue)
            {
                throw new BizException(GetMessageString("Commission_Error_DateSelect"));
            }
            if (master.BeginDate.Value > master.EndDate.Value)
            {
                throw new BizException(GetMessageString("Commission_Error_StartMoreThanEnd"));
            }
            DateTime now = DateTime.Now;
            if (master.EndDate.Value > now.Date.AddDays(1))
            {
                throw new BizException(GetMessageString("Commission_Error_EndMoreThanNow"));
            }
            if (master.EndDate.Value > now)
            {
                master.EndDate = now;
            }

            if (isCreateCommission)
            {
                //供应商是否可手工结算
                var vendorInfo = ObjectFactory <VendorProcessor> .Instance.LoadVendorFinanceInfo(master.MerchantSysNo.Value);

                if (vendorInfo == null)
                {
                    throw new BizException(GetMessageString("Commission_Error_InvalidPayPeriod"));
                }
                var manualPayPeriodTypes = AppSettingManager.GetSetting("PO", "ManualSettleCommissionPayType").Split(',');
                if (!manualPayPeriodTypes.ToList().Exists(p => p == (vendorInfo.PayPeriodType.PayTermsNo ?? 0).ToString()))
                {
                    throw new BizException(GetMessageString("Commission_Error_NotManualPayPeriod"));
                }
            }

            #endregion

            #region load data
            master.ItemList = new List <CommissionItem>();

            var details = CommissionDA.QueryCommissionItemDetails(master.MerchantSysNo.Value, master.BeginDate.Value, master.EndDate.Value, master.CompanyCode);
            if (details != null)
            {
                var groupDetails = details.Where(p => p.VendorManufacturerSysNo > 0).GroupBy(p => p.VendorManufacturerSysNo);
                var rules        = CommissionDA.QueryCommissionRuleByMerchantSysNo(master.MerchantSysNo.Value);
                if (rules.Count > 0)
                {
                    foreach (var group in groupDetails)
                    {
                        var commissionItem = new CommissionItem();
                        commissionItem.VendorManufacturerSysNo = group.Key;
                        var rule = rules.FirstOrDefault(p => p.VendorManufacturerSysNo == group.Key);
                        if (rule == null || string.IsNullOrEmpty(rule.StagedSaleRuleItemsXml))
                        {
                            commissionItem.RuleSysNo = 0;
                        }
                        else
                        {
                            rule.SaleRuleEntity = SerializationUtility.XmlDeserialize <VendorStagedSaleRuleEntity>(rule.StagedSaleRuleItemsXml);

                            var agent = group.Where(p => !string.IsNullOrEmpty(p.ReferenceSysNo));
                            if (agent == null)
                            {
                                continue;
                            }
                            agent.ForEach(p => p.SalePrice = Math.Round((p.SalePrice ?? 0) - (p.Point ?? 0) / 10m - Math.Abs((p.DiscountAmout ?? 0) / (p.Quantity ?? 0)), 2));
                            commissionItem.TotalSaleAmt    = agent.Sum(p => p.SalePrice * (p.Quantity ?? 0) - Math.Abs(p.PromotionDiscount));
                            commissionItem.RentFee         = rule.RentFee;
                            //销售提成不在比较保底
                            //commissionItem.SalesCommissionFee = Math.Max(GetSaleCommissionAmount(commissionItem.TotalSaleAmt, rule.RuleEntity), rule.RuleEntity.MinCommissionAmt);
                            commissionItem.SalesCommissionFee = GetSaleCommissionAmount(commissionItem.TotalSaleAmt ?? 0, rule.SaleRuleEntity);
                            commissionItem.DetailList         = agent.ToList();
                            #region 初算提成和运费
                            #region 运费
                            commissionItem.DetailDeliveryList = new List <CommissionItemDetail>();
                            foreach (var item in agent)
                            {
                                if (item.ReferenceType == VendorCommissionReferenceType.SO && !commissionItem.DetailDeliveryList.Exists(p => p.ReferenceSysNo == item.ReferenceSysNo))
                                {
                                    commissionItem.DetailDeliveryList.Add(item);
                                }
                            }
                            commissionItem.DeliveryFee = rule.DeliveryFee;
                            #endregion

                            #region 订单提成
                            commissionItem.DetailOrderList = new List <CommissionItemDetail>();
                            foreach (var item in agent)
                            {
                                if (item.ReferenceType == VendorCommissionReferenceType.SO && !commissionItem.DetailOrderList.Exists(p => p.ReferenceSysNo == item.ReferenceSysNo))
                                {
                                    commissionItem.DetailOrderList.Add(item);
                                }
                            }

                            var autoRmaOrder = new List <CommissionItemDetail>();
                            foreach (var autoRma in agent.Where(p => p.ReferenceType == VendorCommissionReferenceType.RMA && p.HaveAutoRMA))
                            {
                                if (!autoRmaOrder.Exists(p => p.SOSysNo == autoRma.SOSysNo))
                                {
                                    autoRmaOrder.Add(autoRma);
                                }
                            }
                            commissionItem.OrderCommissionFee = rule.OrderCommissionAmt;
                            commissionItem.DetailOrderList.AddRange(autoRmaOrder);
                            #endregion
                            #endregion

                            commissionItem.RuleSysNo = rule.CommissionSysNo;
                            commissionItem.SaleRule  = rule.SaleRuleEntity;

                            #region 更新基础信息

                            SetDetailDetailSysNo(commissionItem.DetailList);
                            SetDetailDetailSysNo(commissionItem.DetailOrderList);
                            SetDetailDetailSysNo(commissionItem.DetailDeliveryList);

                            var itemBaseInfo = CommissionDA.QueryVendorManufacturerBySysNo(group.Key);
                            if (itemBaseInfo != null)
                            {
                                commissionItem.ManufacturerName = itemBaseInfo.ManufacturerName;
                                commissionItem.BrandName        = itemBaseInfo.BrandName;
                                commissionItem.C3Name           = itemBaseInfo.C3Name;
                                commissionItem.C2Name           = itemBaseInfo.C2Name;
                            }
                            #endregion
                        }
                        master.ItemList.Add(commissionItem);
                    }
                    #region 细算
                    //如果一个订单有两个或者多个供应商,需获取最大的进行匹配计算,此逻辑为订单提成和运费相关
                    var itemList = master.ItemList;
                    for (int i = 0; i < itemList.Count; i++)
                    {
                        if (itemList[i].RuleSysNo == 0)
                        {
                            continue;
                        }
                        #region 运费
                        if (itemList[i].DetailDeliveryList != null)
                        {
                            for (int k = 0; k < itemList[i].DetailDeliveryList.Count;)
                            {
                                var detail = itemList[i].DetailDeliveryList[k];
                                k++;
                                for (int j = i + 1; j < itemList.Count; j++)
                                {
                                    if (itemList[j].DetailDeliveryList != null && itemList[j].DetailDeliveryList.Exists(p => p.ReferenceSysNo == detail.ReferenceSysNo && itemList[i].DeliveryFee.Value <= itemList[j].DeliveryFee.Value))
                                    {
                                        itemList[i].DetailDeliveryList.Remove(detail);
                                        k--;
                                        break;
                                    }
                                }
                            }
                        }
                        #endregion

                        #region 订单提成

                        if (itemList[i].DetailOrderList != null)
                        {
                            for (int k = 0; k < itemList[i].DetailOrderList.Count;)
                            {
                                var detail = itemList[i].DetailOrderList[k];
                                k++;
                                for (int j = i + 1; j < itemList.Count; j++)
                                {
                                    if (itemList[j].DetailOrderList != null && itemList[j].DetailOrderList.Exists(p => p.ReferenceSysNo == detail.ReferenceSysNo && itemList[i].OrderCommissionFee <= itemList[j].OrderCommissionFee))
                                    {
                                        //移除较低价的订单
                                        itemList[i].DetailOrderList.Remove(detail);
                                        k--;
                                        break;
                                    }
                                }
                            }
                        }

                        #endregion

                        itemList[i].DeliveryQty      = itemList[i].DetailDeliveryList.Count;
                        itemList[i].TotalDeliveryFee = itemList[i].DeliveryQty * itemList[i].DeliveryFee;

                        itemList[i].OrderQty = itemList[i].DetailOrderList.Count;
                        itemList[i].TotalOrderCommissionFee = (itemList[i].DetailOrderList.Count(p => p.ReferenceType == VendorCommissionReferenceType.SO) - itemList[i].DetailOrderList.Count(p => p.ReferenceType == VendorCommissionReferenceType.RMA)) * itemList[i].OrderCommissionFee;
                    }
                    #endregion
                    //手工结算店租为0
                    //master.RentFee = rules.Sum(p => p.RentFee ?? 0);
                    master.RentFee            = 0;
                    master.DeliveryFee        = master.ItemList.Sum(p => p.TotalDeliveryFee ?? 0);
                    master.OrderCommissionFee = master.ItemList.Sum(p => p.TotalOrderCommissionFee ?? 0);
                    master.SalesCommissionFee = master.ItemList.Sum(p => p.SalesCommissionFee ?? 0);
                    master.TotalAmt           = master.RentFee + master.DeliveryFee + master.OrderCommissionFee + master.SalesCommissionFee;
                }
            }
            #endregion

            return(master);
        }
Ejemplo n.º 6
0
        public IHttpActionResult GetCommissionList(string userId, string accessToken, int channel, int platform, string ver, int pageIndex, int pageSize)
        {
            Logger.WriterLogger("Referral.GetCommissionList, Params: " + string.Format("userId={0}&accessToken={1}&channel={2}&platform={3}&ver={4}&pageIndex={5}&pageSize={6}", userId, accessToken, channel, platform, ver, pageIndex, pageSize), LoggerType.Info);

            // 保存访问信息
            base.SaveVisitInfo(userId, channel, platform, ver);

            // 验证令牌
            int accessTookenCode = VerifyAccessToken(accessToken);

            if (accessTookenCode > 0)
            {
                return(base.JsonFaultResult(new CommonException(accessTookenCode).GetMessage(), "Referral.GetCommissionList"));
            }

            Member member = GetMember(userId.ToSeesionId());

            if (member != null)
            {
                List <CommissionItem> items = new List <CommissionItem>();

                BalanceDetailQuery query = new BalanceDetailQuery();
                query.UserId    = member.UserId;
                query.PageIndex = pageIndex;
                query.PageSize  = pageSize;

                DbQueryResult dbResult = MemberProcessor.GetMySplittinDetails(query, null);

                DataTable dt = dbResult.Data as DataTable;

                if (dt != null)
                {
                    CommissionItem item = null;

                    foreach (DataRow current in dt.Rows)
                    {
                        item = new CommissionItem();


                        if (current["JournalNumber"] != DBNull.Value)
                        {
                            item.JournalNumber = (long)current["JournalNumber"];
                        }

                        if (current["SubUserName"] != DBNull.Value)
                        {
                            item.SubUserName = (string)current["SubUserName"];
                        }

                        item.TradeType = 0;
                        if (current["TradeType"] != DBNull.Value)
                        {
                            item.TradeType = (int)current["TradeType"];
                        }

                        string balance = "0.00";
                        if (item.TradeType == 4)
                        {
                            if (current["Expenses"] != DBNull.Value)
                            {
                                balance = "-" + Convert.ToDouble(current["Expenses"]).ToString("0.00");
                            }
                        }

                        else
                        {
                            if (current["Income"] != DBNull.Value)
                            {
                                balance = "+" + Convert.ToDouble(current["Income"]).ToString("0.00");
                            }
                        }

                        item.Balance = balance;

                        if (current["OrderId"] != DBNull.Value)
                        {
                            item.OrderId = (string)current["OrderId"];
                        }

                        if (current["TradeDate"] != DBNull.Value)
                        {
                            item.TradeDate = ((DateTime)current["TradeDate"]).ToString("yyyy-MM-dd HH:mm:ss");
                        }

                        if (current["Remark"] != DBNull.Value)
                        {
                            item.Remark = (string)current["Remark"];
                        }

                        if (current["IsUse"] != DBNull.Value)
                        {
                            item.IsUse = (bool)current["IsUse"];
                        }

                        if (current["OrderTotal"] != DBNull.Value)
                        {
                            item.OrderTotal = (decimal)current["OrderTotal"];
                        }



                        items.Add(item);
                    }
                }


                CommissionResult data = new CommissionResult();
                data.TotalNumOfRecords   = dbResult.TotalRecords;
                data.HistoryCommission   = MemberProcessor.GetUserAllSplittin(member.UserId);
                data.AvailableCommission = MemberProcessor.GetUserUseSplittin(member.UserId);
                data.CommissionList      = items;

                return(base.JsonActionResult(new StandardResult <CommissionResult>()
                {
                    code = 0,
                    msg = "全部佣金",
                    data = data
                }));
            }


            else
            {
                return(base.JsonFaultResult(new CommonException(40201).GetMessage(), "Referral.GetCommissionList"));
            }
        }