API zásilkovna hotovo

This commit is contained in:
David Bruno Vontor
2025-11-13 18:46:01 +01:00
parent 5c3a02d282
commit 052f7ab533
12 changed files with 331 additions and 33 deletions

View File

@@ -89,7 +89,7 @@ class Carrier(models.Model):
choice = models.CharField(max_length=20, choices=Role.choices, default=Role.STORE)
# prodejce to přidá později
zasilkovna = models.ForeignKey(
'thirdparty.zasilkovna.Zasilkovna', on_delete=models.DO_NOTHING, null=True, blank=True, related_name="carriers"
)
@@ -98,13 +98,6 @@ class Carrier(models.Model):
return f"{self.name} ({self.base_price} Kč)"
def save(self, *args, **kwargs):
#zásilkovna instance je vytvořena
if self.choice == self.Role.ZASILKOVNA:
self.packeta = PacketaShipment.objects.create()
elif self.choice == self.Role.STORE:
self.packeta = None
super().save(*args, **kwargs)
@@ -161,10 +154,6 @@ class Order(models.Model):
max_length=20, choices=Status.choices, default=Status.PENDING
)
user = models.ForeignKey(
settings.AUTH_USER_MODEL, related_name="orders", on_delete=models.CASCADE
)
carrier = models.ForeignKey(
Carrier, on_delete=models.CASCADE, null=True, blank=True, related_name="orders"
)
@@ -179,6 +168,10 @@ class Order(models.Model):
currency = models.CharField(max_length=10, default="CZK")
# fakturační údaje (zkopírované z user profilu při objednávce)
user = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.DO_NOTHING, related_name="orders", null=True, blank=True
)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
email = models.EmailField()
@@ -218,10 +211,18 @@ class Order(models.Model):
return total
def import_data_from_user(self):
"""Import user data into order for billing purposes."""
self.first_name = self.user.first_name
self.last_name = self.user.last_name
self.email = self.user.email
self.phone = self.user.phone
self.address = f"{self.user.street} {self.user.street_number}"
self.city = self.user.city
self.postal_code = self.user.postal_code
self.country = self.user.country
def save(self, *args, **kwargs):
# Keep total_price always in sync with items and discount
self.total_price = self.calculate_total_price()
@@ -255,4 +256,17 @@ class OrderItem(models.Model):
return ValueError("Invalid discount code.")
def __str__(self):
return f"{self.product.name} x{self.quantity}"
return f"{self.product.name} x{self.quantity}"
class Returning_order(models.Model):
#FIXME: dodělat !!!
order = models.ForeignKey(Order, related_name="returning_orders", on_delete=models.CASCADE)
reason = models.TextField(blank=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"Returning Order #{self.order.id} - {self.created_at.strftime('%Y-%m-%d')}"