def platform_invoice( order, seller, logistics_user, central_platform_user, traidoo_region ): invoice = factories.PlatformInvoiceFactory( order, seller=seller, region=traidoo_region ).compose() invoice.save() yield invoice
def invoices(order: Order, sellers: List[User]): documents = [] # Add platform invoice for a buyer only if he is not a cooperative # member if not order.buyer.is_cooperative_member: documents.append( factories.BuyerPlatformInvoiceFactory( order, region=order.buyer.region).compose()) if order.has_central_logistics_deliveries: regions = { order_item.product.region for order_item in order.items.select_related( "product__region").filter( delivery_option__id=DeliveryOption.CENTRAL_LOGISTICS). distinct() } for region in regions: documents.append( factories.LogisticsInvoiceFactory(order, region=region).compose()) if settings.FEATURES["routes"] and order.has_third_party_deliveries: logger.debug("Generating invoice for a supplier.") regions = { order_item.product.region for order_item in order.items.select_related( "product__region").filter( job__user__isnull=False).distinct() } for region in regions: for document in factories.ThirdPartyLogisticsInvoiceFactory( order, region=region).compose(): documents.append(document) for seller in sellers: documents.extend([ factories.ProducerInvoiceFactory(order, region=seller.region, seller=seller).compose(), factories.PlatformInvoiceFactory(order, region=seller.region, seller=seller).compose(), ]) return documents
def test_create_platform_invoice_cooperative_member( order, order_items, central_platform_user, traidoo_region, delivery_address, delivery_options, seller, ): assert seller.is_cooperative_member document = factories.PlatformInvoiceFactory(order, region=traidoo_region, seller=seller).compose() document.save() assert document.seller == factories.PlatformInvoiceFactory.as_dict( central_platform_user) assert document.buyer == factories.PlatformInvoiceFactory.as_company( seller) assert document.order_id == order.id assert len(document.lines) == 1 assert document.lines[0] == { "amount": 1.0, "category": "", "count": 1.0, "name": "Plattformgebühr", "number": "", "price": 13.6, "producer": "Traidoo", "seller_user_id": central_platform_user.id, "unit": "", "vat_rate": 19.0, }
def test_include_paid_notice_in_seller_platform_invoice( order, traidoo_region, seller, order_items): document = (factories.PlatformInvoiceFactory( order, region=traidoo_region, seller=seller).compose().render_html()) assert "Diese Rechnung ist bereits bezahlt" in document
def test_pay_oldest_order_first( mangopay_bank_alias_payin, order, api_client, order_confirmation, buyer, traidoo_region, products, delivery_address, delivery_options, ): new_order = baker.make( Order, buyer=buyer, region=traidoo_region, earliest_delivery_date=timezone.make_aware(datetime.datetime.today()), ) product = products[0] product.amount = 10 product.save() baker.make( OrderItem, product=product, quantity=1, order=new_order, delivery_address=delivery_address, delivery_option=delivery_options[0], latest_delivery_date=timezone.now().date() + datetime.timedelta(days=3), ) factories.PlatformInvoiceFactory( new_order, traidoo_region, product.seller ).compose().save() new_order_confirmation = factories.OrderConfirmationBuyerFactory( new_order, traidoo_region ).compose() new_order_confirmation.save() new_order.total_price = new_order_confirmation.price_gross new_order.save() factories.ProducerInvoiceFactory( new_order, traidoo_region, product.seller ).compose().save() mangopay_bank_alias_payin.return_value.get_wallet.side_effect = [ # first order check if we can afford to pay { "Currency": "EUR", "Id": "buyer-wallet-1", "Description": "Default", "Balance": {"Currency": "EUR", "Amount": 943191}, }, # second order { "Currency": "EUR", "Id": "buyer-wallet-1", "Description": "Default", "Balance": {"Currency": "EUR", "Amount": 0}, }, # final call to check if there's anything left in wallet { "Currency": "EUR", "Id": "buyer-wallet-1", "Description": "Default", "Balance": {"Currency": "EUR", "Amount": 0}, }, ] api_client.get( reverse("webhook"), data={"RessourceId": "payin-1", "EventType": "PAYIN_NORMAL_SUCCEEDED"}, ) order.refresh_from_db() assert order.is_paid assert not new_order.is_paid