Basic app as per Pegasus, with 2 scheleton apps added: customers employees
However, in the beginning the employees app will not be used. Employees will just be users and for the moment we do not need to track additional information about them. We will have a separate group called "collaborators" that will have extra permssions to be able to edit items
Created the jobcycle app Created menu links in the sidebar Created basic templates for the home page of requirements, quotations, jobs and invoices (these just point to an empty page with a title) The idea will be to create a single template for all items Created the BaseItem model Created the Requirement, Quotation and Job models, as well as the admin interface
Basic CLU (Create, List, Update) Views for requirements, quotations and jobs Basic state machine for workflows implemented for the three models No front-end is affected yet Each UpdateView form will fetch the buttons that it needs from a utils module and pass them to the context Each button will then trigger and action and be interpreted in the form_valid()method of the UpdateView to move the item to another state and perform additional actions (like create a quotation from a requirement, for example)
Added Detail views to each item Basic detailview, with just showing all the fields in the item, with no links between them
Added a "contact us" page that has a form that can transform into a requirement and also create a new customer and potentially a new user
Basic CLU (Create, List, Update) Views for Customers
Basic CLU (Create, List, Update) Views for Invoices and their invoiceitems Using some htmx to add/edit the invoiceitems, but it's not working fully yet
Some minor changes and corrections. Moved the invoices views to use their own templates instead of the common ones Now also the listView templates include a table template, and the table the item rows
Created the comments app and the Comment model (with admin code too) Added it to the BaseItem model No views at the moment
Added the comments functionality to the BaseItem and the Customer model, so now all Requirements, Invoices, etc. can have comments. In each UpdateView the comments are pulled into the context and displayed at the bottom of the page in table format
Created a generic attachment model to add files to the items. There are 2 clases, FileAttachment that is the actual file, and Attachment, that captures which file is attached to which item via a generic relation
Added flowbite to the p
Initial development of frontend with flowbite Some initial progress with Customer forms and Customer list
Applying flowbite styles to the BaseItems templates Added the help_text to the forms
Added Flowbite datepicker: cp node_modules/flowbite/dist/datepicker.js static/js In the html template where we want to use it (at the end): {% block page_js %} <script src="{% static 'js/datepicker.js' %}"></script> {% endblock page_js %} To use it: {% render_field form.validity|attr:"datepicker"|attr:"datepicker-format:yyyy-mm-dd"|attr:"datepicker-autohide" class="...
Changed the invoice forms to use flowbite The HTMX and InvoiceItems are not working yet
Added some scheleton pages (Services, Pricing...)
Adapted the Application UI from Flowbite
Changed the tables for comments and attachments to Flowbite format
Menu option to export all relevant data. This allows for a very simple backup for our users
Adapted the messages.html template to display Flowbite toasts. I have not been able to properly use the {{ message.tag_level }} as implementen in Pegasus, so I left it as several ifs
Added danger formats to the form fields when there are errors, as well as an error message
That
Added pagination to ListViews Added createt_at to ListView tables Modified the updateCustomer template to incorporate errors Changed the format for the errors in the form fields. Apparently, django has a default class called .errorlist, and this is defined in assets/styles/app/utilities.saas, but it uses the color variables from daisyui. So I have updated the -danger variable to be the same as the danger-700 color in tailwind.config.js and I have also added the font-size: .875rem; as suggested by ChatGPT: // This is typically what text-sm might represent
Added a modal confirmation when rejecting a requirement or cancelling a quotation/job The cancel/reject button is now populated with data-modal-target and data-modal-toggle attributes in utils.py, and then several modals are included in the item_update.html. This is not very efficient (or elegant) and alter we can change it to populate buttons and modals at the same time in utils.py
Added django-filter to enable filtering listViews. For the moment it's only implemented for Requirements
Implemented filters also for Quotation and Job
Changed the ListView tables so that every row only has the option to EDIT the item. No Detail and no Delete for the moment Also, in the Update views, if there are no buttons because the item cannot be modified, there is now a link that appears only for staff users that will take them to the admin page for this object, where they can change it. This should be done with extreme caution as no records (comments, etc.) will be kept of this change. This is under the owner's responsibility
Finished the code from # frontend01: invoice forms 2023 11 23 to allow to add and edit invoice items directly via htmx
Basic CLU views for FileAttachments, so that we can have a place to view all the uploaded files. This is an intermediary step to operate with the Attachments that the items will have Additionally, some improvements to the invoice_line_items tables
updated the workflow for Requirements by adding comments in the transitions from status (in the form_valid method)
updated the workflows for Requirements, Quotations and Jobs including comments in the transitions
Added the option to add a new attachment to an item from the update view of that item
Added a file upload field to the WebRequirement form in order to allow uploading of files The file will then be created in the system and tagged to the Requirement created
Automatic assignment of owner after Analyse
In order to configure the emails to be sent, we are using the package django-simple-mail (https://github.com/VingtCinq/django-simple-mail). This allows us to configure the basic template and then each of the email types to be sent, which makes it very easy to send from the views.py The base template is built using Blocks (https://useblocks.io) and adapting it later for Django We also use the option to translate the emails provided by simple-mail This commit has a very basic default template with placeholder elements, and only a couple of emails created TODO There are also some mail templates created under jobcycle/emails that will not be needed
Added the rest of emails needed for the basic flow (no invoices yet)
Improve functionality for attachments Add Terms&Conditions model Implement currencies and currency exchange (copy from HomeFinance) Create an "is_employee" flag for a user and a EmployeeRequiredMixin permission so that only employees can handle all items Add item_type to the BaseItem model. This will reflect potential different job types or services that the SP can provide. For example, for a translator, we can use types of "normal translation", "urgent translation", "sworn tranlsation" or "interpreting" Workflows: Add emails Workflows: add field validations Emails: in the emails, especially the internal ones, add more information like job id and possibly links to the actual job DONE Rework on the Invoice Update template, to adapt HTMX to Flowbite format DONE Check Validation errors in the item and customer forms DONE Add Attachments DONE Add Comments DONE Add Invoice models DONE Add Export to Excel functionality, to save all info in the database to a well-formatted Excel file
DONE Make "deadline" field in BaseItemForm a DatePicker DONE Add Filters and pagination to the ListViews SOLVED I've set the top NavBar to be fixed, and this interferes with the notification messages DONE In the ListView tables, the created_at date should be shown. It currencly does not appear Autocomplete fuctionality in Select fields. Look at "Select2" (https://select2.org/) for a apparently simple implementantion. The drawback is that it requires jQuery Add UI for files Add TOOLTIPS to the buttons to explain in more detail their function
Migrate all account pages to Flowbite Check template "account/snippets/already_logged_in.html". It's called in the password_reset template when the user is logged in
TODO There are also some mail templates created under jobcycle/emails that will not be needed
Changed the colors and added the logos
As per https://flowbite.com/docs/customize/dark-mode/
It works, adapting to the computer's settings. There are a few things to retouch for the dark mode: Main page:
- The logo does not look good
- The navbar background
- Backgrounds in general
- Icons
- CTA: background and title