Exemplo n.º 1
0
 def create(self, request, *args, **kwargs):
     owner = is_user_a_owner(request=self.request, raise_exception=True)
     self.house = get_object_or_404(House,
                                    pk=self.kwargs.get('pk'),
                                    owner=owner)
     return super(OwnerHousePictureListCreateView,
                  self).create(request, *args, **kwargs)
Exemplo n.º 2
0
    def get_queryset(self):
        owner = is_user_a_owner(self.request, raise_exception=False)
        if owner:
            return TenantMeal.objects.filter(house__owner=owner)

        tenant = is_user_a_tenant(self.request, raise_exception=False)
        if tenant:
            return TenantMeal.objects.filter(house=tenant.current_booking.space.house)
Exemplo n.º 3
0
 def get_object(self):
     owner = is_user_a_owner(self.request, raise_exception=True)
     tenant = get_object_or_404(Tenant, pk=self.kwargs.get('pk'))
     try:
         if tenant.current_booking.space.house.owner == owner:
             return tenant
     except:
         raise Http404({'detail': "Tenant does not have any booking in your house"})
Exemplo n.º 4
0
 def create(self, request, *args, **kwargs):
     owner = is_user_a_owner(request, raise_exception=True)
     serializer = self.get_serializer(data=request.data)
     serializer.is_valid(raise_exception=True)
     self.perform_create(serializer=serializer, owner=owner)
     headers = self.get_success_headers(serializer.data)
     return Response(serializer.data,
                     status=status.HTTP_201_CREATED,
                     headers=headers)
Exemplo n.º 5
0
    def create(self, request, *args, **kwargs):
        self.owner = is_user_a_owner(request, raise_exception=True)
        if 'tenants' in request.data:
            tenant_group, _ = create_tenant_group(request.data.copy(),
                                                  self.owner)
            request.data['tenant_group'] = tenant_group.pk

        return super(HouseBillListCreateView,
                     self).create(request, *args, **kwargs)
Exemplo n.º 6
0
 def create(self, request, *args, **kwargs):
     # check for all required fields
     required = ('name', )
     if not all(request.data.get(field) for field in required):
         return Response({"error": "Incomplete fields provided!"},
                         status=status.HTTP_400_BAD_REQUEST)
     self.owner = is_user_a_owner(request, raise_exception=True)
     return super(OwnerHouseListCreateView,
                  self).create(request, *args, **kwargs)
Exemplo n.º 7
0
    def has_permission(self, request, view):
        if not request.user.is_authenticated:
            return False

        owner = is_user_a_owner(request, raise_exception=False)
        # print("owner is ", owner)
        if owner:
            return True
        else:
            return False
Exemplo n.º 8
0
    def get_queryset(self):
        # returns all the check-ins of every current booking of spaces where space house owner = logged in owner
        owner = is_user_a_owner(self.request, raise_exception=False)
        if owner:
            return TenantLateCheckin.objects.filter(current_booking__space__house__owner=owner)

        # returns all the check-ins of logged in tenant
        tenant = is_user_a_tenant(self.request, raise_exception=True)
        if tenant:
            return TenantLateCheckin.objects.filter(current_booking=tenant.current_booking)
Exemplo n.º 9
0
    def create(self, request, *args, **kwargs):
        required = ['house', 'type', 'subtype']
        if not all([request.data.get(field) for field in required]):
            return Response({"error": "Incomplete fields provided!"},
                            status=status.HTTP_400_BAD_REQUEST)

        self.owner = is_user_a_owner(self.request, raise_exception=True)
        house = get_object_or_404(House,
                                  id=request.data['house'],
                                  owner=self.owner)
        return super(HouseSpaceListCreateView,
                     self).create(request, *args, **kwargs)
Exemplo n.º 10
0
    def get_object(self):
        house = get_object_or_404(House, id=self.kwargs.get("pk"))
        self.owner = is_user_a_owner(self.request, raise_exception=True)
        if house.managed_by is None and house.visible and house.owner == self.owner:  # if managed by Halanx
            return house

        elif house.managed_by == self.owner == house.owner:  # if user owns and manages the house
            return house

        # tenant = is_user_a_tenant(self.request, raise_exception=False)
        # if tenant:  # if user is a tenant and has booking with the space in the current house
        #     obj = get_object_or_404(Booking, tenant=tenant, space__in=house.spaces.all())
        #     from utility.logging_utils import cwlogger
        #     cwlogger.info(dict(type=self.__class__.__name__, tenant=tenant.id, house=self.kwargs.get('pk')))
        #     return obj
        raise Http404("Not found")
Exemplo n.º 11
0
    def get_queryset(self):
        self.owner = is_user_a_owner(request=self.request,
                                     raise_exception=True)
        query_filter_params = {
            'paid': 'paid',
            'due_date__lte': 'due_date__lte',
            'due_date__gte': 'due_date__gte',
            'amount__lte': 'amount__lte',
            'amount__gte': 'amount__gte'
        }

        extra_kwargs = get_filter_extra_kwargs(query_filter_params,
                                               self.request)
        house = get_object_or_404(House,
                                  owner=self.owner,
                                  pk=self.kwargs.get('pk'))
        return Bill.objects.filter(owner=self.owner,
                                   house=house,
                                   **extra_kwargs)
Exemplo n.º 12
0
    def get_queryset(self):
        owner = is_user_a_owner(self.request, raise_exception=True)

        query_filter_params = {
            'house_id': 'house',
            'visited': 'visited',
            'cancelled': 'cancelled'
        }

        extra_kwargs = get_filter_extra_kwargs(query_filter_params,
                                               self.request)

        # To get upcoming visits and past visits
        if 'visit_type' in self.request.GET:
            if self.request.GET['visit_type'] == 'upcoming':
                extra_kwargs['scheduled_visit_time__gte'] = str(datetime.now())

            elif self.request.GET['visit_type'] == 'past':
                extra_kwargs['actual_visit_time__lte'] = str(datetime.now())

        return HouseVisit.objects.filter(house__owner=owner, **extra_kwargs)
Exemplo n.º 13
0
 def create(self, request, *args, **kwargs):
     owner = is_user_a_owner(request, raise_exception=True)
     get_object_or_404(House, owner=owner, id=request.data['house'])
     return super(TenantMealListCreateView, self).create(request, *args, **kwargs)
Exemplo n.º 14
0
 def get_queryset(self):
     owner = is_user_a_owner(request=self.request, raise_exception=True)
     house = get_object_or_404(House, pk=self.kwargs.get('pk'), owner=owner)
     return HousePicture.objects.filter(house__owner=owner, house=house)
Exemplo n.º 15
0
 def get_serializer_context(self):
     result = super(TeamMemberRetrieveUpdateDestroyView,
                    self).get_serializer_context()
     result["owner"] = is_user_a_owner(self.request, raise_exception=True)
     return result
Exemplo n.º 16
0
def create_tenant_view(request):
    """
    1. validation phone and space data
    """
    owner = is_user_a_owner(request, raise_exception=True)
    # Phone no, name, space, rent are mandatory
    required = ('phone_no', 'space', 'rent', 'license_start_date')

    if not all(request.data.get(field) for field in required):
        return Response({'error': "Incomplete fields provided!"}, status=status.HTTP_400_BAD_REQUEST)

    phone_no, space = validate_phone_no_space_and_free_beds(request=request, owner=owner)  # validate phone_no and space
    if request.data.get('name', None):
        name = request.data['name']
    else:
        name = ''

    # extract phone number
    phone_no = re.sub(r'\+91|[-\s()]', '', request.data['phone_no'])

    customer = is_customer_exist(phone_no)

    if customer is None:  # if No such customer exists create user
        try:
            user, created = User.objects.get_or_create(username="******".format(phone_no),
                                                       password="******".format(phone_no),
                                                       )
            if created:
                user.first_name = name
                user.save()

        except IntegrityError:  # user already exists
            user = User.objects.get(username="******".format(phone_no))

        customer_create_data = dict(user=user, phone_no=phone_no, is_registered=False)
        customer = Customer.objects.create(**customer_create_data)

    tenant, created = Tenant.objects.get_or_create(customer=customer)
    notification_message = ""
    if created:
        tenant_type_booking = NEW_TENANT_BOOKING
    else:
        tenant_type_booking = EXISTING_TENANT_BOOKING

    if created and customer.is_registered:  # New Tenant created and the customer is already registered on Halanx
        notification_message = NEW_TENANT_REGISTERED_CUSTOMER
    elif created and not customer.is_registered:  # New Tenant created and the customer is not registered on Halanx
        notification_message = NEW_TENANT_UNREGISTERED_CUSTOMER
    elif not created:
        if tenant.current_booking is not None:
            raise ValidationError({'detail': "This tenant already has current booking"})
        if tenant.customer.is_registered:  # Tenant already exists
            notification_message = EXISTING_TENANT_REGISTERED_CUSTOMER
        if not tenant.customer.is_registered:
            notification_message = EXISTING_TENANT_UNREGISTERED_CUSTOMER

    send_notification_to_tenant(phone_no=phone_no, customer=customer, title=notification_message)

    booking_creation_data = {
        'space': space, 'tenant': tenant, 'type': tenant_type_booking, 'rent': request.data['rent'],
        'license_start_date': request.data['license_start_date']
    }

    extra_fields = ('security_deposit', 'token_amount', 'onboarding_charges', 'paid_token_amount',
                    'paid_movein_charges', 'move_in_notes')

    for field in extra_fields:
        if request.data.get(field, None):
            booking_creation_data[field] = request.data.get(field)

    Booking.objects.create(**booking_creation_data)

    tenant_data = TenantDetailSerializer(tenant, display_fields=['id', 'customer']).data

    response_data = {
        'status': 'success',
        'data': tenant_data
    }
    return Response(response_data, status=status.HTTP_201_CREATED)
Exemplo n.º 17
0
 def get_queryset(self):
     owner = is_user_a_owner(request=self.request, raise_exception=True)
     return Tenant.objects.filter(bookings__space__house__owner=owner)
Exemplo n.º 18
0
 def get_object(self):
     self.owner = is_user_a_owner(self.request, raise_exception=True)
     space = get_object_or_404(Space,
                               pk=self.kwargs.get("pk"),
                               house__owner=self.owner)
     return space
Exemplo n.º 19
0
def create_bill_split(request, pk):
    """
        {
            'bill_split' :
            {
                'data_format' : {
                'distribution_type': 'amount',  # or 'ratio'
                'tenants': [
                    {
                        'id': 1,
                        'value': 1000 # or 0.4
                    },
                    {
                        'id': 2,
                        'value': 1500 # or 0.6
                    }
                ]
            }
        }
    """
    owner = is_user_a_owner(request, raise_exception=True)
    bill = get_object_or_404(Bill, pk=pk, owner=owner)

    data_format = request.data['bill_split']['data_format']

    value_sum = 0
    tenants = []
    for tenant in data_format['tenants']:
        try:
            obj = get_object_or_404(Tenant, pk=tenant['id'])
            tenants.append(obj)

            # Check if tenant has any booked space in owners house
            raise_exception = True
            try:
                if obj.current_booking.space.house.owner == owner:
                    raise_exception = False
            except Exception as E:
                print(E)
            finally:
                if raise_exception:
                    raise ValidationError({
                        'detail':
                        "This Tenant is not currently booked in any of your house space"
                    })

            value_sum += validate_single_amount_or_ratio_value(
                bill=bill,
                distribution_type=data_format['distribution_type'],
                value=tenant['value'])

            if data_format['distribution_type'] == DISTRIBUTION_TYPE_AMOUNT:
                tenant['bill_contribution'] = tenant['value']
            elif data_format['distribution_type'] == DISTRIBUTION_TYPE_RATIO:
                tenant['bill_contribution'] = tenant['value'] * bill.amount
        except Http404:
            raise ValidationError({'detail': 'Not found'})

    if data_format['distribution_type'] == DISTRIBUTION_TYPE_AMOUNT:
        if value_sum != bill.amount:
            raise ValidationError(
                {'detail': "Sum must be equal to {}".format(bill.amount)})

    elif data_format['distribution_type'] == DISTRIBUTION_TYPE_RATIO:
        if value_sum != 1:
            raise ValidationError({'detail': "Ratio Sum must be equal to 1"})

    bill_split_instance_list = []

    if len(set(tenants)) < len(tenants):
        raise ValidationError({'detail': "Duplicate Tenant Found"})

    if set(bill.tenant_group.tenants.all()) != set(tenants):
        raise ValidationError({'detail': 'Tenants Mismatched'})

    for tenant in data_format['tenants']:
        bill_split_instance = BillSplit.objects.create(
            tenant=Tenant.objects.get(pk=tenant['id']),
            bill=bill,
            amount=tenant['bill_contribution'],
            due_date=bill.due_date)

        bill_split_instance_list.append(bill_split_instance)

    bill_split_serializer = BillSplitSerializer(bill_split_instance_list,
                                                many=True)
    return Response(bill_split_serializer.data, status=status.HTTP_201_CREATED)
Exemplo n.º 20
0
 def get_object(self):
     return get_object_or_404(TeamMember,
                              pk=self.kwargs.get("pk"),
                              owner=is_user_a_owner(self.request,
                                                    raise_exception=True))
Exemplo n.º 21
0
 def get_queryset(self):
     return Vendor.objects.filter(
         owner=is_user_a_owner(self.request, raise_exception=True))
Exemplo n.º 22
0
 def get(self, request, *args, **kwargs):
     self.owner = is_user_a_owner(request=request, raise_exception=True)
     if self.owner:
         tenant = get_object_or_404(Tenant, pk=request.query_params['tenant'])
         return Response(self.get_serializer(tenant).data, status=status.HTTP_200_OK)
Exemplo n.º 23
0
 def get_serializer_context(self):
     result = super(VendorListCreateView, self).get_serializer_context()
     result["owner"] = is_user_a_owner(self.request, raise_exception=True)
     return result
Exemplo n.º 24
0
 def get_queryset(self):
     owner = is_user_a_owner(request=self.request, raise_exception=True)
     return Bill.objects.filter(owner=owner)
Exemplo n.º 25
0
def create_tenant_group_view(request):
    owner = is_user_a_owner(request, raise_exception=True)
    instance, tenant_group_serializer = create_tenant_group(
        request.data.copy(), owner)
    return Response(tenant_group_serializer.data,
                    status=status.HTTP_201_CREATED)
Exemplo n.º 26
0
 def get_object(self):
     self.owner = is_user_a_owner(self.request, raise_exception=True)
     return get_object_or_404(Vendor,
                              pk=self.kwargs.get("pk"),
                              owner=self.owner)
Exemplo n.º 27
0
 def get_queryset(self):
     owner = is_user_a_owner(self.request, raise_exception=True)
     query_filter_params = {'type': 'type'}
     extra_kwargs = get_filter_extra_kwargs(query_filter_params,
                                            self.request)
     return Space.objects.filter(house__owner=owner, **extra_kwargs)
Exemplo n.º 28
0
 def get_serializer_context(self):
     result = super(TeamMemberListCreateView, self).get_serializer_context()
     result['owner'] = is_user_a_owner(self.request, raise_exception=True)
     return result