def get_ebay_mission_instances(self): print(len(self.result)) not_matchables = {} self.result = self.result[: -2] # entfernt letzte zwei Zeilen mit Mitgliedsname und Protokolle for i, row in enumerate(self.result): channel_order_id = row.get("Verkaufsprotokollnummer", "") or "" sku = row.get("Bestandseinheit", "") or "" if channel_order_id == "": continue print(f"THIS IS SKU: {sku}") sku_instance = None if sku != "": sku_instance = Sku.objects.filter( sku__iexact=sku.strip(), main_sku__isnull=True).first() print(f'THIS IS ORDER ID: {channel_order_id}') ship_date_from = self.parse_date( row.get("Versanddatum", "") or "") # not needed ship_date_to = self.parse_date(row.get("Versanddatum", "") or "") # not needed purchased_date = self.parse_date( row.get("Datum der Kaufabwicklung", "") or "") payment_date = self.parse_date(row.get("Zahlungsdatum", "") or "") instance_data = { "channel_order_id": channel_order_id, "is_online": True, "purchased_date": purchased_date, "payment_date": payment_date, "is_ebay": True } mission_instance = Mission.objects.filter( channel_order_id=channel_order_id).first() channel = None if sku_instance is not None: channel = sku_instance.channel if channel is not None: instance_data["channel_id"] = channel.pk print(f"channel: {channel}") shipping_address_instance = self.get_shipping_address_instance( row, mission_instance) billing_address_instance = self.get_billing_address_instance( row, mission_instance) print(f"wilson: {shipping_address_instance}") if channel is not None: if shipping_address_instance is not None: business_account = self.get_business_account( shipping_address_instance, channel) if business_account is not None: instance_data.update({ "online_business_account_id": business_account.pk }) if shipping_address_instance is not None: instance_data.update({ "delivery_address_id": shipping_address_instance.pk, }) self.break_down_address_in_street_and_house_number( shipping_address_instance) if billing_address_instance is not None: instance_data.update( {"billing_address_id": billing_address_instance.pk}) self.break_down_address_in_street_and_house_number( billing_address_instance) if sku_instance is None or (sku_instance.product.ean is None or sku_instance.product.ean == ""): instance_data["not_matchable"] = True if mission_instance is None: if purchased_date != "" and payment_date != "": mission_instance = Mission(**instance_data) if instance_data.get("not_matchable", None) is True: not_matchables[channel_order_id] = True if not_matchables.get(channel_order_id, None) is not True: instance_data["not_matchable"] = None mission_instance.not_matchable = None print(f"bankimoon: {instance_data}") if mission_instance is not None: mission_instance.__dict__.update(instance_data) mission_instance.save() print(f"ben 2: {mission_instance.channel}") if sku == "" and sku_instance is None: if mission_instance not in self.missions_none_sku_amounts: self.missions_none_sku_amounts[mission_instance.pk] = {} self.missions_none_sku_amounts[ mission_instance.pk]["amount"] = 1 else: self.missions_none_sku_amounts[ mission_instance.pk]["amount"] += 1 self.missions_none_sku_amounts[ mission_instance.pk]["instance"] = mission_instance else: if mission_instance not in self.missions_none_sku_amounts: self.missions_none_sku_amounts[mission_instance.pk] = { "instance": mission_instance } product_description = row.get("Artikelbezeichnung", None) if mission_instance is not None: productmission_data = { "mission": mission_instance, "online_description": product_description } quantity_purchased = row.get("Stückzahl", "") or "" print(f"klaus: {quantity_purchased}") try: quantity_purchased = int(quantity_purchased) productmission_data["amount"] = quantity_purchased except ValueError: print( f"- {quantity_purchased} - kann nicht in int geparset werden" ) instance_data["not_matchable"] = True mission_instance.save() item_price = row.get("Preis", "") or "" item_price = item_price.replace("EUR ", "") item_price = item_price.replace(",", ".") try: item_price = float(item_price) if quantity_purchased != "": productmission_data[ "brutto_price"] = item_price / quantity_purchased except ValueError: print( f"- {item_price} - kann nicht in float geparset werden" ) instance_data["not_matchable"] = True mission_instance.save() shipping_price = row.get("Verpackung und Versand", "") or "" shipping_price = shipping_price.replace("EUR ", "") shipping_price = shipping_price.replace(",", ".") try: shipping_price = float(shipping_price) productmission_data["shipping_price"] = shipping_price except ValueError: print( f"- {shipping_price} - kann nicht in float geparset werden" ) instance_data["not_matchable"] = True mission_instance.save() if sku_instance is not None: productmission_data["sku"] = sku_instance productmission_instance = ProductMission.objects.filter( sku=sku_instance, mission=mission_instance).first() elif sku != "": productmission_data["no_match_sku"] = sku productmission_instance = ProductMission.objects.filter( no_match_sku=sku, mission=mission_instance).first() print(f"why {channel_order_id} - {productmission_data}") if sku != "" or sku_instance is not None: if productmission_instance is None: productmission_instance = ProductMission.objects.create( **productmission_data) productmission_instance.save() mission_instance.save( ) # damit der richtige Status gesetzt wird
def get_amazon_mission_instances(self): not_matchables = {} for i, row in enumerate(self.result): channel_order_id = self.column_from_row("order-id", row) sku = self.column_from_row("sku", row) print(f"this is channel and sku: {channel_order_id} - {sku}") if channel_order_id == "" or sku == "": continue sku_instance = None if sku != "": sku_instance = Sku.objects.filter(sku__iexact=sku.strip(), main_sku__isnull=True).first() delivery_date_from = self.parse_date(self.column_from_row('earliest-delivery-date', row)) delivery_date_to = self.parse_date(self.column_from_row("latest-delivery-date", row)) ship_date_from = self.parse_date(self.column_from_row('earliest-ship-date', row)) ship_date_to = self.parse_date(self.column_from_row("latest-ship-date", row)) purchased_date = self.parse_date(self.column_from_row("purchase-date", row)) payment_date = self.parse_date(self.column_from_row("payments-date", row)) instance_data = {"channel_order_id": channel_order_id, "is_online": True, "purchased_date": purchased_date, "delivery_date_from": delivery_date_from, "delivery_date_to": delivery_date_to, "ship_date_from": ship_date_from, "ship_date_to": ship_date_to, "payment_date": payment_date, "is_amazon": True } channel = None if sku_instance is not None: instance_data["channel"] = sku_instance.channel channel = sku_instance.channel shipping_address_instance = self.get_shipping_address_instance(row) billing_address_instance = self.get_billing_address_instance(row) if shipping_address_instance is not None: instance_data.update({"delivery_address_id": shipping_address_instance.pk}) if channel is not None: business_account = self.get_business_account(shipping_address_instance, channel) if business_account is not None: instance_data.update({"online_business_account_id": business_account.pk}) self.break_down_address_in_street_and_house_number(shipping_address_instance) if billing_address_instance is not None: instance_data.update({"billing_address_id": billing_address_instance.pk}) self.break_down_address_in_street_and_house_number(billing_address_instance) if sku_instance is None or (sku_instance.product.ean is None or sku_instance.product.ean == ""): instance_data["not_matchable"] = True mission_instance = Mission.objects.filter(channel_order_id=channel_order_id).first() if mission_instance is None: if purchased_date != "" and delivery_date_from != "" and delivery_date_to != "" and payment_date != "": mission_instance = Mission(**instance_data) if self.not_sent_report is None: continue if instance_data.get("not_matchable", None) is True: not_matchables[channel_order_id] = True if not_matchables.get(channel_order_id, None) is not True: instance_data["not_matchable"] = None mission_instance.not_matchable = None mission_instance.save() if mission_instance is not None: if self.not_sent_report is None: mission_instance.__dict__.update(**instance_data) mission_instance.save() productmission_data = {"mission": mission_instance} product_description = self.column_from_row("product-name", row) if product_description != "": productmission_data["online_description"] = product_description order_item_id = self.column_from_row("order-item-id", row) if order_item_id != "": productmission_data["online_identifier"] = order_item_id quantity_purchased = self.column_from_row("quantity-purchased", row) try: quantity_purchased = int(quantity_purchased) productmission_data["amount"] = quantity_purchased except ValueError: print(f"- {quantity_purchased} - kann nicht in int geparset werden") instance_data["not_matchable"] = True mission_instance.save() item_price = self.column_from_row("item-price", row) try: item_price = float(item_price) if quantity_purchased != "": productmission_data["brutto_price"] = item_price/quantity_purchased except ValueError: print(f"- {item_price} - kann nicht in float geparset werden") instance_data["not_matchable"] = True mission_instance.save() shipping_price = self.column_from_row("shipping-price", row) try: shipping_price = float(shipping_price) productmission_data["shipping_price"] = shipping_price except ValueError: print(f"- {shipping_price} - kann nicht in float geparset werden") instance_data["not_matchable"] = True mission_instance.save() discount = self.column_from_row("item-promotion-discount", row) try: discount = float(discount) productmission_data["discount"] = discount except ValueError: print(f"- {discount} - kann nicht in float geparset werden") instance_data["not_matchable"] = True mission_instance.save() shipping_discount = self.column_from_row("ship-promotion-discount", row) try: shipping_discount = float(shipping_discount) productmission_data["shipping_discount"] = shipping_discount except ValueError: print(f"- {shipping_discount} - kann nicht in float geparset werden") instance_data["not_matchable"] = True mission_instance.save() productmission_instance = None if sku_instance is not None: productmission_data["sku"] = sku_instance productmission_instance = ProductMission.objects.filter( sku=sku_instance, mission=mission_instance).first() elif sku != "": productmission_data["no_match_sku"] = sku productmission_instance = ProductMission.objects.filter( no_match_sku=sku, mission=mission_instance).first() print(f"ENTON 123456::: {sku} ------- {productmission_instance or 'No'}") if sku != "" or sku_instance is not None: if productmission_instance is None: productmission_instance = ProductMission.objects.create(**productmission_data) else: productmission_instance.__dict__.update(**productmission_data) productmission_instance.save() mission_instance.save() # damit der richtige Status gesetzt wird