public CounterpartyContract GetCounterpartyContract(IUnitOfWork uow, Order order, IErrorReporter errorReporter = null)
        {
            if (uow == null)
            {
                throw new ArgumentNullException(nameof(uow));
            }
            if (order == null)
            {
                throw new ArgumentNullException(nameof(order));
            }
            if (order.Client == null)
            {
                return(null);
            }

            var personType   = order.Client.PersonType;
            var paymentType  = order.PaymentType;
            var contractType = GetContractTypeForPaymentType(personType, paymentType);
            var organization = organizationProvider.GetOrganization(uow, order);

            if (organization == null)
            {
                return(null);
            }

            Counterparty counterpartyAlias = null;
            Organization organizationAlias = null;
            var          result            =
                uow.Session.QueryOver <CounterpartyContract>()
                .JoinAlias(co => co.Counterparty, () => counterpartyAlias)
                .JoinAlias(co => co.Organization, () => organizationAlias)
                .Where(
                    co => (
                        counterpartyAlias.Id == order.Client.Id &&
                        !co.IsArchive &&
                        !co.OnCancellation &&
                        organizationAlias.Id == organization.Id &&
                        co.ContractType == contractType
                        )
                    )
                .OrderBy(x => x.IssueDate).Desc.List();

            if (result.Count > 1 && errorReporter != null)
            {
                Exception ex = new ArgumentException("Query returned >1 CounterpartyContract");
                errorReporter.SendErrorReport(new Exception[] { ex },
                                              description: $"Ошибка в {nameof(CounterpartyContractRepository)}, GetCounterpartyContract() вернул больше 1 контракта");
            }
            return(result.FirstOrDefault());
        }
        public SmsPaymentDTO CreateSmsPaymentDTO(IUnitOfWork uow, SmsPayment smsPayment, Order order, PaymentFrom paymentFrom)
        {
            var newSmsPaymentDTO = new SmsPaymentDTO
            {
                Recepient           = smsPayment.Recepient.Name,
                RecepientId         = smsPayment.Recepient.Id,
                PhoneNumber         = smsPayment.PhoneNumber,
                PaymentStatus       = SmsPaymentStatus.WaitingForPayment,
                OrderId             = smsPayment.Order.Id,
                PaymentCreationDate = smsPayment.CreationDate,
                Amount         = smsPayment.Amount,
                RecepientType  = smsPayment.Recepient.PersonType,
                Items          = GetCalculatedSmsPaymentItemDTOs(order.OrderItems),
                OrganizationId = _organizationProvider.GetOrganization(uow, order, paymentFrom, PaymentType.ByCard).Id
            };

            return(newSmsPaymentDTO);
        }
        public CounterpartyContract GetCounterpartyContract(IUnitOfWork uow, Order order)
        {
            if (uow == null)
            {
                throw new ArgumentNullException(nameof(uow));
            }
            if (order == null)
            {
                throw new ArgumentNullException(nameof(order));
            }
            if (order.Client == null)
            {
                return(null);
            }

            var personType   = order.Client.PersonType;
            var paymentType  = order.PaymentType;
            var contractType = GetContractTypeForPaymentType(personType, paymentType);
            var organization = organizationProvider.GetOrganization(uow, order);

            if (organization == null)
            {
                return(null);
            }

            Counterparty counterpartyAlias = null;
            Organization organizationAlias = null;
            var          result            =
                uow.Session.QueryOver <CounterpartyContract>()
                .JoinAlias(co => co.Counterparty, () => counterpartyAlias)
                .JoinAlias(co => co.Organization, () => organizationAlias)
                .Where(
                    co => (
                        counterpartyAlias.Id == order.Client.Id &&
                        !co.IsArchive &&
                        !co.OnCancellation &&
                        organizationAlias.Id == organization.Id &&
                        co.ContractType == contractType
                        )
                    )
                .OrderBy(x => x.IssueDate).Desc.List();

            return(result.FirstOrDefault());
        }
Esempio n. 4
0
        public CounterpartyContract CreateContract(IUnitOfWork uow, Order order, DateTime?issueDate)
        {
            var contractType      = counterpartyContractRepository.GetContractTypeForPaymentType(order.Client.PersonType, order.PaymentType);
            var org               = organizationProvider.GetOrganization(uow, order);
            var contractSubNumber = CounterpartyContract.GenerateSubNumber(order.Client);

            CounterpartyContract contract = new CounterpartyContract {
                Counterparty      = order.Client,
                ContractSubNumber = contractSubNumber,
                Organization      = org,
                IsArchive         = false,
                ContractType      = contractType
            };

            if (issueDate.HasValue)
            {
                contract.IssueDate = issueDate.Value;
            }
            return(contract);
        }