|
2 | 2 | Invoice project milestones |
3 | 3 | ========================== |
4 | 4 |
|
5 | | -Invoicing based on project milestones can be used for expensive or large-scale projects with |
6 | | -discrete, measurable deliverables. The series of milestones in a project represent a clear sequence |
7 | | -of work that will inevitably result in the completion of a project and/or contract. |
| 5 | +.. |SO| replace:: :abbr:`SO (Sales Order)` |
| 6 | +.. |SOs| replace:: :abbr:`SOs (Sales Orders)` |
8 | 7 |
|
9 | | -This method of invoicing ensures the company gets a consistent flow of money throughout the lifetime |
10 | | -of the project. Customers can closely monitor every phase of the project's development as it |
11 | | -happens, in addition to paying a large bill in several installments, instead of all at once. |
| 8 | +Invoicing based on project milestones allows companies to bill large or long-running projects |
| 9 | +progressively as key deliverables are completed. Each milestone represents a measurable stage of |
| 10 | +work whose completion triggers invoicing. This approach helps maintain predictable cash flow and |
| 11 | +gives customers visibility into project progress, while allowing payment to occur in manageable |
| 12 | +installments. |
12 | 13 |
|
13 | | -Create milestone products |
14 | | -========================= |
15 | | - |
16 | | -In Odoo, each milestone of a project is considered as an individual product. |
17 | | - |
18 | | -To create and/or configure products to work like this, first navigate to :menuselection:`Sales app |
19 | | ---> Products --> Products`. Then, click on a product, or create a new one by clicking |
20 | | -:guilabel:`New`. |
21 | | - |
22 | | -The option to invoice based on milestones is only available for certain product types. |
23 | | - |
24 | | -On the product form, under the :guilabel:`General Information` tab, the :guilabel:`Product Type` |
25 | | -field *must* be set on any of the following options: :guilabel:`Service`, :guilabel:`Event Ticket`, |
26 | | -:guilabel:`Event Booth`, or :guilabel:`Course`. |
27 | | - |
28 | | -.. image:: milestone/product-type-field.png |
29 | | - :align: center |
30 | | - :alt: The invoicing policy field drop-down menu with options on product form. |
31 | | - |
32 | | -With any of those :guilabel:`Product Type` options selected, choose :guilabel:`Based on Milestones` |
33 | | -from the :guilabel:`Invoicing Policy` drop-down menu. |
34 | | - |
35 | | -.. image:: milestone/invoicing-policy-field.png |
36 | | - :align: center |
37 | | - :alt: The invoicing policy field drop-down menu with options on product form. |
38 | | - |
39 | | -Beneath that is the :guilabel:`Create on Order` field. |
40 | | - |
41 | | -To ensure workflows are as seamless as possible, it is recommended that an option in the |
42 | | -:guilabel:`Create on Order` field is selected. |
43 | | - |
44 | | -.. note:: |
45 | | - Leaving it on the default :guilabel:`Nothing` option won't negatively affect the desired |
46 | | - workflow. However, a project *must* then be created directly from a sales order form with that |
47 | | - specific product. Once a project is created *then* milestones and tasks can be created and |
48 | | - configured. |
49 | | - |
50 | | -When the :guilabel:`Create on Order` default option of :guilabel:`Nothing` is clicked, a drop-down |
51 | | -menu is revealed with the following options: |
52 | | - |
53 | | -- :guilabel:`Task`: Odoo creates a task related to this milestone product in the *Projects* app when |
54 | | - this specific product is ordered. |
55 | | -- :guilabel:`Project \& Task`: Odoo creates a project and task related to this milestone product in |
56 | | - the *Projects* app when this specific product is ordered. |
57 | | -- :guilabel:`Project`: Odoo creates a project related to this milestone product in the *Projects* |
58 | | - app when this specific product is ordered. |
59 | | - |
60 | | -When :guilabel:`Task` is selected, a :guilabel:`Project` field appears. In this field, select to |
61 | | -which existing project in the *Projects* app this created task should be connected. |
62 | | - |
63 | | -.. image:: milestone/task-option-project-field.png |
64 | | - :align: center |
65 | | - :alt: The Project field appears when the Task option is selected in Create on Order field. |
66 | | - |
67 | | -When :guilabel:`Project \& Task` or :guilabel:`Project` is selected, two new fields appear: |
68 | | -:guilabel:`Project Template` and :guilabel:`Workspace Template`. |
69 | | - |
70 | | -.. image:: milestone/project-task-option-project-workspace-fields.png |
71 | | - :align: center |
72 | | - :alt: The Project template and workspace template fields that appear on milestone product. |
73 | | - |
74 | | -The :guilabel:`Project Template` field provides template options to use for the project that will be |
75 | | -created when this specific product is ordered. |
76 | | - |
77 | | -The :guilabel:`Workspace Template` field provides template options to use for the workspace (for the |
78 | | -*Documents* app, not the *Projects* app) that will be automatically generated for the project when |
79 | | -this specific product is ordered. |
80 | | - |
81 | | -.. tip:: |
82 | | - For organizational purposes, click the :guilabel:`Sales` tab on the product form, and enter a |
83 | | - custom 'Milestone' related descriptor in the :guilabel:`Sales Description` field. This |
84 | | - information appears in the :guilabel:`Description` column on the :guilabel:`Order Lines` tab of |
85 | | - the sales order. |
86 | | - |
87 | | - Or, directly edit/modify the :guilabel:`Description` field on the :guilabel:`Order Lines` tab of |
88 | | - the sales order. |
89 | | - |
90 | | - This is *not* a requirement. |
91 | | - |
92 | | -Invoice milestones |
93 | | -================== |
94 | | - |
95 | | -.. note:: |
96 | | - The following flow features a trio of milestone products that have :guilabel:`Service` set as |
97 | | - their :guilabel:`Product Type`, and :guilabel:`Task` set on their :guilabel:`Create on Order` |
98 | | - field. |
99 | | - |
100 | | - .. image:: milestone/settings-for-workflow.png |
101 | | - :align: center |
102 | | - :alt: Product with Service "Product Type" and "Task" in the Create on Order field on form. |
103 | | - |
104 | | - Those tasks are then attached to a pre-existing :guilabel:`Project`, which, in this case, is |
105 | | - titled, :guilabel:`Rebranding Projects`. |
106 | | - |
107 | | -To invoice milestones, create a sales order with the milestone product(s). To do that, go to |
108 | | -:menuselection:`Sales app --> New`. Doing so reveals a blank quotation form. |
109 | | - |
110 | | -From this quotation form, add a :guilabel:`Customer`. Then, click :guilabel:`Add a product` in the |
111 | | -:guilabel:`Order Lines` tab. Next, add the milestone product(s) to the :guilabel:`Order Lines` tab. |
112 | | - |
113 | | -Once the corresponding milestone product(s) have been added, click :guilabel:`Confirm` to confirm |
114 | | -the order, which turns the quotation into a sales order. |
115 | | - |
116 | | -When the order is confirmed, new smart buttons appear at the top of the sales order based on what |
117 | | -was selected in the :guilabel:`Create on Order` field on the product form. |
| 14 | +In Odoo, milestone invoicing is configured at the product level in the **Sales** app, with milestone |
| 15 | +progress and completion managed in the **Projects** app. When a milestone is marked as reached, the |
| 16 | +delivered quantity on the sales order (SO) is updated and can be invoiced. |
118 | 17 |
|
119 | | -From the sales order, click the :guilabel:`Milestones` smart button. Doing so reveals a blank |
120 | | -:guilabel:`Milestones` page. Click :guilabel:`New` to add milestones. |
| 18 | +.. important:: |
| 19 | + This document covers the **Sales** app configuration and invoicing flow for invocing based on |
| 20 | + project milestones. For more information on creating, managing, and completing milestones, and |
| 21 | + how to link them to tasks, see :doc:`Project milestones |
| 22 | + <../../../services/project/project_management/project_milestones>`. |
121 | 23 |
|
122 | | -.. image:: milestone/adding-milestones.png |
123 | | - :align: center |
124 | | - :alt: Adding milestones to a sales order with milestone products. |
125 | | - |
126 | | -Enter a :guilabel:`Name` for the milestone. Next, apply it to the corresponding :guilabel:`Sales |
127 | | -Order Item`. Lastly, assign a :guilabel:`Deadline` to the milestone, if desired. |
128 | | - |
129 | | -Repeat that process for all milestone sales order items. |
130 | | - |
131 | | -Then, return to the sales order, via the breadcrumbs. From the sales order, click the |
132 | | -:guilabel:`Tasks` smart button. Doing so reveals a :guilabel:`Tasks` page with a task for each sales |
133 | | -order item with that option designated in the :guilabel:`Create on Order` field. |
134 | | - |
135 | | -.. image:: milestone/tasks-page.png |
136 | | - :align: center |
137 | | - :alt: Sample tasks page accessed via the smart button from a sales order with milestone products. |
138 | | - |
139 | | -To manually assign a configured milestone to a task, click the desired task, which reveals the task |
140 | | -form. On the task form, select the appropriate milestone to which this task should be connected, in |
141 | | -the :guilabel:`Milestone` field. |
142 | | - |
143 | | -.. image:: milestone/milestone-field-on-task-form.png |
144 | | - :align: center |
145 | | - :alt: The milestone field on the task form when dealing with milestone products in Odoo Sales. |
146 | | - |
147 | | -Repeat this process for all milestone tasks. |
148 | | - |
149 | | -With those tasks properly configured, employees log in their progress as they work on the task, in |
150 | | -addition to adding any notes related to the task. |
151 | | - |
152 | | -Then, when that task is complete, that means that milestone has been reached. At that point, it is |
153 | | -time to invoice that milestone. |
154 | | - |
155 | | -To invoice a milestone, first return to the sales order — either via the breadcrumb links, or by |
156 | | -navigating to :menuselection:`Sales app --> Orders --> Orders` and picking the appropriate sales |
157 | | -order. |
158 | | - |
159 | | -Back on the sales order form, click the :guilabel:`Milestones` smart button, and check the box in |
160 | | -the :guilabel:`Reached` column for that particular task. |
161 | | - |
162 | | -.. image:: milestone/reached-milestone.png |
163 | | - :align: center |
164 | | - :alt: What it looks like to mark a milestone as reached via the milestone smart button. |
165 | | - |
166 | | -Next, return to the sales order — either by clicking :guilabel:`View Sales Order` on the |
167 | | -:guilabel:`Milestones` page, or via the breadcrumb links. |
168 | | - |
169 | | -Back on the sales order, the line item for the milestone that's been reached has its |
170 | | -:guilabel:`Delivered` column filled. That's because the milestone has been reached, and therefore |
171 | | -delivered. |
172 | | - |
173 | | -.. image:: milestone/delivered-milestone-product-sales-order.png |
174 | | - :align: center |
175 | | - :alt: A milestone product that's been reached marked as delivered on the sales order in Odoo. |
176 | | - |
177 | | -Click :guilabel:`Create Invoice` in the upper-left corner. Doing so reveals a :guilabel:`Create |
178 | | -invoices` pop-up window. |
179 | | - |
180 | | -.. image:: milestone/create-invoices-pop-up.png |
181 | | - :align: center |
182 | | - :alt: The create invoices pop-up window that appears when create invoice button is clicked. |
183 | | - |
184 | | -On the :guilabel:`Create invoices` pop-up window, leave the :guilabel:`Create Invoice` option on the |
185 | | -default :guilabel:`Regular Invoice` selection, and click the :guilabel:`Create Draft Invoice` |
186 | | -button. |
187 | | - |
188 | | -Upon clicking :guilabel:`Create Draft Invoice`, Odoo reveals the :guilabel:`Customer Invoice Draft`, |
189 | | -*only* showing that reached milestone in the :guilabel:`Invoice Lines` tab. |
190 | | - |
191 | | -.. image:: milestone/invoice-draft-milestone.png |
192 | | - :align: center |
193 | | - :alt: A customer invoice draft showing only the milestone product that's been reached. |
194 | | - |
195 | | -From this invoice page, click the :guilabel:`Confirm` button to confirm the invoice. Then, when the |
196 | | -customer has paid for this milestone, click :guilabel:`Register Payment`. |
197 | | - |
198 | | -When :guilabel:`Register Payment` is clicked, a :guilabel:`Register Payment` pop-up window appears. |
199 | | - |
200 | | -.. image:: milestone/register-payment-pop-up.png |
201 | | - :align: center |
202 | | - :alt: The Register Payment pop-up window that appears when Register Payment is clicked. |
203 | | - |
204 | | -On this pop-up window, confirm the accuracy of the auto-populated fields, then click |
205 | | -:guilabel:`Create Payment`. |
206 | | - |
207 | | -When clicked, the pop-up window disappears, and Odoo returns to the invoice for that milestone, |
208 | | -which now has a green :guilabel:`In Payment` banner in the upper-right corner. This banner signifies |
209 | | -the invoice has been paid. |
210 | | - |
211 | | -.. image:: milestone/in-payment-invoice.png |
212 | | - :align: center |
213 | | - :alt: An invoice with a milestone product that has been paid with an In Payment banner. |
214 | | - |
215 | | -Then, return to the sales order, via the breadcrumb links. Back on the sales order, in the |
216 | | -:guilabel:`Order Lines` tab, the reached milestone that's been invoiced and paid for, now has its |
217 | | -:guilabel:`Invoiced` column filled. |
218 | | - |
219 | | -.. image:: milestone/invoiced-column-filled-milestone.png |
220 | | - :align: center |
221 | | - :alt: The Invoiced column of a milestone product that's been paid for is filled. |
222 | | - |
223 | | -There is also a new :guilabel:`Invoices` smart button at the top of the sales order. Clicking that |
224 | | -reveals all the invoices that are connected to this sales order. |
| 24 | +Create milestone products |
| 25 | +========================= |
225 | 26 |
|
226 | | -.. image:: milestone/invoices-smart-button.png |
227 | | - :align: center |
228 | | - :alt: The invoices smart button that appears at the top of a sales order with milestones. |
| 27 | +Milestones are tied to individual sales order items. Each milestone corresponds to one product line |
| 28 | +that uses the :guilabel:`Based on Milestones` invoicing policy. |
229 | 29 |
|
230 | | -Simply repeat the above process for each milestone as it is worked on, and subsequently, completed. |
231 | 30 |
|
232 | | -Continue that process until the entire project has been completed, each milestone has been invoiced, |
233 | | -and the entire order has been paid for in full. |
234 | 31 |
|
235 | 32 | .. seealso:: |
236 | 33 | - :doc:`time_materials` |
|
0 commit comments