示例#1
0
        public override int GetHashCode()
        {
            int hashDocNo      = DocumentNo == null ? 0 : DocumentNo.GetHashCode();
            int hashCustomerId = CustomerId == null ? 0 : CustomerId.GetHashCode();
            int hashSalesmanId = SalesmanId == null ? 0 : SalesmanId.GetHashCode();

            return(hashDocNo * hashCustomerId * hashSalesmanId);
        }
        protected override Expression <Func <Sale, bool> > GetExpression()
        {
            if (!string.IsNullOrWhiteSpace(Keyword))
            {
                ExpressionObj = x =>
                                x.OrderNumber.ToLower().Contains(Keyword) || x.OrderReferenceNumber.ToLower().Contains(Keyword) ||
                                x.CustomerPhone.ToLower().Contains(Keyword) || x.CustomerName.ToLower().Contains(Keyword);
            }

            if (this.SaleChannel != SaleChannel.All)
            {
                ExpressionObj = ExpressionObj.And(x => x.SaleChannel == this.SaleChannel);
            }

            if (this.SaleFrom != SaleFrom.All)
            {
                ExpressionObj = ExpressionObj.And(x => x.SaleFrom == this.SaleFrom);
            }

            if (this.OrderState != All)
            {
                OrderState state = (OrderState)Enum.Parse(typeof(OrderState), this.OrderState);
                ExpressionObj = ExpressionObj.And(x => x.OrderState == state);
            }

            if (!string.IsNullOrWhiteSpace(DeliverymanId))
            {
                this.ExpressionObj = this.ExpressionObj.And(x => x.DeliverymanId == DeliverymanId);
            }

            if (!string.IsNullOrWhiteSpace(Thana) && Thana != All)
            {
                this.ExpressionObj = this.ExpressionObj.And(x => x.Address.Thana == Thana);
            }

            this.ExpressionObj = this.ExpressionObj.And(x => x.IsDealerSale == this.IsDealerSale);

            if (OnlyDues)
            {
                this.ExpressionObj =
                    this.ExpressionObj.And(x => x.DueAmount >= 1 && x.OrderState != Model.OrderState.Cancel);
            }

            if (IsDealerSale)
            {
                if (ParentId.IdIsOk())
                {
                    this.ExpressionObj = this.ExpressionObj.And(x => x.DealerId == ParentId);
                }
            }
            else
            {
                if (ParentId.IdIsOk())
                {
                    this.ExpressionObj = this.ExpressionObj.And(x => x.CustomerId == ParentId);
                }
            }

            if (SalesmanId.IdIsOk())
            {
                this.ExpressionObj = this.ExpressionObj.And(x => x.EmployeeInfoId == SalesmanId);
            }

            if (WarehouseId.IdIsOk() && WarehouseId != new Guid().ToString())
            {
                this.ExpressionObj = this.ExpressionObj.And(x => x.WarehouseId == WarehouseId);
            }

            //if (WarehouseId == new Guid().ToString())
            //{
            //    this.ExpressionObj = this.ExpressionObj.And(x => x.WarehouseId == null);
            //}


            this.ExpressionObj = this.ExpressionObj.And(x => x.IsTaggedSale == IsTaggedSale);
            if (IsTaggedSale)
            {
                this.ExpressionObj = this.ExpressionObj.And(x => x.SaleTag == SaleTag);
            }


            ExpressionObj = ExpressionObj.And(x => x.ShopId == ShopId);
            ExpressionObj = ExpressionObj.And(GenerateBaseEntityExpression());

            if (!string.IsNullOrWhiteSpace(DateSearchColumn))
            {
                switch (DateSearchColumn)
                {
                case "Created":
                    ExpressionObj = ExpressionObj.And(x => DbFunctions.TruncateTime(x.Created) >= StartDate && DbFunctions.TruncateTime(x.Created) <= EndDate);
                    break;

                case "OrderDate":
                    ExpressionObj = ExpressionObj.And(x => DbFunctions.TruncateTime(x.OrderDate) >= StartDate && DbFunctions.TruncateTime(x.OrderDate) <= EndDate);
                    break;

                case "DeliveryDate":
                    ExpressionObj = ExpressionObj.And(x => DbFunctions.TruncateTime(x.RequiredDeliveryDateByCustomer) >= StartDate && DbFunctions.TruncateTime(x.RequiredDeliveryDateByCustomer) <= EndDate);
                    break;

                default:
                    ExpressionObj = ExpressionObj.And(x => DbFunctions.TruncateTime(x.Modified) >= StartDate && DbFunctions.TruncateTime(x.Modified) <= EndDate);
                    break;
                }
            }

            return(ExpressionObj);
        }