Exemplo n.º 1
0
        public DistributorReportEditForm(EditFormMode mode, DistributorReportItem distributorReportItem)
            : base(mode, distributorReportItem)
        {
            CheckHelper.ArgumentWithinCondition(mode == EditFormMode.View, "Form is readonly.");

            InitializeComponent();
        }
Exemplo n.º 2
0
 protected override void SetDtoToControls(DistributorReportItem distributorReportItem)
 {
     _distributorNameTextBox.Text            = distributorReportItem.DistributorName;
     _distributorSpentNumericUpDown.Value    = distributorReportItem.DistributorSpent;
     _distributorReceivedNumericUpDown.Value = distributorReportItem.DistributorReceived;
     _distributorBalanceNumericUpDown.Value  = distributorReportItem.DistributorBalance;
     _purchaserSpentNumericUpDown.Value      = distributorReportItem.PurchaserSpent;
     _purchaserReceivedNumericUpDown.Value   = distributorReportItem.PurchaserReceived;
     _purchaserBalanceNumericUpDown.Value    = distributorReportItem.PurchaserBalance;
     _totalBalanceNumericUpDown.Value        = distributorReportItem.TotalBalance;
 }
Exemplo n.º 3
0
 protected override object[] GetDtoValues(DistributorReportItem distributorReportItem)
 {
     return
         (new object[]
     {
         distributorReportItem.DistributorName,
         distributorReportItem.DistributorSpent,
         distributorReportItem.DistributorReceived,
         distributorReportItem.DistributorBalance,
         distributorReportItem.PurchaserSpent,
         distributorReportItem.PurchaserReceived,
         distributorReportItem.PurchaserBalance,
         distributorReportItem.TotalBalance
     });
 }
Exemplo n.º 4
0
        private static DistributorReportItem GetOlesyaReportItem()
        {
            var distributorReportItem =
                new DistributorReportItem
            {
                Id = UserMockFactory.Olesya.Id,

                DistributorName  = UserMockFactory.Olesya.GetFullName(),
                DistributorSpent =
                    (DistributorTransferMockFactory.Olesya_Transfer_1.Amount / DistributorTransferMockFactory.Olesya_Transfer_1.RublesPerDollar).ToMoney() +
                    (DistributorTransferMockFactory.Olesya_Transfer_2.Amount / DistributorTransferMockFactory.Olesya_Transfer_2.RublesPerDollar).ToMoney() +
                    (OrderMockFactory.Order_1.DistributorSpentOnDelivery / OrderMockFactory.Order_1.RublesPerDollar).ToMoney() +
                    (OrderMockFactory.Order_2.DistributorSpentOnDelivery / OrderMockFactory.Order_2.RublesPerDollar).ToMoney(),
                DistributorReceived =
                    (OrderMockFactory.Order_1.CustomerPrepaid / OrderMockFactory.Order_1.RublesPerDollar).ToMoney() +
                    (OrderMockFactory.Order_2.CustomerPrepaid / OrderMockFactory.Order_2.RublesPerDollar).ToMoney() +
                    (OrderMockFactory.Order_1.CustomerPaid / OrderMockFactory.Order_1.RublesPerDollar).ToMoney() +
                    (OrderMockFactory.Order_2.CustomerPaid / OrderMockFactory.Order_2.RublesPerDollar).ToMoney(),
                PurchaserSpent =
                    // Order 1
                    OrderItemMockFactory.OrderItem_2.PurchaserPaid +
                    OrderItemMockFactory.OrderItem_6.PurchaserPaid +
                    // Order 2
                    OrderItemMockFactory.OrderItem_3.PurchaserPaid +
                    OrderItemMockFactory.OrderItem_4.PurchaserPaid +
                    ParcelMockFactory.Parcel_1.PurchaserSpentOnDelivery,
                PurchaserReceived =
                    (DistributorTransferMockFactory.Olesya_Transfer_1.Amount / DistributorTransferMockFactory.Olesya_Transfer_1.RublesPerDollar).ToMoney() +
                    (DistributorTransferMockFactory.Olesya_Transfer_2.Amount / DistributorTransferMockFactory.Olesya_Transfer_2.RublesPerDollar).ToMoney()
            };

            distributorReportItem.DistributorBalance =
                distributorReportItem.DistributorSpent - distributorReportItem.DistributorReceived;
            distributorReportItem.PurchaserBalance =
                distributorReportItem.PurchaserSpent - distributorReportItem.PurchaserReceived;
            distributorReportItem.TotalBalance =
                ((distributorReportItem.PurchaserBalance - distributorReportItem.DistributorBalance) / 2).ToMoney();

            return(distributorReportItem);
        }
Exemplo n.º 5
0
 public DistributorReportListForm(ListFormMode mode, DistributorReportItem distributorReportItem)
     : base(mode, distributorReportItem)
 {
     InitializeComponent();
 }
Exemplo n.º 6
0
        public DistributorReportItem[] GenerateDistributorsReport()
        {
            CheckHelper.WithinCondition(SecurityService.IsLoggedIn, "User is not logged in.");
            CheckHelper.WithinCondition(
                SecurityService.IsCurrentUserPurchaser ||
                SecurityService.IsCurrentUserDistributor,
                "Only purchaser and distributor can generate distributors report.");

            var persistenceService = Container.Get <IPersistentService>();

            var parcelQuery =
                persistenceService
                .GetEntitySet <DataAccess.Parcel>()
                .Where(p => p.Distributor != null);

            var distributorTransferQuery =
                persistenceService
                .GetEntitySet <DataAccess.DistributorTransfer>()
                .Where(dt => dt.Active);

            var currentUserId = SecurityService.CurrentUser.Id;

            if (!SecurityService.IsCurrentUserPurchaser)
            {
                CheckHelper.WithinCondition(
                    SecurityService.IsCurrentUserDistributor,
                    "Only purchaser and distributor can generate distributors report.");

                parcelQuery =
                    parcelQuery
                    .Where(p => p.DistributorId == currentUserId);

                distributorTransferQuery =
                    distributorTransferQuery
                    .Where(dt => dt.CreateUserId == currentUserId);
            }

            var distributorTransfers =
                distributorTransferQuery
                .Select(dt =>
                        new
            {
                DistributorId  = dt.CreateUserId,
                TransferAmount = dt.Amount / dt.RublesPerDollar
            })
                .ToArray();


            var distributorReportItemPrototypes =
                parcelQuery
                .SelectMany(p => p.Orders)
                .SelectMany(o => o.OrderItems)
                .Where(oi => oi.Active && oi.Order.Active && oi.Order.Parcel != null)
                .Select(oi =>
                        new
            {
                ParcelId = oi.Order.ParcelId.Value,
                oi.OrderId,

                DistributorId   = oi.Order.Parcel.DistributorId.Value,
                DistributorName = oi.Order.Parcel.Distributor.LastName + " " + oi.Order.Parcel.Distributor.FirstName,

                oi.Order.Parcel.PurchaserSpentOnDelivery,
                DistributorSpentOnDelivery = oi.Order.DistributorSpentOnDelivery / oi.Order.RublesPerDollar,
                CustomerPrepaid            = oi.Order.CustomerPrepaid / oi.Order.RublesPerDollar,
                CustomerPaid = oi.Order.CustomerPaid / oi.Order.RublesPerDollar,
                oi.PurchaserPaid,
                TotalPrice = oi.TotalPrice / oi.Order.RublesPerDollar
            })
                .ToArray();

            return
                (distributorReportItemPrototypes
                 .GroupBy(pr => pr.DistributorId)
                 .OrderBy(gr => gr.Key)
                 .Select(grouping =>
            {
                var distributorTransfersAmount =
                    distributorTransfers
                    .Where(dt => dt.DistributorId == grouping.Key)
                    .Sum(dt => dt.TransferAmount.ToMoney());

                var userReportItem =
                    new DistributorReportItem
                {
                    Id = grouping.Key,

                    DistributorName = grouping.Select(i => i.DistributorName).Distinct().Single(),
                    DistributorSpent =
                        distributorTransfersAmount +
                        grouping
                        .GroupBy(i => i.OrderId)
                        .Select(gr => gr.Select(i => i.DistributorSpentOnDelivery).Distinct().Single())
                        .Sum(i => i.ToMoney()),
                    DistributorReceived =
                        grouping
                        .GroupBy(i => i.OrderId)
                        .Select(gr => gr.Select(i => i.CustomerPrepaid).Distinct().Single())
                        .Sum(i => i.ToMoney()) +
                        grouping
                        .GroupBy(i => i.OrderId)
                        .Select(gr => gr.Select(i => i.CustomerPaid).Distinct().Single())
                        .Sum(i => i.ToMoney()),

                    PurchaserSpent =
                        grouping.Sum(i => i.PurchaserPaid.ToMoney()) +
                        grouping
                        .GroupBy(i => i.ParcelId)
                        .Select(gr => gr.Select(i => i.PurchaserSpentOnDelivery).Distinct().Single())
                        .Sum(i => i.ToMoney()),
                    PurchaserReceived = distributorTransfersAmount
                };

                userReportItem.DistributorBalance =
                    userReportItem.DistributorSpent - userReportItem.DistributorReceived;
                userReportItem.PurchaserBalance =
                    userReportItem.PurchaserSpent - userReportItem.PurchaserReceived;
                userReportItem.TotalBalance =
                    ((userReportItem.PurchaserBalance - userReportItem.DistributorBalance) / 2).ToMoney();

                return userReportItem;
            })
                 .ToArray());
        }