Odoo is the world's easiest all-in-one management software. It includes hundreds of business apps:
CRM | e-Commerce | Accounting | Inventory | PoS | Project management | MRP | etc.
how to set up OpenERP for a service-oriented business that bills by service deliverables rather than man-hours?
Our company provides post-production image-procesing services for movies. We're evaluating OpenERP as a candidate for the company's ERP platform. So far, the HR and Accounting sides of things seems to be easily applicable. The service management side, however, it presenting me with a fundamental headache....
Our Pricing Unit of Measure is Frames (i.e. frames of moving pictures). In other words, Services pricing are in units of USD/Frame.
A unique Project is a client-movie pair, i.e. we often have multiple clients per movie
A Project can have one or more Shots, and a Shot consists of many Frames of moving pictures
Services are requested for Shots and may cover some or all of the Frames in that Shot, e.g. a shot has 100 frames but Service A is requested for frames 1-90 (90 frames), Service B is requested for frames 5-30 (26 frames)
A line item in a Quotation / Order / Invoice will be a single Service (with specified number of Frames) for a certain Shot belonging to a certain Project.
I figured we could map our Client to openERP's Customer, our Project to operERP's Project, our Service to openERP's Product.
What I'm still lost on are
(1) Where to map Shot to? I guess I could create it as a Project with Parent that is the corresponding client-movie Project? (2) How to map Project-Shot-Service concept to openERP Quotation / Order / Invoice line item?
Any pointers/suggestions/hints would be highly appreciated. Thanks.
Thanks again, Kevin.
After banging my heads for a few more days, I stumbled upon a "solution" that we're now running a one-week trial with using real data to get feed back from our people.
Here's how it works:
- every year has a Root Project associated with it, e.g. 2013; let's call this the 'yearProject'.
- a yearProject config has both Tasks and Timesheets disabled.
- each project would be created as a sub-project of a corresponding yearProject when it starts; let's call this the 'clientProject'.
- a clientProject config has Timesheets disabled, but Tasks is enabled with only one stage new(status:New)
- each shot would be created as a sub-project of the associated clientProject; let's call this the 'shotProject'.
- a shotProject config has both Timesheets and Tasks enabled with task lifecycle-tracking stages, e.g. new(status:New), ready(status:Pending), working(status:In Progress), uploading(status:In Progress), delivered(status:Pending), approved(status:Done), omit(status:Cancelled), etc
- when a new Quotation is created, it's always linked to a pre-existing clientProject project/contract, and the description of each Order Line always starts with a Shot Name followed by a description of the service being requested (descriptions format varies depending on the service, i.e. Product, chosen for that order line)
- when a Quotation is confirmed (and turned into Sales Order), a 'New' task is automatically created under the linked clientProject with the Sales Order number and Product name as the task's Title field, and the Order Line's description field as the task's description field. Each task will also bear a link back to its originating Order Line as well.
- each Project Manager regularly checks their clientProject(s) for any 'New' task(s). Each 'New' task will then be edited to change it's associated project from the clientProject to a respective shotProject that has the same name as the Shot Name given in the description field. Hence, that task will disappear from the original clientProject and show up as a 'New' task under the target shotProject, but still bear the link back to the original Order Line.
- from then on the normal task lifecycle management should apply, i.e. each task moving between Stages until it lands on a Stage that corresponds to Status of either Done or Cancelled.
NEXT STAGE: each Account Manager regularly gets a list of Delivered and Approved tasks from Project Manager(s) handling the clientProject from their client(s) so that they can issue Invoice(s) for the corresponding Order Lines.
I'm including the configurations we're using for the trial below in case someone might find it useful. The current 'test' server has has the Sales, Project, and Human Resources apps installed. I'm listing only the changes I've explicitly made below.
- ENABLE Invoicing Process/Generate invoices based on the sales order lines
- ENABLE Customer Features/Use pricelists to adapt your price per customers
- ENABLE Product Features/Allow using different units of measures
- ENABLE Product Features/Allow setting a discount on the sales order lines
- ENABLE Contract Features/Use contracts management
- ENABLE Contract Features/One employee can have different roles per contract
- CHECK Contract Features/One employee can have different roles per contract
- ENABLE Features/Allow multi currencies ; create Gain Exchange Rate Account, create Loss Exchange Rate Account
- ENABLE Features/Analytic accounting
- ENABLE Features/Budget management
- ENABLE Features/Assets management
- ENABLE eInvoicing & Payments/Supplier/Manage payment orders
- ENABLE eInvoicing & Payments/Supplier/Pay your suppliers by check
- ENABLE eInvoicing & Payments/Check the total of supplier invoices
- ENABLE Analytic Accounting/Sale/Analytic accounting for sales
- ENABLE Talent Management/Manage the recruitment process
- ENABLE Talent Management/Organize employees periodic evaluation
- ENABLE Additional Features/Manage holidays, leaves and allocation requests
- ENABLE Additional Features/Manage employees expenses
- ENABLE Time Tracking/Track attendances for all employees
- ENABLE Contracts/Record contracts per employee
- ENABLE Contracts/Manage payroll
- ENABLE Contracts/Link your payroll to accounting system
- DISABLE Talent Management/Allow the automatic indexation of resumes
- set Alias domain: <whatever_your_domain_is>
- DISABLE Portal Access/Activate the customer portal
- ENABLE Portal Access/Enable password reset from Login page
- ENABLE Import/Export/Allow users to import data from CSV files
- DELETE Administrator from Employee Directory
- set Configuration/Stages/Task Stages ; ENABLE Default for New Projects for all
- CREATE Project '2013' ; DISABLE Tasks : DISABLE Timesheets, SET Other Info/Start Date : 2013-01-01, SET Other Info/End Date : 2013-12-31
- DELETE Products : Service
- CREATE Pricelist Category : Moving Pictures
- CREATE Unit of Measures : Moving Pictures/Frame(s) : Rounding Precision: 1.0
- CREATE Unit of Measures : Moving Pictures/Shot(s) : Rounding Precision: 1.0
- CREATE Product Category : All Services ; Parent Category : [none], Category Type : View, Income Account : 410000 Income, Expense Account : 510000 Cost of goods sold
- CREATE Product Category : Saleable ; Parent Category : [none], Category Type : Normal, Income Account : 410000 Income, Expense Account : 510000 Cost of goods sold CREATE Product Category : Internal ; Parent Category : [none], Category Type : Normal, Income Account : 410000 Income, Expense Account : 510000 Cost of goods sold
You could use project phases to map shot to. At the moment phase is not available in sale order, but would not be hard to add to sale order line based on the project(film) entered on the header (or line if you have the need).
Then it's quite standard - you sell to a customer, link to a project (film) at SO level, then add lines for your products (service with pricing rules) and stage (for shot).
Treat products as services and you can get tasks automatically created to manage your work activities all within openerp
About This Community
This platform is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.Register
Odoo Training Center
Access to our E-learning platform and experience all Odoo Apps through learning videos, exercises and Quizz.Test it now
|Asked: 8/26/13, 10:15 AM|
|Seen: 5427 times|
|Last updated: 3/16/15, 8:10 AM|