예제 #1
0
    def get_info_rates_list(self, initial_date: datetime,
                            final_date: datetime):
        """
        Returns a list with all the rates data for te selected range
        :rtype: list
        """
        helper = Helper()
        week_suggestions_list = []

        while initial_date <= final_date:
            day_object = {
                'date': str(initial_date.strftime('%d-%m-%Y')),
                'day_name': None,
                'total_rates': None,
                'number_day': helper.get_number_day(initial_date),
            }

            filtered_suggestions = self.satisfaction_ratings.filter(
                creation_date__range=[
                    helper.naive_to_datetime(initial_date),
                    helper.naive_to_datetime(initial_date + timedelta(days=1))
                ])

            day_object['total_rates'] = str(filtered_suggestions.count())
            day_object['day_name'] = helper.get_name_day(initial_date)
            week_suggestions_list.append(day_object)

            # restarting counters
            initial_date = initial_date + timedelta(days=1)

        return week_suggestions_list
예제 #2
0
    def get_sales_actual_week(self):
        """
        Gets the following properties for each week's day: Name, Date and Earnings
        """
        helper = Helper()
        week_sales_list = []
        total_earnings = 0
        days_to_count = helper.get_number_day(datetime.now())
        day_limit = days_to_count
        start_date_number = 0

        while start_date_number <= day_limit:
            day_object = {
                'date':
                str(
                    helper.start_datetime(days_to_count).date().strftime(
                        '%d-%m-%Y')),
                'day_name':
                None,
                'earnings':
                None,
                'number_day':
                helper.get_number_day(
                    helper.start_datetime(days_to_count).date()),
            }

            day_tickets = self.tickets_pos.filter(ticket__created_at__range=[
                helper.start_datetime(days_to_count),
                helper.end_datetime(days_to_count)
            ])

            for ticket_item in day_tickets:
                for ticket_cartridge_detail_item in self.get_cartridges_tickets_details(
                ):
                    if ticket_cartridge_detail_item.ticket_base == ticket_item.ticket:
                        total_earnings += ticket_cartridge_detail_item.price
                for ticket_package_detail_item in self.get_packages_tickets_details(
                ):
                    if ticket_package_detail_item.ticket_base == ticket_item.ticket:
                        total_earnings += ticket_package_detail_item.price

            day_object['earnings'] = str(total_earnings)
            day_object['day_name'] = helper.get_name_day(
                helper.start_datetime(days_to_count).date())

            week_sales_list.append(day_object)

            # restarting counters
            days_to_count -= 1
            total_earnings = 0
            start_date_number += 1

        return json.dumps(week_sales_list)
예제 #3
0
    def get_sales_list(self, start_dt, final_dt):
        """
        Gets the following properties for each week's day: Name, Date and Earnings
        """
        helper = Helper()
        limit_day = start_dt + timedelta(days=1)
        total_days = (final_dt - start_dt).days
        week_sales_list = []
        count = 1
        total_earnings = 0

        while count <= total_days:
            day_tickets = self.tickets_pos.filter(
                ticket__created_at__range=[start_dt, limit_day])
            day_object = {
                'date': str(start_dt.date().strftime('%d-%m-%Y')),
                'day_name': None,
                'earnings': None,
                'number_day': helper.get_number_day(start_dt),
            }

            for ticket_item in day_tickets:
                for ticket_cartridge_detail_item in self.get_cartridges_tickets_details(
                ):
                    if ticket_cartridge_detail_item.ticket_base == ticket_item.ticket:
                        total_earnings += ticket_cartridge_detail_item.price
                for ticket_package_detail_item in self.get_packages_tickets_details(
                ):
                    if ticket_package_detail_item.ticket_base == ticket_item.ticket:
                        total_earnings += ticket_package_detail_item.price

            day_object['day_name'] = helper.get_name_day(start_dt.date())
            day_object['earnings'] = str(total_earnings)

            week_sales_list.append(day_object)

            # Reset data
            limit_day += timedelta(days=1)
            start_dt += timedelta(days=1)
            total_earnings = 0
            count += 1

        return week_sales_list
예제 #4
0
    def get_info_rates_actual_week(self):
        """
        Gets the following properties for each week's day: Day name, Date, number day and total rates
        :rtype: list
        """
        helper = Helper()
        week_suggestions_list = []
        days_to_count = helper.get_number_day(datetime.now())
        day_limit = days_to_count
        start_date_number = 0

        while start_date_number <= day_limit:
            day_object = {
                'date':
                str(
                    helper.start_datetime(days_to_count).date().strftime(
                        '%d-%m-%Y')),
                'day_name':
                None,
                'total_rates':
                None,
                'number_day':
                helper.get_number_day(
                    helper.start_datetime(days_to_count).date()),
            }

            filtered_suggestions = self.satisfaction_ratings.filter(
                creation_date__range=[
                    helper.start_datetime(days_to_count),
                    helper.end_datetime(days_to_count)
                ])

            day_object['total_rates'] = str(filtered_suggestions.count())
            day_object['day_name'] = helper.get_name_day(
                helper.start_datetime(days_to_count).date())

            week_suggestions_list.append(day_object)

            # restarting counters
            days_to_count -= 1
            start_date_number += 1

        return json.dumps(week_suggestions_list)
예제 #5
0
    def get_diners_actual_week(self):
        if self.__all_access_logs is None:
            self.set_all_access_logs()
        helper = Helper()
        week_diners_list = []
        total_entries = 0
        days_to_count = helper.get_number_day(date.today())
        day_limit = days_to_count
        start_date_number = 0

        while start_date_number <= day_limit:
            day_object = {
                'date':
                str(
                    helper.start_datetime(days_to_count).date().strftime(
                        '%d-%m-%Y')),
                'day_name':
                None,
                'entries':
                None,
                'number_day':
                helper.get_number_day(
                    helper.start_datetime(days_to_count).date())
            }

            logs = self.__all_access_logs. \
                filter(access_to_room__range=[helper.start_datetime(days_to_count), helper.end_datetime(days_to_count)])

            for _ in logs:
                total_entries += 1

            day_object['entries'] = str(total_entries)
            day_object['day_name'] = helper.get_name_day(
                helper.start_datetime(days_to_count).date())

            week_diners_list.append(day_object)

            # restarting counters
            days_to_count -= 1
            total_entries = 0
            start_date_number += 1

        return json.dumps(week_diners_list)
예제 #6
0
    def get_weeks_entries(self, initial_dt, final_dt):
        """
        Gets the following properties for each week's day: Name, Date and Earnings
        """
        if self.__all_access_logs is None:
            self.set_all_access_logs()

        helper = Helper()
        limit_day = initial_dt + timedelta(days=1)
        weeks_list = []
        count = 1
        total_days = (final_dt - initial_dt).days

        while count <= total_days:
            diners_entries = self.__all_access_logs.filter(
                access_to_room__range=[initial_dt, limit_day])
            day_object = {
                'date':
                str(
                    timezone.localtime(initial_dt).date().strftime(
                        '%d-%m-%Y')),
                'day_name':
                helper.get_name_day(initial_dt.date()),
                'entries':
                diners_entries.count(),
                'number_day':
                helper.get_number_day(initial_dt)
            }

            weeks_list.append(day_object)

            # Reset data
            limit_day += timedelta(days=1)
            initial_dt += timedelta(days=1)
            count += 1

        return weeks_list
예제 #7
0
def sales(request):
    sales_helper = TicketPOSHelper()
    helper = Helper()

    if request.method == 'POST':
        if request.POST['type'] == 'sales_day':
            """
            Returns a list with objects:
            Each object has the following characteristics
            """
            sales_day_list = []
            start_day = helper.naive_to_datetime(datetime.strptime(request.POST['date'], '%d-%m-%Y').date())
            end_date = helper.naive_to_datetime(start_day + timedelta(days=1))
            tickets_objects = sales_helper.tickets_pos.filter(ticket__created_at__range=[start_day, end_date])

            for ticket_pos in tickets_objects:
                """
                Filling in the sales list of the day
                """
                earnings_sale_object = {
                    'id_ticket': ticket_pos.ticket.id,
                    'datetime': timezone.localtime(ticket_pos.ticket.created_at),
                    'earnings': 0
                }

                # Cartridge Ticket Detail
                for cartridge_ticket_detail in sales_helper.get_cartridges_tickets_details():
                    if cartridge_ticket_detail.ticket_base == ticket_pos.ticket:
                        earnings_sale_object['earnings'] += cartridge_ticket_detail.price

                # Package Ticket Detail
                for package_ticket_detail in sales_helper.get_packages_tickets_details():
                    if package_ticket_detail.ticket_base == ticket_pos.ticket:
                        earnings_sale_object['earnings'] += package_ticket_detail.price

                sales_day_list.append(earnings_sale_object)
            return JsonResponse({'sales_day_list': sales_day_list})

        if request.POST['type'] == 'ticket_details':
            ticket_id = int(request.POST['ticket_id'])
            ticket_object = {
                'ticket_id': ticket_id,
                'ticket_order': '',
                'cartridges': [],
                'packages': [],
            }

            # Cartridge Ticket Details
            for cartridge_ticket_detail in sales_helper.get_cartridges_tickets_details():
                if cartridge_ticket_detail.ticket_base.id == ticket_id:
                    ticket_object['ticket_order'] = cartridge_ticket_detail.ticket_base.order_number

                    cartridge_object = {
                        'name': cartridge_ticket_detail.cartridge.name,
                        'quantity': cartridge_ticket_detail.quantity,
                        'total': cartridge_ticket_detail.price
                    }

                    ticket_object['cartridges'].append(cartridge_object)

            # Package Ticket Details
            for package_ticket_detail in sales_helper.get_packages_tickets_details():
                if package_ticket_detail.ticket_base.id == ticket_id:
                    ticket_object['ticket_order'] = package_ticket_detail.ticket_base.order_number
                    cartridges_list = []

                    package_cartridge_recipe = PackageCartridgeRecipe.objects.filter(
                        package_cartridge=package_ticket_detail.package_cartridge)

                    for cartridge_recipe in package_cartridge_recipe:
                        cartridges_list.append(cartridge_recipe.cartridge.name)

                    package_cartridge_object = {
                        'cartridges': cartridges_list,
                        'quantity': package_ticket_detail.quantity,
                        'total': package_ticket_detail.price
                    }

                    ticket_object['packages'].append(package_cartridge_object)

            return JsonResponse({'ticket_details': ticket_object})

        if request.POST['type'] == 'tickets':
            tickets_objects_list = []

            for ticket_pos in sales_helper.tickets_pos:
                for cartridge_ticket_detail in sales_helper.get_cartridges_tickets_details():
                    if cartridge_ticket_detail.ticket == ticket_pos.ticket:
                        ticket_object = {
                            'ID': ticket_pos.ticket.id,
                            'Fecha': timezone.localtime(ticket_pos.ticket.created_at).date(),
                            'Hora': timezone.localtime(ticket_pos.ticket.created_at).time(),
                            'Vendedor': ticket_pos.cashier.username,
                        }
                        if ticket_pos.ticket.payment_type == 'CA':
                            ticket_object['Tipo de Pago'] = 'Efectivo'
                        else:
                            ticket_object['Tipo de Pago'] = 'Crédito'
                        if cartridge_ticket_detail.cartridge:
                            ticket_object['Producto'] = cartridge_ticket_detail.cartridge.name
                        else:
                            ticket_object['Producto'] = None
                        if cartridge_ticket_detail.package_cartridge:
                            ticket_object['Paquete'] = cartridge_ticket_detail.package_cartridge.name
                        else:
                            ticket_object['Paquete'] = None
                        ticket_object['Cantidad'] = cartridge_ticket_detail.quantity
                        ticket_object['Total'] = cartridge_ticket_detail.price
                        ticket_object[
                            'Precio Unitario'] = cartridge_ticket_detail.price / cartridge_ticket_detail.quantity

                        tickets_objects_list.append(ticket_object)

            return JsonResponse({'ticket': tickets_objects_list})

        if request.POST['type'] == 'sales_week':
            initial_date = request.POST['dt_week'].split(',')[0]
            final_date = request.POST['dt_week'].split(',')[1]
            initial_date = helper.parse_to_datetime(initial_date)
            final_date = helper.parse_to_datetime(final_date) + timedelta(days=1)
            week_sales = sales_helper.get_sales_list(initial_date, final_date)
            tickets = sales_helper.get_tickets_list(initial_date, final_date)
            data = {
                'sales': week_sales,
                'tickets': tickets,
                'week_number': helper.get_week_number(initial_date)
            }
            return JsonResponse(data)

    # Any other request method:
    template = 'sales/sales.html'
    title = 'Registro de Ventas'

    initial_date, final_date = helper.get_initial_final_week_datetime()

    context = {
        'title': PAGE_TITLE + ' | ' + title,
        'page_title': title,
        'actual_year': datetime.now().year,
        'sales_week': sales_helper.get_sales_actual_week(),
        'today_name': helper.get_name_day(datetime.now()),
        'today_number': helper.get_number_day(datetime.now()),
        'week_number': helper.get_week_number(date.today()),
        'tickets': sales_helper.get_tickets_list(initial_date, final_date),
        'dates_range': sales_helper.get_dates_range_json(),
    }

    return render(request, template, context)