Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import json
- from storages.backends.ftp import FTPStorage
- from django.core.exceptions import ValidationError
- from django.db import models
- from .constants import PAYMENT_METHODS
- fs = FTPStorage()
- class Shipper(models.Model):
- shipper_name = models.CharField(
- verbose_name="Shipper Name",
- max_length=255,
- )
- shipper_address = models.TextField(verbose_name="Shipper Address")
- shipper_contact = models.CharField(
- verbose_name="Shipper Contact Number",
- max_length=255,
- )
- shipper_email = models.EmailField(
- verbose_name="Shipper Email", null=True, blank=True
- )
- class Meta:
- db_table = ""
- managed = True
- verbose_name = "Shipper"
- verbose_name_plural = "Shippers"
- def __str__(self):
- return self.shipper_name
- @property
- def get_all_road_containers(self):
- road_containers = RoadContainer.objects.filter(
- shipper=self, container_number__current=True
- )
- return road_containers
- @property
- def get_all_sea_containers(self):
- sea_containers = SeaContainer.objects.filter(
- shipper=self, container_number__current=True
- )
- return sea_containers
- @property
- def get_containers(self):
- from itertools import chain
- containers = chain(
- RoadContainer.objects.filter(shipper=self, container_number__current=True),
- SeaContainer.objects.filter(shipper=self, container_number__current=True),
- )
- return containers
- class Bank(models.Model):
- name = models.CharField(max_length=100)
- address = models.CharField(max_length=100)
- def __str__(self):
- return self.name
- class Category(models.Model):
- category_name = models.CharField(
- verbose_name="Category Name",
- max_length=10,
- unique=True,
- )
- class Meta:
- db_table = ""
- managed = True
- verbose_name = "Category"
- verbose_name_plural = "Categorys"
- def __str__(self):
- return self.category_name
- class Owner(models.Model):
- owner_name = models.CharField(
- verbose_name="Owner",
- max_length=255,
- unique=True,
- )
- owner_primary_number = models.CharField(
- verbose_name="Primary Phone Number",
- max_length=10,
- unique=True,
- )
- owner_secondary_number = models.CharField(
- verbose_name="Secondary Phone Number",
- max_length=10,
- unique=True,
- blank=True,
- null=True,
- )
- owner_email = models.EmailField(
- verbose_name="Email",
- unique=True,
- )
- def __str__(self):
- return self.owner_name
- class Company(models.Model):
- name = models.CharField(
- max_length=200,
- verbose_name="Company Name",
- )
- owner = models.ForeignKey(
- to=Owner,
- on_delete=models.CASCADE,
- )
- def __str__(self):
- return self.name
- def get_company_name(self):
- return self.name
- class ContainerNumber(models.Model):
- name = models.CharField(
- verbose_name="Container Number", max_length=255, unique=True
- )
- current = models.BooleanField(verbose_name="Current")
- def clean(self):
- if self.current:
- existing_active_instance = ContainerNumber.objects.filter(
- current=True
- ).exclude(pk=self.pk)
- if existing_active_instance.exists():
- raise ValidationError(
- "There can be only one active Container Number at a time."
- )
- def save(self, *args, **kwargs):
- self.full_clean() # This will trigger the clean method before saving
- super().save(*args, **kwargs)
- def __str__(self):
- return self.name
- class LCLimit(models.Model):
- bank = models.ForeignKey(Bank, on_delete=models.CASCADE)
- company = models.ForeignKey(Company, on_delete=models.CASCADE)
- limit_amount = models.DecimalField(max_digits=10, decimal_places=2)
- expiry_date = models.DateField()
- approval_percentage = models.IntegerField()
- def __str__(self):
- return self.bank.name
- def total_value_in_usd(self):
- sea_containers = SeaContainer.objects.filter(
- bank=self.bank,
- company=self.company,
- documents_cleared=False,
- container_number__current=True,
- )
- total_value = sum(
- container.calculate_value_in_usd() or 0 for container in sea_containers
- )
- return total_value
- class MultiHisabFileField(models.Model):
- file = models.FileField(
- verbose_name="Multiple Hisab File",
- storage=fs,
- )
- def __str__(self):
- return str(self.file.name)
- class PartyHisab(models.Model):
- party_name = models.CharField(verbose_name="Party Name", max_length=255, null=True)
- marka_name = models.CharField(
- verbose_name="Party Marka Detail", max_length=255, null=True
- )
- hisab_date = models.DateField(verbose_name="Hisab Date", max_length=255, null=True)
- hisab = models.ManyToManyField(to=MultiHisabFileField, verbose_name="Hisab Files")
- remarks = models.TextField(verbose_name="Remarks")
- def __str__(self):
- return str(self.marka_name)
- def get_marka_name_words(self):
- if self.marka_name:
- try:
- marka_name_json = self.marka_name.replace("'", '"')
- marka_list = json.loads(marka_name_json)
- if not isinstance(marka_list, list):
- marka_list = [marka_list]
- words = [word.strip() for word in marka_list]
- return words
- except json.JSONDecodeError:
- return []
- return []
- class Payment(models.Model):
- payment_settled = models.BooleanField(default=False)
- expiry_date = models.DateField()
- def __str__(self):
- return f"Payment Settled:{self.payment_settled} - Expiry:{self.expiry_date}"
- class RoadContainer(models.Model):
- container_number = models.ForeignKey(
- to=ContainerNumber,
- on_delete=models.SET_NULL,
- null=True,
- blank=True,
- )
- company = models.ForeignKey(
- to="Company",
- on_delete=models.SET_NULL,
- null=True,
- )
- number = models.CharField(
- verbose_name="Sea Container Number",
- max_length=10,
- )
- payment_method = models.CharField(
- max_length=6,
- choices=PAYMENT_METHODS,
- default="LC",
- )
- bill_of_lading = models.CharField(
- verbose_name="Bill of Lading", max_length=50, null=True, blank=True
- )
- bill_of_lading_date = models.DateField(
- verbose_name="Bill of Lading Date",
- null=True,
- blank=True,
- )
- cartoon_number = models.PositiveIntegerField(
- verbose_name="Loaded Cartoon Number",
- )
- refrence_number = models.CharField(
- verbose_name="LC / TT / DAP number",
- max_length=30,
- unique=True,
- null=True,
- blank=True,
- )
- refrence_date = models.DateField(
- verbose_name="LC / TT / DAP date",
- null=True,
- blank=True,
- )
- proforma_invoice_number = models.CharField(
- verbose_name="Proforma Invoice Number",
- max_length=30,
- unique=True,
- )
- proforma_invoice_date = models.DateField(
- verbose_name="Proforma Invoice Date",
- )
- commercial_invoice_number = models.CharField(
- verbose_name="Commercial Invoice Number",
- max_length=30,
- unique=True,
- null=True,
- blank=True,
- )
- commercial_invoice_date = models.DateField(
- verbose_name="Commercial Invoice Date",
- null=True,
- blank=True,
- )
- customs_cleared = models.BooleanField(
- verbose_name="Customs Clearance Status",
- default=False,
- # null=True,
- blank=True,
- )
- customs_cleared_date = models.DateField(
- verbose_name="Customs Cleared Date",
- null=True,
- blank=True,
- )
- margin_percentage = models.PositiveSmallIntegerField(
- verbose_name="Margin Percentage",
- default="10",
- )
- margin_amount = models.DecimalField(
- verbose_name="Margin Amount",
- # default="10",
- max_digits=13,
- null=True,
- decimal_places=2,
- )
- category = models.ForeignKey(
- to=Category,
- on_delete=models.SET_NULL,
- blank=True,
- null=True,
- )
- proforma_invoice_value = models.DecimalField(
- verbose_name="Proforma Invoice Amount",
- max_digits=13,
- decimal_places=2,
- blank=True,
- null=True,
- )
- commercial_invoice_value = models.DecimalField(
- verbose_name="Commercial Invoice Amount",
- max_digits=13,
- decimal_places=2,
- blank=True,
- null=True,
- )
- bank = models.ForeignKey(
- to=Bank,
- verbose_name="Bank",
- on_delete=models.SET_NULL,
- null=True,
- )
- shipper = models.ForeignKey(
- to=Shipper,
- verbose_name="Shipper",
- on_delete=models.SET_NULL,
- null=True,
- related_name="shipper_container",
- )
- hisab_files = models.FileField(
- verbose_name="Select Hisab Files",
- null=True,
- blank=True,
- storage=fs,
- )
- excel_file = models.FileField(
- verbose_name="Excel File",
- null=True,
- blank=True,
- storage=fs,
- )
- customs_excel_file = models.FileField(
- verbose_name="Customs Excel File",
- null=True,
- blank=True,
- storage=fs,
- )
- insurance_file = models.FileField(
- storage=fs,
- verbose_name="Insurance File",
- null=True,
- blank=True,
- )
- contianer_file = models.FileField(
- verbose_name="Container Documents",
- null=True,
- blank=True,
- storage=fs,
- )
- pragyapan_patra = models.FileField(
- verbose_name="Pragyapan Patra",
- null=True,
- blank=True,
- storage=fs,
- )
- dollar_rate = models.DecimalField(
- verbose_name="Dollar Rate",
- decimal_places=2,
- max_digits=5,
- blank=True,
- null=True,
- )
- documents_cleared = models.BooleanField(
- verbose_name="Documents Cleared",
- default=False,
- # null=True,
- # blank=True,
- )
- class Meta:
- db_table = ""
- managed = True
- verbose_name = "Road Container"
- verbose_name_plural = "Road Containers"
- unique_together = ("container_number", "number", "category")
- def calculate_value_in_usd(self):
- if self.dollar_rate is not None and self.proforma_invoice_value is not None:
- value_in_nrp = self.dollar_rate * self.proforma_invoice_value
- return value_in_nrp
- return None
- def __str__(self):
- return f"{self.category} - {self.number}"
- def get_container_name(self):
- return f"{self.category} - {self.number}"
- def get_type(self):
- return "road"
- class RoadLoadingMarka(models.Model):
- road_container = models.ForeignKey(
- to=RoadContainer,
- on_delete=models.SET_NULL,
- null=True,
- blank=True,
- )
- party_name = models.CharField(
- verbose_name="Party Name",
- max_length=255,
- null=True,
- )
- bilty = models.ImageField(
- null=True,
- storage=fs,
- )
- bilty_number = models.CharField(
- verbose_name="Bilty Number",
- max_length=255,
- null=True,
- )
- bilty_date = models.DateField(
- null=True,
- )
- marka_name = models.CharField(
- verbose_name="Marka Name",
- max_length=255,
- null=True,
- )
- bilty_cartoon_number = models.PositiveSmallIntegerField(
- verbose_name="Cartoon",
- null=True,
- )
- loaded_cartoon_number = models.PositiveSmallIntegerField(
- verbose_name="Loaded Cartoon",
- null=True,
- )
- bilty_rmb = models.DecimalField(
- verbose_name="RMB",
- decimal_places=2,
- max_digits=5,
- null=True,
- )
- place = models.CharField(
- verbose_name="Bilty Place",
- max_length=255,
- null=True,
- )
- transport = models.CharField(
- verbose_name="Transport",
- max_length=155,
- null=True,
- )
- remarks = models.TextField(
- verbose_name="Remarks",
- blank=True,
- null=True,
- )
- packing_list = models.ImageField(
- null=True,
- blank=True,
- storage=fs,
- )
- class SeaContainer(models.Model):
- container_number = models.ForeignKey(
- to=ContainerNumber,
- on_delete=models.SET_NULL,
- null=True,
- blank=True,
- )
- company = models.ForeignKey(
- to="Company",
- on_delete=models.SET_NULL,
- null=True,
- )
- number = models.CharField(
- verbose_name="Sea Container Number",
- max_length=10,
- )
- payment_method = models.CharField(
- max_length=6,
- choices=PAYMENT_METHODS,
- default="LC",
- )
- bill_of_lading = models.CharField(
- verbose_name="Bill of Lading", max_length=50, null=True, blank=True
- )
- bill_of_lading_date = models.DateField(
- verbose_name="Bill of Lading Date",
- null=True,
- blank=True,
- )
- cartoon_number = models.PositiveIntegerField(
- verbose_name="Loaded Cartoon Number",
- )
- refrence_number = models.CharField(
- verbose_name="LC / TT / DAP number",
- max_length=30,
- unique=True,
- null=True,
- blank=True,
- )
- refrence_date = models.DateField(
- verbose_name="LC / TT / DAP date",
- null=True,
- blank=True,
- )
- proforma_invoice_number = models.CharField(
- verbose_name="Proforma Invoice Number",
- max_length=30,
- unique=True,
- )
- proforma_invoice_date = models.DateField(
- verbose_name="Proforma Invoice Date",
- )
- commercial_invoice_number = models.CharField(
- verbose_name="Commercial Invoice Number",
- max_length=30,
- unique=True,
- null=True,
- blank=True,
- )
- commercial_invoice_date = models.DateField(
- verbose_name="Commercial Invoice Date",
- null=True,
- blank=True,
- )
- customs_cleared = models.BooleanField(
- verbose_name="Customs Clearance Status",
- default=False,
- # null=True,
- blank=True,
- )
- customs_cleared_date = models.DateField(
- verbose_name="Customs Cleared Date",
- null=True,
- blank=True,
- )
- margin_percentage = models.PositiveSmallIntegerField(
- verbose_name="Margin Percentage",
- default="10",
- )
- margin_amount = models.DecimalField(
- verbose_name="Margin Amount",
- # default="10",
- max_digits=13,
- null=True,
- decimal_places=2,
- )
- category = models.ForeignKey(
- to=Category,
- on_delete=models.SET_NULL,
- blank=True,
- null=True,
- )
- proforma_invoice_value = models.DecimalField(
- verbose_name="Proforma Invoice Amount",
- max_digits=13,
- decimal_places=2,
- blank=True,
- null=True,
- )
- commercial_invoice_value = models.DecimalField(
- verbose_name="Commercial Invoice Amount",
- max_digits=13,
- decimal_places=2,
- blank=True,
- null=True,
- )
- bank = models.ForeignKey(
- to=Bank,
- verbose_name="Bank",
- on_delete=models.SET_NULL,
- null=True,
- )
- shipper = models.ForeignKey(
- to=Shipper,
- verbose_name="Shipper",
- on_delete=models.SET_NULL,
- null=True,
- )
- hisab_files = models.FileField(
- verbose_name="Select Hisab Files",
- null=True,
- blank=True,
- storage=fs,
- )
- excel_file = models.FileField(
- verbose_name="Excel File",
- null=True,
- blank=True,
- storage=fs,
- )
- customs_excel_file = models.FileField(
- verbose_name="Customs Excel File",
- null=True,
- blank=True,
- storage=fs,
- )
- insurance_file = models.FileField(
- verbose_name="Insurance File",
- null=True,
- blank=True,
- storage=fs,
- )
- contianer_file = models.FileField(
- verbose_name="Container Documents",
- null=True,
- blank=True,
- storage=fs,
- )
- pragyapan_patra = models.FileField(
- verbose_name="Pragyapan Patra",
- null=True,
- blank=True,
- storage=fs,
- )
- dollar_rate = models.DecimalField(
- verbose_name="Dollar Rate",
- decimal_places=2,
- max_digits=5,
- blank=True,
- null=True,
- )
- documents_cleared = models.BooleanField(
- verbose_name="Documents Cleared",
- default=False,
- )
- class Meta:
- db_table = ""
- managed = True
- verbose_name = "SeaContainer"
- verbose_name_plural = "SeaContainers"
- unique_together = ("container_number", "number", "category")
- def calculate_value_in_usd(self):
- if self.dollar_rate is not None and self.proforma_invoice_value is not None:
- value_in_nrp = self.dollar_rate * self.proforma_invoice_value
- return value_in_nrp
- return None
- def __str__(self):
- return f"{self.category} - {self.number}"
- def get_container_name(self):
- return f"{self.category} - {self.number}"
- def get_type(self):
- return "sea"
- class SeaLoadingMarka(models.Model):
- sea_container = models.ForeignKey(
- to=SeaContainer,
- on_delete=models.SET_NULL,
- null=True,
- blank=True,
- )
- party_name = models.CharField(
- verbose_name="Party Name", max_length=255, default="Null"
- )
- marka_name = models.CharField(verbose_name="Marka Name", max_length=255)
- cartoon_number = models.PositiveIntegerField(verbose_name="Cartoon")
- cbm = models.DecimalField(
- verbose_name="CBM",
- decimal_places=2,
- max_digits=5,
- null=True,
- default=0.00,
- )
- # all_sent = models.BooleanField(verbose_name="Sent to Customer", default=False)
- # remarks = models.TextField(verbose_name="Sent Remarks")
- # chalan_image = models.ImageField(verbose_name="Document Chalan")
- def __str__(self):
- return f"{self.sea_container} - {self.marka_name}"
Advertisement
Add Comment
Please, Sign In to add comment