Пример #1
0
        private void SaveDiscount(BillingDiscount bDiscount)
        {
            var task = ServiceProxyFactory.LifeTime(async factory =>
            {
                var billingService     = factory.Create <BillingServiceClient>();
                CountResult saveResult = await billingService.SaveDiscountAsync(SessionKey, bDiscount);
            });

            ProgressDialog.Start(ParentForm, task, false, SessionKey);
        }
Пример #2
0
        private async Task <List <BillingDiscount> > PrepareDataForBillingDiscount(BillingImport billingImport, long billingId, int CompanyId, int NewCustomerId, CancellationToken token)
        {
            var discounts         = new List <BillingDiscount>();
            var customerDiscounts = (await customerDiscountQueryProcessor.GetAsync(billingImport.CustomerId, token)).ToList();

            foreach (var csDiscount in customerDiscounts)
            {
                var discount = new BillingDiscount {
                    BillingId      = billingId,
                    DiscountType   = csDiscount.Sequence,
                    DiscountAmount = billingImport.BillingAmount * csDiscount.Rate,
                    AssignmentFlag = 0,
                };
                discounts.Add(discount);
            }
            return(discounts);
        }
Пример #3
0
        public async Task <int> SaveAsync(BillingDiscount discount, CancellationToken token = default(CancellationToken))
        {
            var result = 0;

            using (var scope = transactionScopeBuilder.Create())
            {
                await deleteBillingDiscountQueryProcessor.DeleteAsync(discount.BillingId);

                if (discount.DiscountAmount1 != 0)
                {
                    discount.DiscountAmount = discount.DiscountAmount1;
                    discount.DiscountType   = 1;
                    result += await addBillingDiscountQueryProcessor.SaveAsync(discount);
                }

                if (discount.DiscountAmount2 != 0)
                {
                    discount.DiscountAmount = discount.DiscountAmount2;
                    discount.DiscountType   = 2;
                    result += await addBillingDiscountQueryProcessor.SaveAsync(discount);
                }

                if (discount.DiscountAmount3 != 0)
                {
                    discount.DiscountAmount = discount.DiscountAmount3;
                    discount.DiscountType   = 3;
                    result += await addBillingDiscountQueryProcessor.SaveAsync(discount);
                }
                if (discount.DiscountAmount4 != 0)
                {
                    discount.DiscountAmount = discount.DiscountAmount4;
                    discount.DiscountType   = 4;
                    result += await addBillingDiscountQueryProcessor.SaveAsync(discount);
                }

                if (discount.DiscountAmount5 != 0)
                {
                    discount.DiscountAmount = discount.DiscountAmount5;
                    discount.DiscountType   = 5;
                    result += await addBillingDiscountQueryProcessor.SaveAsync(discount);
                }
                scope.Complete();
            }
            return(result);
        }
        public Task <int> SaveAsync(BillingDiscount BillingDiscount, CancellationToken token = default(CancellationToken))
        {
            var query = @"
INSERT INTO BillingDiscount
(BillingId
,DiscountType
,DiscountAmount
,AssignmentFlag
)
VALUES
(@BillingId
,@DiscountType
,@DiscountAmount
,@AssignmentFlag);
";

            return(dbHelper.ExecuteAsync(query, BillingDiscount, token));
        }
Пример #5
0
        private void SaveDiscount()
        {
            var task = ServiceProxyFactory.LifeTime(async factory =>
            {
                var service = factory.Create <BillingServiceClient>();

                BillingDiscount billDiscount = new BillingDiscount();
                billDiscount.BillingId       = BillingId;
                billDiscount.DiscountAmount1 = Discount1;
                billDiscount.DiscountAmount2 = Discount2;
                billDiscount.DiscountAmount3 = Discount3;
                billDiscount.DiscountAmount4 = Discount4;
                billDiscount.DiscountAmount5 = Discount5;

                var result = await service.SaveDiscountAsync(SessionKey, billDiscount);
            });

            ProgressDialog.Start(ParentForm, task, false, SessionKey);
        }
Пример #6
0
        private void Save()
        {
            try
            {
                if (!checkUpdate())
                {
                    ShowWarningDialog(MsgWngNoDataForProcess, "登録");
                    return;
                }
                foreach (Row row in grdDiscoutChousei.Rows)
                {
                    int check_zero = 0;
                    int billing_id = Convert.ToInt32(row.Cells["celId"].Value);

                    if (Convert.ToDecimal(row.Cells["celDiscountAmount1"].Value) != 0M &&
                        row.Cells["celDiscountAmount1"].Value.ToString() != "")
                    {
                        check_zero = 1;
                    }
                    else if (Convert.ToDecimal(row.Cells["celDiscountAmount2"].Value) != 0M &&
                             row.Cells["celDiscountAmount2"].Value.ToString() != "")
                    {
                        check_zero = 1;
                    }
                    else if (Convert.ToDecimal(row.Cells["celDiscountAmount3"].Value) != 0M &&
                             row.Cells["celDiscountAmount3"].Value.ToString() != "")
                    {
                        check_zero = 1;
                    }
                    else if (Convert.ToDecimal(row.Cells["celDiscountAmount4"].Value) != 0M &&
                             row.Cells["celDiscountAmount4"].Value.ToString() != "")
                    {
                        check_zero = 1;
                    }
                    else if (Convert.ToDecimal(row.Cells["celDiscountAmount5"].Value) != 0M &&
                             row.Cells["celDiscountAmount5"].Value.ToString() != "")
                    {
                        check_zero = 1;
                    }

                    if (check_zero == 0)
                    {
                        DeleteDiscounts(billing_id);
                    }
                    else
                    {
                        BillingDiscount bd = new BillingDiscount();
                        bd.AssignmentFlag  = 0;
                        bd.BillingId       = billing_id;
                        bd.DiscountAmount1 = Convert.ToDecimal(row.Cells["celDiscountAmount1"].Value);
                        bd.DiscountAmount2 = Convert.ToDecimal(row.Cells["celDiscountAmount2"].Value);
                        bd.DiscountAmount3 = Convert.ToDecimal(row.Cells["celDiscountAmount3"].Value);
                        bd.DiscountAmount4 = Convert.ToDecimal(row.Cells["celDiscountAmount4"].Value);
                        bd.DiscountAmount5 = Convert.ToDecimal(row.Cells["celDiscountAmount5"].Value);
                        SaveDiscount(bd);
                    }

                    ParentForm.DialogResult = DialogResult.OK;
                }
            }
            catch (Exception ex)
            {
                Debug.Fail(ex.ToString());
                NLogHandler.WriteErrorLog(this, ex, SessionKey);
            }
        }
Пример #7
0
 public async Task <int> SaveDiscount(BillingDiscount discount, CancellationToken token)
 => await billingDiscountProcessor.SaveAsync(discount, token);
Пример #8
0
        public async Task <IEnumerable <Billing> > SaveItemsAsync(IEnumerable <Billing> billings, CancellationToken token = default(CancellationToken))
        {
            var source = billings.ToArray();
            var result = new List <Billing>();

            using (var scope = transactionScopeBuilder.Create())
            {
                BillingInput billingInput = null;
                var          index        = 0;
                if (source[0].BillingInputId == null && source[0].Id == 0)
                {
                    billingInput = await addBillingInputQueryProcessor.AddAsync(token);
                }

                foreach (var billing in source)
                {
                    if (billingInput != null)
                    {
                        billing.BillingInputId = billingInput.Id;
                    }

                    result.Add(await SaveInnerAsync(billing));

                    if (billing.UseDiscount)
                    {
                        var discounts = (await customerDiscountQueryProcessor.GetAsync(billing.CustomerId, token)).ToList();

                        if (discounts.Count > 0)
                        {
                            var discount  = new BillingDiscount();
                            var billingId = result[index].Id;
                            discount.BillingId = billingId;
                            await deleteBillingDiscountQueryProcessor.DeleteAsync(billingId, token);

                            for (var i = 0; i < discounts.Count; i++)
                            {
                                var customerDiscount = discounts[i];
                                discount.DiscountType   = customerDiscount.Sequence;
                                discount.DiscountAmount = customerDiscount.GetRoundingValue(billing.BillingAmount, billing.CurrencyPrecision);
                                await addBillingDiscountQueryProcessor.SaveAsync(discount, token);
                            }
                        }
                    }
                    else if (!billing.UseDiscount && billing.BillingDiscountId != null)
                    {
                        var billingId = result[index].Id;
                        await deleteBillingDiscountQueryProcessor.DeleteAsync(billingId, token);
                    }

                    /* query から見直し updateBilling の 修正が必要 */
                    var contract = new BillingDivisionContract();
                    contract.BillingId      = result[index].Id;
                    contract.CreateBy       = billing.CreateBy;
                    contract.UpdateBy       = billing.UpdateBy;
                    contract.CompanyId      = billing.CompanyId;
                    contract.CustomerId     = billing.CustomerId;
                    contract.ContractNumber = billing.ContractNumber;

                    if (billing.BillingDivisionContract == 1)
                    {
                        await updateBillingDivisionContractQueryProcessor.UpdateBillingAsync(contract, token);
                    }
                    else if (billing.BillingDivisionContract == 2)
                    {
                        await deleteBillingDivisionContractQueryProcessor.DeleteWithBillingIdAsync(billing.Id, token);
                    }
                    else if (billing.BillingDivisionContract == 3)
                    {
                        var newContractNo = await billingDivisionContractQueryProcessor.GetNewContractNumberAsync(contract.CompanyId, token);

                        contract.ContractNumber = newContractNo.ToString();
                        var setting = await billingDivisionSettingQueryProcessor.GetAsync(billing.CompanyId, token);

                        contract.FirstDateType        = setting.FirstDateType;
                        contract.Monthly              = setting.Monthly;
                        contract.BasisDay             = setting.BasisDay;
                        contract.DivisionCount        = setting.DivisionCount;
                        contract.RoundingMode         = setting.RoundingMode;
                        contract.RemainsApportionment = setting.RemainsApportionment;
                        contract.Comfirm              = 0;
                        contract.CancelDate           = null;
                        await addBillingDivisionContractQueryProcessor.SaveAsync(contract, token);
                    }
                    index++;
                }
                scope.Complete();
            }
            return(result);
        }
Пример #9
0
        public async Task <IEnumerable <Billing> > SaveAsync(IEnumerable <Billing> billings, CancellationToken token = default(CancellationToken))
        {
            var results = new List <Billing>();

            using (var scope = transactionScopeBuilder.Create())
            {
                var source     = billings.ToArray();
                var first      = source.First();
                var userId     = first.UpdateBy;
                var appControl = await applicationControlQueryProcessor.GetAsync(first.CompanyId, token);

                List <CustomerDiscount> discounts = null;
                var useDiscount = appControl.UseDiscount == 1;
                if (useDiscount)
                {
                    discounts = (await customerDiscountQueryProcessor.GetAsync(first.CustomerId, token)).ToList();
                }
                var useLongTermAdv             = appControl.UseLongTermAdvanceReceived == 1;
                var contractRegistered         = appControl.RegisterContractInAdvance == 1;
                BillingDivisionSetting setting = null;
                if (useLongTermAdv && !contractRegistered)
                {
                    setting = await billingDivisionSettingQueryProcessor.GetAsync(first.CompanyId, token);
                }
                var inputId = first.BillingInputId;
                var isInput = first.InputType == (int)BillingInputType.BillingInput ||
                              first.InputType == (int)BillingInputType.PeriodicBilling;
                var requireInputId = isInput && !inputId.HasValue;
                if (requireInputId)
                {
                    inputId = (await addBillingInputQueryProcessor.AddAsync(token)).Id;
                    foreach (var item in source)
                    {
                        item.BillingInputId = inputId;
                    }
                }
                else if (isInput && inputId.HasValue)
                {
                    var registeredIds = (await billingQueryProcessor.GetByBillingInputIdAsync(inputId.Value)).Select(x => x.Id).ToList();
                    var deleteSource  = new BillingDeleteSource {
                        Ids         = registeredIds.Where(x => !source.Any(y => y.Id == x)).ToArray(),
                        CompanyId   = first.CompanyId,
                        LoginUserId = userId,
                    };
                    await billingProcessor.DeleteAsync(deleteSource, token);
                }
                var requireDiscount = source.Any(x => x.UseDiscount);

                foreach (var item in source)
                {
                    var result = await SaveInnerAsync(item, token);

                    if (useDiscount)
                    {
                        if (!item.UseDiscount && item.BillingDiscountId.HasValue)
                        {
                            await deleteBillingDiscountQueryProcessor.DeleteAsync(result.Id, token);
                        }
                        if (item.UseDiscount && discounts.Any())
                        {
                            await deleteBillingDiscountQueryProcessor.DeleteAsync(result.Id, token);

                            var billingDiscount = new BillingDiscount {
                                BillingId = result.Id
                            };
                            foreach (var x in discounts)
                            {
                                billingDiscount.DiscountType   = x.Sequence;
                                billingDiscount.DiscountAmount = x.GetRoundingValue(item.BillingAmount, item.CurrencyPrecision);
                                await addBillingDiscountQueryProcessor.SaveAsync(billingDiscount, token);
                            }
                        }
                    }
                    if (useLongTermAdv && item.BillingDiscountId > 0)
                    {
                        var contract = new BillingDivisionContract
                        {
                            BillingId      = result.Id,
                            CreateBy       = userId,
                            UpdateBy       = userId,
                            CompanyId      = item.CompanyId,
                            CustomerId     = item.CustomerId,
                            ContractNumber = item.ContractNumber,
                        };
                        if (item.BillingDivisionContract == 1)
                        {
                            await updateBillingDivisionContractQueryProcessor.UpdateBillingAsync(contract, token);
                        }
                        else if (item.BillingDivisionContract == 2)
                        {
                            await deleteBillingDivisionContractQueryProcessor.DeleteWithBillingIdAsync(result.Id, token);
                        }
                        else if (item.BillingDivisionContract == 3)
                        {
                            var newNumber = await billingDivisionContractQueryProcessor.GetNewContractNumberAsync(contract.CompanyId, token);

                            contract.ContractNumber       = newNumber.ToString();
                            contract.FirstDateType        = setting.FirstDateType;
                            contract.Monthly              = setting.Monthly;
                            contract.BasisDay             = setting.BasisDay;
                            contract.DivisionCount        = setting.DivisionCount;
                            contract.RoundingMode         = setting.RoundingMode;
                            contract.RemainsApportionment = setting.RemainsApportionment;
                            contract.Comfirm              = 0;
                            await addBillingDivisionContractQueryProcessor.SaveAsync(contract, token);
                        }
                    }
                    results.Add(result);
                }
                scope.Complete();
            }

            return(results);
        }