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
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)
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
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)
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)
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
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)