Feat: Assessment page complete and new Home page layout for marketing phase 1 of the customer acquisition plan and offering a demo and for trainers to join the alpha trials. Reporting images created for radar diagram of Command mastery by Command Category; line graph of single command progress measured by obedience level, response latency, and compliance duration over time; Calendar Entries page filtered to unpaid bill calendary entries created using dummy data created in web server as database implementation not yet started.
This commit is contained in:
@@ -25,6 +25,8 @@ from business_objects.dog.assessment_response import Assessment_Response
|
||||
from business_objects.dog.bribe import Bribe
|
||||
from business_objects.dog.button_icon import Button_Icon
|
||||
from business_objects.dog.button_shape import Button_Shape
|
||||
from business_objects.dog.calendar_entry import Calendar_Entry
|
||||
from business_objects.dog.calendar_entry_type import Calendar_Entry_Type
|
||||
from business_objects.dog.colour import Colour
|
||||
from business_objects.dog.command import Command
|
||||
from business_objects.dog.command_button_link import Command_Button_Link
|
||||
@@ -62,6 +64,8 @@ class Model_View_Base(BaseModel, ABC):
|
||||
ATTR_ID_BRIBE: ClassVar[str] = Bribe.ATTR_ID_BRIBE
|
||||
ATTR_ID_BUTTON_ICON: ClassVar[str] = Button_Icon.ATTR_ID_BUTTON_ICON
|
||||
ATTR_ID_BUTTON_SHAPE: ClassVar[str] = Button_Shape.ATTR_ID_BUTTON_SHAPE
|
||||
ATTR_ID_CALENDAR_ENTRY: ClassVar[str] = Calendar_Entry.ATTR_ID_CALENDAR_ENTRY
|
||||
ATTR_ID_CALENDAR_ENTRY_TYPE: ClassVar[str] = Calendar_Entry_Type.ATTR_ID_CALENDAR_ENTRY_TYPE
|
||||
ATTR_ID_COLOUR: ClassVar[str] = Colour.ATTR_ID_COLOUR
|
||||
ATTR_ID_COMMAND: ClassVar[str] = Command.ATTR_ID_COMMAND
|
||||
ATTR_ID_COMMAND_BUTTON_LINK: ClassVar[str] = Command_Button_Link.ATTR_ID_COMMAND_BUTTON_LINK
|
||||
@@ -124,6 +128,8 @@ class Model_View_Base(BaseModel, ABC):
|
||||
FLAG_BUTTON_PRIMARY: ClassVar[str] = 'button-primary'
|
||||
FLAG_BUTTON_SHAPE: ClassVar[str] = Button_Shape.FLAG_BUTTON_SHAPE
|
||||
FLAG_CANCEL: ClassVar[str] = 'button-cancel'
|
||||
FLAG_CALENDAR_ENTRY: ClassVar[str] = Calendar_Entry.FLAG_CALENDAR_ENTRY
|
||||
FLAG_CALENDAR_ENTRY_TYPE: ClassVar[str] = Calendar_Entry_Type.FLAG_CALENDAR_ENTRY_TYPE
|
||||
FLAG_CALLBACK: ClassVar[str] = 'callback'
|
||||
FLAG_CAPTCHA: ClassVar[str] = 'captcha'
|
||||
FLAG_CARD: ClassVar[str] = 'card'
|
||||
@@ -192,6 +198,7 @@ class Model_View_Base(BaseModel, ABC):
|
||||
FLAG_NAV_DOG_ASSESSMENT: ClassVar[str] = 'navDogAssessment'
|
||||
FLAG_NAV_DOG_ASSESSMENTS: ClassVar[str] = 'navDogAssessments'
|
||||
FLAG_NAV_DOG_BUTTON_ICONS: ClassVar[str] = 'navDogButtonIcons'
|
||||
FLAG_NAV_DOG_CALENDAR_ENTRIES: ClassVar[str] = 'navDogCalendarEntries'
|
||||
FLAG_NAV_DOG_COLOURS: ClassVar[str] = 'navDogColours'
|
||||
FLAG_NAV_DOG_COMMAND_BUTTON_LINKS: ClassVar[str] = 'navDogCommandButtonLinks'
|
||||
FLAG_NAV_DOG_COMMAND_CATEGORIES: ClassVar[str] = 'navDogCommandCategories'
|
||||
@@ -209,6 +216,7 @@ class Model_View_Base(BaseModel, ABC):
|
||||
FLAG_OBEDIENCE_LEVEL: ClassVar[str] = Obedience_Level.FLAG_OBEDIENCE_LEVEL
|
||||
FLAG_OVERLAY: ClassVar[str] = 'overlay'
|
||||
FLAG_PAGE_BODY: ClassVar[str] = 'page-body'
|
||||
FLAG_PRICE: ClassVar[str] = Base.FLAG_PRICE
|
||||
FLAG_PRICING: ClassVar[str] = 'pricing'
|
||||
FLAG_QUANTITY: ClassVar[str] = 'quantity'
|
||||
FLAG_RESPONSE_QUALITY_METRIC: ClassVar[str] = Response_Quality_Metric.FLAG_RESPONSE_QUALITY_METRIC
|
||||
@@ -225,6 +233,7 @@ class Model_View_Base(BaseModel, ABC):
|
||||
FLAG_SUCCESS: ClassVar[str] = 'success'
|
||||
FLAG_TABLE_MAIN: ClassVar[str] = 'table-main'
|
||||
FLAG_TEMPORARY_ELEMENT: ClassVar[str] = 'temporary-element'
|
||||
FLAG_TESTIMONIAL: ClassVar[str] = 'testimonial'
|
||||
FLAG_USER: ClassVar[str] = User.FLAG_USER
|
||||
# FLAG_VALUE_PROPOSITION: ClassVar[str] = 'value-proposition'
|
||||
FLAG_WEATHER: ClassVar[str] = Weather.FLAG_WEATHER
|
||||
@@ -240,6 +249,7 @@ class Model_View_Base(BaseModel, ABC):
|
||||
HASH_PAGE_DOG_ASSESSMENT: ClassVar[str] = '/dog/assessment'
|
||||
HASH_PAGE_DOG_ASSESSMENTS: ClassVar[str] = '/dog/assessments'
|
||||
HASH_PAGE_DOG_BUTTON_ICONS: ClassVar[str] = '/dog/button-icons'
|
||||
HASH_PAGE_DOG_CALENDAR_ENTRIES: ClassVar[str] = '/dog/calendar-entries'
|
||||
HASH_PAGE_DOG_COMMAND_BUTTON_LINKS: ClassVar[str] = '/dog/command-button-links'
|
||||
HASH_PAGE_DOG_COMMAND_CATEGORIES: ClassVar[str] = '/dog/command-categories'
|
||||
HASH_PAGE_DOG_COMMANDS: ClassVar[str] = '/dog/commands'
|
||||
@@ -404,6 +414,11 @@ class Model_View_Base(BaseModel, ABC):
|
||||
return ''
|
||||
return date_time.strftime('%Y-%m-%dT%H:%M')
|
||||
@staticmethod
|
||||
def format_datetime_text(date_time):
|
||||
if date_time is None:
|
||||
return ''
|
||||
return date_time.strftime('%d/%m/%Y %H:%M')
|
||||
@staticmethod
|
||||
def jsonify(data):
|
||||
return jsonify(data)
|
||||
def get_mail_contact_public(self):
|
||||
|
||||
96
models/model_view_dog_calendar_entry.py
Normal file
96
models/model_view_dog_calendar_entry.py
Normal file
@@ -0,0 +1,96 @@
|
||||
"""
|
||||
Project: PARTS Website
|
||||
Author: Edward Middleton-Smith
|
||||
Precision And Research Technology Systems Limited
|
||||
|
||||
Technology: View Models
|
||||
Feature: Dog Calendar Entries View Model
|
||||
|
||||
Description:
|
||||
Data model for dog calendar entries view
|
||||
"""
|
||||
|
||||
# internal
|
||||
from business_objects.dog.calendar_entry import Calendar_Entry #, Parameters_Calendar_Entry
|
||||
from business_objects.dog.calendar_entry_type import Calendar_Entry_Type
|
||||
from datastores.datastore_dog import DataStore_Dog
|
||||
from models.model_view_dog_base import Model_View_Dog_Base
|
||||
from forms.dog.calendar_entry import Filters_Calendar_Entry
|
||||
# from routes import bp_home
|
||||
from helpers.helper_app import Helper_App
|
||||
import lib.argument_validation as av
|
||||
|
||||
# external
|
||||
from datetime import datetime
|
||||
from pydantic import BaseModel
|
||||
from typing import ClassVar
|
||||
|
||||
class Model_View_Dog_Calendar_Entry(Model_View_Dog_Base):
|
||||
FLAG_IS_CALENDAR_ENTRY_TYPE_BILL: ClassVar[str] = Calendar_Entry.FLAG_IS_CALENDAR_ENTRY_TYPE_BILL
|
||||
calendar_entries: list = None
|
||||
form_filters: Filters_Calendar_Entry = None
|
||||
form_filters_old: Filters_Calendar_Entry
|
||||
|
||||
def __init__(self, form_filters_old, hash_page_current=Model_View_Dog_Base.HASH_PAGE_DOG_CALENDAR_ENTRIES):
|
||||
_m = 'Model_View_Dog_Calendar_Entry.__init__'
|
||||
Helper_App.console_log(f'{_m}\nstarting...')
|
||||
super().__init__(hash_page_current=hash_page_current, form_filters_old=form_filters_old)
|
||||
self._title = 'Overdue Bills'
|
||||
self.form_filters = form_filters_old
|
||||
datastore = DataStore_Dog()
|
||||
|
||||
Helper_App.console_log(f'Form filters: {self.form_filters}')
|
||||
# parameters_filter_calendar_entry = Parameters_Calendar_Entry.from_form_filters_calendar_entry(self.form_filters)
|
||||
# Helper_App.console_log(f'Query args: {parameters_filter_calendar_entry}')
|
||||
# self.calendar_entrys, errors = datastore.get_many_calendar_entry(parameters_filter_calendar_entry)
|
||||
id_calendar_entry_type_bill = 1
|
||||
calendar_entry_types = {
|
||||
id_calendar_entry_type_bill: Calendar_Entry_Type.from_json({
|
||||
Calendar_Entry_Type.ATTR_ID_CALENDAR_ENTRY_TYPE: id_calendar_entry_type_bill
|
||||
, Calendar_Entry_Type.FLAG_CODE: 'BILL'
|
||||
, Calendar_Entry_Type.FLAG_NAME: 'Bill'
|
||||
, Calendar_Entry_Type.FLAG_ACTIVE: True
|
||||
})
|
||||
}
|
||||
|
||||
bill_1 = Calendar_Entry.from_json({
|
||||
Calendar_Entry.ATTR_ID_CALENDAR_ENTRY: 1
|
||||
, Calendar_Entry_Type.ATTR_ID_CALENDAR_ENTRY_TYPE: id_calendar_entry_type_bill
|
||||
, Calendar_Entry.FLAG_NAME: 'Client 1, monthly: July'
|
||||
, Calendar_Entry.FLAG_PRICE: 200
|
||||
, Calendar_Entry.FLAG_DATE_FROM: datetime(2025, 7, 26, 12, 0, 0)
|
||||
, Calendar_Entry.FLAG_DATE_TO: datetime(2025, 7, 26, 12, 0, 0)
|
||||
, Calendar_Entry.FLAG_ACTIVE: True
|
||||
})
|
||||
bill_1.calendar_entry_type = calendar_entry_types[id_calendar_entry_type_bill]
|
||||
bill_1.is_calendar_entry_type_bill = True
|
||||
|
||||
bill_2 = Calendar_Entry.from_json({
|
||||
Calendar_Entry.ATTR_ID_CALENDAR_ENTRY: 1
|
||||
, Calendar_Entry_Type.ATTR_ID_CALENDAR_ENTRY_TYPE: id_calendar_entry_type_bill
|
||||
, Calendar_Entry.FLAG_NAME: 'Client 2, monthly: July'
|
||||
, Calendar_Entry.FLAG_PRICE: 200
|
||||
, Calendar_Entry.FLAG_DATE_FROM: datetime(2025, 7, 25, 11, 0, 0)
|
||||
, Calendar_Entry.FLAG_DATE_TO: datetime(2025, 7, 25, 11, 0, 0)
|
||||
, Calendar_Entry.FLAG_ACTIVE: True
|
||||
})
|
||||
bill_2.calendar_entry_type = calendar_entry_types[id_calendar_entry_type_bill]
|
||||
bill_2.is_calendar_entry_type_bill = True
|
||||
|
||||
bill_3 = Calendar_Entry.from_json({
|
||||
Calendar_Entry.ATTR_ID_CALENDAR_ENTRY: 1
|
||||
, Calendar_Entry_Type.ATTR_ID_CALENDAR_ENTRY_TYPE: id_calendar_entry_type_bill
|
||||
, Calendar_Entry.FLAG_NAME: 'Client 3, monthly: July'
|
||||
, Calendar_Entry.FLAG_PRICE: 200
|
||||
, Calendar_Entry.FLAG_DATE_FROM: datetime(2025, 7, 23, 9, 0, 0)
|
||||
, Calendar_Entry.FLAG_DATE_TO: datetime(2025, 7, 23, 9, 0, 0)
|
||||
, Calendar_Entry.FLAG_ACTIVE: True
|
||||
})
|
||||
bill_3.calendar_entry_type = calendar_entry_types[id_calendar_entry_type_bill]
|
||||
bill_3.is_calendar_entry_type_bill = True
|
||||
|
||||
self.calendar_entries = [
|
||||
bill_1
|
||||
, bill_2
|
||||
, bill_3
|
||||
]
|
||||
Reference in New Issue
Block a user