Пример #1
0
    def update_or_create_single_mission(self, order):
        purchase_date, earliest_ship_date = order.get(
            "PurchaseDate"), order.get("EarliestShipDate")
        earliest_ship_date = datetime.strptime(
            earliest_ship_date.split("T")[0], '%Y-%m-%d')
        amazon_order_id = order.get("AmazonOrderId")

        mission_instance = Mission.objects.filter(
            channel_order_id=amazon_order_id).first()

        if mission_instance is None:
            mission_instance = Mission(delivery_date=earliest_ship_date,
                                       channel_order_id=amazon_order_id)
            mission_instance.save()

        is_prime, is_business_order = order.get("IsPrime"), order.get(
            "IsBusinessOrder")
        is_premium_order = order.get("IsPremiumOrder")

        order_status = order.get("OrderStatus")
        mission_instance.status = order_status

        if order.get("FulfillmentChannel") == "AFN":
            mission_instance.is_amazon_fba = True
        else:
            mission_instance.is_amazon_fba = False

        return mission_instance
Пример #2
0
def add_mission(request, received_data={}):

    start_time = convert_to_datetime(received_data['start_time'])
    end_time = convert_to_datetime(received_data['end_time'])

    mission = Mission(title=received_data['title'],
                      description=received_data['description'],
                      min_member_count=int(received_data['min_member_count']),
                      max_member_count=int(received_data['max_member_count']),
                      start_time=start_time,
                      end_time=end_time,
                      creator=request.user)
    mission.save()

    for task in received_data['tasks']:
        Task(num=task['num'],
             lng=task['lng'],
             lat=task['lat'],
             description=task['description'],
             mission=mission).save()

    return true_json_response(msg="Mission added successfully")
Пример #3
0
    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
Пример #4
0
    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