Esempio n. 1
0
        public async Task <InvoiceDTO> ByUserID(int userID)
        {
            //получаем текущую корзину
            ShoppingCartDTO cartDTO = await _shoppingCartMsClient.GetShoppingCartByUserID(userID);

            //если она существует начинаем создание счета
            if (cartDTO != null && cartDTO.ShoppingCartID > 0 && cartDTO.Items.Count > 0)
            {
                Invoice invoiceFromDb = await _invoicesRepository.ByShoppingCartID(cartDTO.ShoppingCartID);

                if (invoiceFromDb != null)
                {
                    //если актуальная информация не сходится с информацией в бд то удаляем старый счет и создаем новый иначе возвращаем уже имеющийся счет
                    if (invoiceFromDb.Total != cartDTO.Total || invoiceFromDb.CountOfCommodities != cartDTO.Items.Count)
                    {
                        await _invoicesRepository.DeleteByID(invoiceFromDb.InvoiceID);

                        Invoice newInvoice       = CreateInvoiceFromCart(cartDTO);
                        Invoice newInvoiceFromDb = await _invoicesRepository.Add(newInvoice);

                        return(_mapper.Map <InvoiceDTO>(newInvoiceFromDb));
                    }
                    else
                    {
                        return(_mapper.Map <InvoiceDTO>(invoiceFromDb));
                    }
                    //если счета по айди корзины в базе нет то создаем новый
                }
                else
                {
                    Invoice newInvoice       = CreateInvoiceFromCart(cartDTO);
                    Invoice newInvoiceFromDb = await _invoicesRepository.Add(newInvoice);

                    return(_mapper.Map <InvoiceDTO>(newInvoiceFromDb));
                }
            }

            return(new InvoiceDTO());
        }