Exemple #1
0
class Collateral(BaseModel):
    name = models.CharField(max_length=256)
    thumbnail = models.URLField(null=True, blank=True)
    category = models.ForeignKey('product.Category',
                                 null=True,
                                 blank=True,
                                 on_delete=models.PROTECT)
    url = models.URLField()
    collateral_type = models.CharField(max_length=16,
                                       choices=get_choices(
                                           Constants.COLLATERALS_TYPE))
    collateral_file_type = models.CharField(max_length=32,
                                            choices=get_choices(
                                                Constants.COLLATERALS_CHOICES))
    promocode = models.ForeignKey('users.PromoCode', on_delete=models.PROTECT)
    short_descripton = models.CharField(max_length=256, null=True, blank=True)
    long_descripton = models.TextField(null=True, blank=True)
    order = models.IntegerField(default=0)

    def __str__(self):
        return '%s | %s: %s' % (self.name, self.collateral_type,
                                self.collateral_file_type)

    class Meta:
        ordering = ('order', )
Exemple #2
0
class Member(BaseModel):
    application = models.ForeignKey('sales.Application',
                                    on_delete=models.CASCADE)
    relation = models.CharField(max_length=128,
                                choices=get_choices(
                                    Constants.RELATION_CHOICES),
                                db_index=True)
    first_name = models.CharField(max_length=128, blank=True)
    last_name = models.CharField(max_length=128, blank=True)
    dob = models.DateField(null=True)
    gender = models.CharField(choices=get_choices(Constants.GENDER),
                              max_length=16,
                              null=True)
    occupation = models.CharField(choices=get_choices(
        Constants.OCCUPATION_CHOICES),
                                  max_length=32,
                                  null=True,
                                  blank=True)
    height = models.FloatField(default=0.0)
    weight = models.FloatField(default=0.0)
    ignore = models.BooleanField(default=None, db_index=True, null=True)

    def save(self, *ar, **kw):
        try:
            self.__class__.objects.get(pk=self.id)
        except self.__class__.DoesNotExist:
            if self.relation not in [
                    'son', 'daughter'
            ] and self.__class__.objects.filter(
                    relation=self.relation,
                    application_id=self.application_id).exists():
                raise IntegrityError('%s relation already exists.' %
                                     self.relation)
        super(Member, self).save(*ar, **kw)

    def update_fields(self, **kw):
        for field in kw.keys():
            setattr(self, field, kw[field])
        self.save()

    def get_full_name(self):
        name = '%s %s' % (self.first_name, self.last_name)
        return name.strip()

    @property
    def age(self):
        if self.dob:
            return int((now().today().date() - self.dob).days / 365.2425)

    @property
    def height_foot(self):
        return int(self.height / 30.48)

    @property
    def height_inches(self):
        return round((self.height - self.height_foot * 30.48) / 2.54, 2)

    def __str__(self):
        return '%s | %s' % (self.relation.title(), self.application.__str__())
Exemple #3
0
class Article(BaseModel):
    heading = models.CharField(max_length=256)
    tags = models.CharField(max_length=32,
                            choices=get_choices(
                                Constants.CATEGORIES_AVAILABLE))
    url = models.URLField()
    short_descripton = models.CharField(max_length=512)
    image = models.ImageField(null=True)
Exemple #4
0
class ContactUs(BaseModel):
    full_name = models.CharField(max_length=512)
    phone_no = models.CharField(max_length=10)
    email = models.EmailField(max_length=50)
    message = models.TextField(null=True, blank=True)

    def __str__(self):
        return "{} - {}".format(self.phone_no, self.full_name)
Exemple #5
0
class BankBranch(models.Model):
    bank = models.ForeignKey('content.Bank', on_delete=models.CASCADE)
    branch_name = models.CharField(max_length=128, db_index=True)
    ifsc = models.CharField(max_length=15, unique=True, db_index=True)
    city = models.CharField(max_length=64, db_index=True)

    def __str__(self):
        return '%s => %s:%s' % (self.bank.name, self.branch_name, self.ifsc)
Exemple #6
0
class KYCDocument(BaseModel):
    contact = models.ForeignKey(
        'crm.Contact', on_delete=models.CASCADE, null=True, blank=True)
    document_number = models.CharField(max_length=64)
    document_type = models.CharField(
        choices=get_choices(Constants.KYC_DOC_TYPES), max_length=16)
    file = models.FileField(
        upload_to=get_kyc_upload_path, null=True, blank=True)
Exemple #7
0
class Playlist(BaseModel):
    name = models.CharField(max_length=32)
    url = models.URLField()
    playlist_type = models.CharField(max_length=32,
                                     choices=get_choices(
                                         Constants.PLAYLIST_CHOICES))

    def __str__(self):
        return '%s | %s: %s' % (self.name, self.playlist_type, self.url)
Exemple #8
0
class ProductVariant(BaseModel):
    company_category = models.ForeignKey('product.CompanyCategory',
                                         null=True,
                                         blank=True,
                                         on_delete=models.CASCADE)
    parent = models.ForeignKey('self',
                               null=True,
                               blank=True,
                               on_delete=models.CASCADE)
    name = models.CharField(max_length=256,
                            default="",
                            verbose_name="Product Name")
    parent_product = models.CharField(max_length=128,
                                      null=True,
                                      blank=True,
                                      default='GoPlannr')
    feature_variant = models.CharField(max_length=256, default='base')
    short_description = models.CharField(max_length=128, null=True, blank=True)
    long_description = models.TextField(null=True, blank=True)
    online_process = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    chronic = models.BooleanField(default=True)

    def get_product_details(self):
        return {
            'name': self.product_short_name,
            'company': self.company_category.company.name,
            'logo': self.logo,
            'variant_name': self.product_short_name
        }

    @cached_property
    def logo(self):
        from goplannr.settings import DEBUG
        return (Constants.DEBUG_HOST
                if DEBUG else '') + self.company_category.company.logo.url

    @cached_property
    def product_short_name(self):
        return self.name

    def get_basic_details(self):
        return dict(toll_free_number=', '.join(
            self.company_category.company.toll_free_number),
                    brochure=self.get_help_file('sales_brochure'),
                    claim_form=self.get_help_file('claim_form'))

    def get_help_file(self, file_type):
        from content.models import HelpFile
        helpfile = HelpFile.objects.filter(product_variant_id=self.id,
                                           file_type=file_type).first()
        return helpfile.file.url if helpfile else '-'

    def __str__(self):
        return self.product_short_name
Exemple #9
0
class Appointment(BaseModel):
    user = models.ForeignKey('users.User', on_delete=models.CASCADE)
    category = models.ForeignKey('product.Category', on_delete=models.CASCADE)
    lead = models.ForeignKey('crm.Lead',
                             on_delete=models.CASCADE,
                             null=True,
                             blank=True)
    name = models.CharField(max_length=128)
    phone_no = models.CharField(max_length=10)
    address = models.TextField()
    date = models.DateField()
Exemple #10
0
class Category(BaseModel):
    name = models.CharField(max_length=128, db_index=True)
    description = models.TextField(null=True, blank=True)
    logo = models.ImageField(upload_to=Constants.CATEGORY_UPLOAD_PATH,
                             default=Constants.DEFAULT_LOGO)
    hexa_code = models.CharField(max_length=8,
                                 default=Constants.DEFAULT_HEXA_CODE)
    is_active = models.BooleanField(default=False)
    commission = models.FloatField(default=Constants.DEFAULT_COMMISSION)

    def __str__(self):
        return self.name
Exemple #11
0
class IPAddress(BaseModel):
    account = models.ForeignKey(
        'users.Account', on_delete=models.PROTECT, null=True, blank=True)
    ip_address = models.CharField(max_length=16)
    company_name = models.CharField(max_length=128)
    authentication_required = models.BooleanField(default=True)
    blocked = models.BooleanField(default=False)

    @classmethod
    def _get_whitelisted_networks(cls):
        return cls.objects.filter(
            blocked=False).values_list('ip_address', flat=True)
Exemple #12
0
class Address(BaseModel):
    flat_no = models.CharField(max_length=64, blank=True)
    street = models.CharField(max_length=128, blank=True)
    landmark = models.CharField(max_length=128, blank=True)
    pincode = models.ForeignKey('users.Pincode', on_delete=models.CASCADE)

    @property
    def full_address(self):
        return '%s %s %s %s'.strip() % (
            self.flat_no, self.street, self.landmark, self.pincode)

    def __str__(self):
        return self.full_address
Exemple #13
0
class SubcriberEnterprise(BaseModel):
    name = models.CharField(
        max_length=64, default=Constants.DEFAULT_ENTERPRISE)
    companies = models.ManyToManyField('product.Company', blank=True)
    categories = models.ManyToManyField('product.Category', blank=True)
    hexa_code = models.CharField(max_length=8, default='#005db1')
    logo = models.ImageField(
        upload_to=Constants.ENTERPRISE_UPLOAD_PATH,
        default=Constants.DEFAULT_LOGO)
    person = GenericRelation(
        'users.User', related_query_name='subscriber_enterprise_user',
        object_id_field='enterprise_id')
    commission = models.FloatField(default=0.0)

    def __str__(self):
        return self.name
Exemple #14
0
class PromoBook(BaseModel):
    phone_no = models.CharField(max_length=10)

    def save(self, *args, **kwargs):
        from users.tasks import send_sms
        send_sms.delay(self.phone_no, Constants.PROMO_MESSAGE % self.phone_no)
        super(PromoBook, self).save(*args, **kwargs)
Exemple #15
0
class CompanyDetails(BaseModel):
    company = models.OneToOneField('product.Company', on_delete=models.CASCADE)
    fact_file = models.TextField(null=True, blank=True)
    joint_venture = models.TextField(null=True, blank=True)
    formation_year = models.CharField(max_length=4, null=True, blank=True)
    market_share = models.TextField(null=True, blank=True)
    additional_info = models.TextField(null=True, blank=True)
Exemple #16
0
class Question(BaseModel):
    category = models.ForeignKey('product.Category', on_delete=models.CASCADE)
    title = models.CharField(max_length=32)
    question_type = models.CharField(max_length=10,
                                     choices=get_choices(
                                         constants.QUESTION_COICES),
                                     default="single")
    question = models.TextField()
    order = models.IntegerField(default=0)
    ignore = models.BooleanField(default=False)

    class Meta:
        ordering = ('order', )

    def __str__(self):
        return self.title
Exemple #17
0
class Lead(BaseModel):
    user = models.ForeignKey('users.user', on_delete=models.CASCADE)
    contact = models.ForeignKey(
        'crm.Contact', null=True, blank=True, on_delete=models.CASCADE)
    campaign = models.ForeignKey(
        'users.Campaign', null=True, blank=True, on_delete=models.CASCADE)
    pincode = models.CharField(max_length=6, null=True)
    bookmark = models.BooleanField(default=False)
    is_client = models.BooleanField(default=False)
    ignore = models.BooleanField(default=False)

    class Meta:
        ordering = ('-bookmark',)

    def create_opportunity(self, validated_data):
        instance = Opportunity.objects.create(
            lead_id=self.id, category_id=validated_data['category_id'])
        instance.update_category_opportunity(validated_data)
        return instance

    def get_quotes(self):
        from sales.models import Quote
        return Quote.objects.filter(
            opportunity__lead_id=self.id,
            ignore=False).exclude(status='rejected')

    def __str__(self):
        return "%s - Contact: %s" % (
            self.user.get_full_name(),
            self.contact.first_name if self.contact else 'Pending')
Exemple #18
0
class Pincode(models.Model):
    pincode = models.CharField(
        max_length=6, unique=True, db_index=True)
    city = models.CharField(max_length=64, db_index=True)
    state = models.ForeignKey(
        'users.State', null=True, blank=True, on_delete=models.CASCADE)

    def __str__(self):
        return '%s - %s(%s)' % (self.city, self.pincode, self.state.name)

    @classmethod
    def get_pincode(cls, pincode):
        pincodes = cls.objects.filter(pincode=pincode)
        if pincodes.exists():
            return pincodes.get()
        return None
Exemple #19
0
class KYCDocument(BaseModel):
    account = models.ForeignKey('users.Account', on_delete=models.CASCADE)
    document_type = models.CharField(
        choices=get_choices(Constants.KYC_DOC_TYPES), max_length=16)
    document_number = models.CharField(max_length=64, null=True, blank=True)
    file = models.FileField(upload_to=get_kyc_upload_path)
    ignore = models.BooleanField(default=False)

    def save(self, *args, **kwargs):
        previous = self.__class__.objects.filter(
            document_type=self.document_type, account_id=self.id)
        if previous.exists():
            previous.update(ignore=True)
        super(self.__class__, self).save(*args, **kwargs)

    def __str__(self):
        return self.document_type
Exemple #20
0
class Policy(BaseModel):
    application = models.OneToOneField('sales.Application',
                                       on_delete=models.CASCADE)
    policy_number = models.CharField(max_length=64, blank=True, null=True)
    policy_data = JSONField(default=dict)
    policy_file = models.FileField(upload_to=Constants.POLICY_UPLOAD_PATH,
                                   null=True,
                                   blank=True)
Exemple #21
0
class NetworkHospital(BaseModel):
    name = models.CharField(blank=True, max_length=256, db_index=True)
    company = models.ForeignKey('product.Company',
                                null=True,
                                on_delete=models.CASCADE,
                                blank=True)
    pincode = models.ForeignKey('users.Pincode',
                                on_delete=models.CASCADE,
                                blank=True)
    address = models.TextField()
    contact_number = models.CharField(blank=True,
                                      max_length=100,
                                      db_index=True)

    def get_full_address(self):
        return '%s, %s, %s (%s)' % (self.address, self.pincode.city,
                                    self.pincode.state, self.pincode.pincode)
Exemple #22
0
class ExistingPolicies(BaseModel):
    application = models.ForeignKey('sales.Application',
                                    on_delete=models.CASCADE,
                                    null=True,
                                    blank=True)
    insurer = models.CharField(max_length=128)
    suminsured = models.FloatField(default=0)
    deductible = models.FloatField(default=0)
Exemple #23
0
class ProposerDocument(BaseModel):
    contact = models.ForeignKey('crm.Contact', on_delete=models.CASCADE)
    document_number = models.CharField(max_length=64, null=True, blank=True)
    document_type = models.CharField(choices=get_choices(
        Constants.KYC_DOC_TYPES),
                                     max_length=16)
    file = models.FileField(upload_to=get_proposer_upload_path,
                            null=True,
                            blank=True)
    ignore = models.BooleanField(default=False)

    def save(self, *args, **kwargs):
        previous = self.__class__.objects.filter(
            document_type=self.document_type, contact_id=self.contact_id)
        if previous.exists():
            previous.update(ignore=True)
        super(self.__class__, self).save(*args, **kwargs)
Exemple #24
0
class Note(BaseModel):
    lead = models.ForeignKey('crm.Lead', on_delete=models.PROTECT)
    title = models.CharField(max_length=128)
    text = models.TextField()
    read = models.BooleanField(default=False)
    ignore = models.BooleanField(default=False)

    def __str__(self):
        return self.title
Exemple #25
0
class HelpFile(BaseModel):
    title = models.CharField(max_length=62, null=True, blank=True)
    product_variant = models.ForeignKey('product.ProductVariant',
                                        on_delete=models.CASCADE)
    file = models.FileField(upload_to=Constants.HELP_FILES_PATH)
    file_type = models.CharField(choices=get_choices(
        Constants.HELP_FILES_TYPE),
                                 default="all",
                                 max_length=32)

    def __str__(self):
        return '%s: %s %s' % (
            self.file_type.title().replace(
                '_', ' '), self.product_variant.company_category.company.name,
            self.product_variant.company_category.category.name)

    class Meta:
        ordering = ('-created', )
Exemple #26
0
class Faq(BaseModel):
    category = models.ForeignKey('product.Category', on_delete=models.CASCADE)
    question = models.CharField(max_length=264)
    answer = models.TextField()

    def __str__(self):
        return '%s: %s' % (self.category.name, self.question)

    class Meta:
        ordering = ('id', )
Exemple #27
0
class Feature(BaseModel):
    feature_master = models.ForeignKey('product.FeatureMaster',
                                       null=True,
                                       blank=True,
                                       on_delete=models.CASCADE)
    product_variant = models.ForeignKey('product.ProductVariant',
                                        null=True,
                                        blank=True,
                                        on_delete=models.CASCADE)
    rating = models.FloatField(default=0.0)
    short_description = models.CharField(max_length=156, null=True, blank=True)
    long_description = models.CharField(max_length=512, null=True, blank=True)

    class Meta:
        ordering = ('feature_master__order', )

    def __str__(self):
        return "%s - %s" % (self.product_variant.name,
                            self.feature_master.name)
Exemple #28
0
class FeatureMaster(BaseModel):
    category = models.ForeignKey('product.Category',
                                 null=True,
                                 blank=True,
                                 on_delete=models.CASCADE)
    name = models.CharField(max_length=127, default="")
    order = models.IntegerField(default=1)
    feature_type = models.CharField(max_length=32,
                                    default='Others',
                                    choices=get_choices(
                                        Constants.FEATURE_TYPES))
    short_description = models.CharField(max_length=128, null=True, blank=True)
    long_description = models.TextField(null=True, blank=True)

    def __str__(self):
        return "%s - %s" % (self.name, self.category.name)

    class Meta:
        ordering = ('order', )
Exemple #29
0
class CompanyCategory(BaseModel):
    category = models.ForeignKey('product.Category', on_delete=models.CASCADE)
    company = models.ForeignKey('product.Company', on_delete=models.CASCADE)
    claim_settlement = models.CharField(max_length=128, null=True, blank=True)
    offer_flag = models.BooleanField(default=False)

    class Meta:
        unique_together = ('category', 'company')

    def __str__(self):
        return '%s - %s' % (self.company.short_name, self.category.name)
Exemple #30
0
class ApplicationRequestLog(BaseModel):
    application = models.ForeignKey('sales.application',
                                    on_delete=models.PROTECT)
    request_type = models.CharField(max_length=32,
                                    choices=get_choices(
                                        Constants.REQUEST_CHOICES))
    url = models.URLField(null=True, blank=True)
    payload = JSONField(default=dict)
    response = JSONField(default=dict)

    class Meta:
        ordering = ('-modified', )