[v7] Discussion: Project-wise billing removed with Timesheets

Exactly what I was thinking. If “Time Sheet Detail” was a doc that the user could create alone, (as time logs were) it keeps the dangerous tools out of employees hands. While It negates any need for the timesheet functionality, besides being a per-employee wrapper when it comes to billing on an invoice, it’s a much safer situation.

While this is a great control, and absolutely necessary, I feel like it’s an old solution to a new problem, because as stated:

And I apologize if I come off as bashing the new format altogether, it’s inevitable that mistakes will happen, and it’s become harder to track them.

To continue the thought from above, clicking to applicable time logs from Project made it an instant effort to track entries. The report is great to be able to iron out mistakes, but this again falls back on correcting any mistakes once they’re present. (and the report doesn’t allow the ability to send to the billing process directly as list view filters did)

Also going to miss this quite a bit. Notes on each entry was a suggestion/pull-request I had, but it was rejected because the note field on timesheet was seen as sufficient.

I understand if there are no plans on re-instating TL/TLB, and will look for new workarounds in hopes of continuing to using future versions, but i really hope the concerns from the beta get revisited before release.

Thanks

1 Like

Hello @superlack @spa @Idat-Consulting @agerken @Pawan
New timesheets and time logs are intended for similar functionality. Below are some of the concerns we have addressed

A) employee can submit wrong timesheet which lead to incorrect billing “we have restricted employee to submit timesheet and manager can check, correct and submit the timesheet”

B) Fields that are sensitive and should not be seen by employee can be restricted with field permission manager

C) Manager can also make bulk data corrections using data import tool

D) Timesheet can also be created without employee ID (validation is removed) and can be billed.

We are also looking to make timesheet searchable by project for ease of correction by manager and some other changes.

Thank you all for the valued feedback on timesheet . Please keep sending more feedback on this and other new features. We will look to address these soon.

Thanks, Rohit

2 Likes

These are all “band-aids,” they fix the symptom of the issue, not the issue. The correct solution is to make the system easy to use so that mistakes don’t happen, instead of making supervisors spend extra time correcting issues created by an overly complicated time keeping system.

Honestly, how hard would it be to just make an extremely simple form for “Time Sheet Entry” or “Labor Transaction” or… “Time Log” that could be created right from the “Make” button in a Production Order, Project or Task?

2 Likes

Hi @rohit_w @Pawan

any thoughts on the suggestion of @Idat-Consulting and @superlack?
maybe we find a way to not take away current workflow as of version 6 and
enrich with the pros of the new system

rgds

Sebastian

The only easy solution I can imagine for the team, would be allowing Timesheet Detail to be standalone, but batched into a timesheet (via the listview, and helpful filters) Individuality would be based on employee, because of the obvious payroll link it requires. I don’t think employee specifics are a part of the child table currently, but that’s speculation after glancing.

That at least would, providing of having the opportunity to take notes per task, ease our life again as we are back to spreadsheets now to do our project management and time keeping.
The V7 changes rendered the ERPNext timekeeping useless for us as we tracked important PM information with it as well
Even our employees hate it! because now they are back on the phone in case of an issue.
and in general it is a change of the workflow we hammered into their heads.
I think this is an issue as change alway causes confusion and this particular one in our case also regression
Of course change can also be efficient and we see the good intention but in our case it went the other way

@superlack
Maybe we should dev a seperate timekeeping app that connects more with PM by forking the old style timekeeping

I agree that the old system was foolproof, and an incorrect entry can be multiplied to the weekly scale before it gets caught.

One thing that was mentioned is that administrators can simply use the “Daily Timesheet Summary” report to view all entries and correct them as needed… Not only is it a band-aid as mentioned, but it only works for submitted timesheets. So that’s forcing a timesheet per day, which goes against the merit of the weekly sheet system to begin with.

Following that sentiment, if using a single timesheet per employee, per project, per day is the solution, the obstacle is if they are printed from list view, each timesheet shows up on different pages.

I’ve been trying to play around with various customizations to enable the same workflow again, so far the options are:

Using a timesheet as a Time Log would have been used:

  • No way to batch and reduce pagination upon printing

or

Using a timesheet for a specific employee and the project they’re working on.

  • Timesheets will “disappear” when billed, employees need to create new one upon new project billing cycle

  • No auditing can take place on an in-progress timesheet (besides picking through each one; no reports available for timesheets that haven’t been submitted)

  • Requires employees to make sure all of the information/project info is consistent

  • No note taking per task

Would rather not modify too much out-of-the-box at this point to make it work. New patches in versioning are dangerous. Seems that the link between project and timelogs got lost when clicking hours from project doc, and all associated notes in the time log batches have just been discarded with the conversion patch. Annoyed, but I can’t complain

Would love to know how everybody’s been using it after a bit of time from the v7 release though

Hi @superlack, @rohit_w, @Idat-Consulting, @Pawan, @agerken, and all

dev-team: is there any internal discussion on this issue?
Are there plans of any changes?

if not what is the best way for us to adjust to our needs?

  • App that forks old system
  • fixtures/customisations to give us missing fields and reports for filtering

thanks

Hi @spa,

We have did some changes to improve UI, also we got contribution from community member to show timesheet on calendar view. You can do another round of testing on beta version.

Thanks, Rohit

Very nice to be able to have calendar function back

In regards to customization for reports and filtering, I found that as soon as I added a custom field (project) to the main timesheets doctype, it broke the custom report and calendar functionality.

Calendar

 Traceback (most recent call last):
  File "/home/frappe/frappe-bench/apps/frappe/frappe/app.py", line 55, in application
    response = frappe.handler.handle()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 19, in handle
    execute_cmd(cmd)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 36, in execute_cmd
    ret = frappe.call(method, **frappe.form_dict)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 879, in call
    return fn(*args, **newargs)
  File "/home/frappe/frappe-bench/apps/erpnext/erpnext/projects/doctype/timesheet/timesheet.py", line 312, in get_events
    }, as_dict=True, update={"allDay": 0})
  File "/home/frappe/frappe-bench/apps/frappe/frappe/database.py", line 137, in sql
    self._cursor.execute(query, values)
  File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/MySQLdb/cursors.py", line 205, in execute
    self.errorhandler(self, exc, value)
  File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
OperationalError: (1052, "Column 'project' in field list is ambiguous")

Report Builder :

Traceback (most recent call last):
  File "/home/frappe/frappe-bench/apps/frappe/frappe/app.py", line 55, in application
    response = frappe.handler.handle()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 19, in handle
    execute_cmd(cmd)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 36, in execute_cmd
    ret = frappe.call(method, **frappe.form_dict)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 879, in call
    return fn(*args, **newargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/desk/reportview.py", line 16, in get
    data = compress(execute(**args))
  File "/home/frappe/frappe-bench/apps/frappe/frappe/desk/reportview.py", line 21, in execute
    return DatabaseQuery(doctype).execute(*args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/db_query.py", line 79, in execute
    result = self.build_and_run()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/db_query.py", line 103, in build_and_run
    return frappe.db.sql(query, as_dict=not self.as_list, debug=self.debug, update=self.update)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/database.py", line 148, in sql
    self._cursor.execute(query)
  File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/MySQLdb/cursors.py", line 205, in execute
    self.errorhandler(self, exc, value)
  File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
OperationalError: (1054, "Unknown column 'tabTimesheet Detail.name as 'Timesheet Detail:name'' in 'field list'")

On a different note, how is the workflow for timesheets supposed to work if employees are entering daily, projects are being billed day of completion, and payroll hours are processed bi-weekly. If an employee just “saves” the timesheet as a draft, it allows them to add to it day by day, to make use of the whole table idea, but doesn’t allow for payroll processing until the project gets billed.

If an employee’s timesheet gets submitted by the manager at payroll processing, hours for projects that have been ended and been billed in between that time, could be wrong, or changed.

If an employee’s timesheet gets submitted everyday, payroll processing and project billing can happen any day, but, its basically just using it as a timelog again, but without the ability to batch. We are currently trying this approach, but are really missing the ability to print TLB with notes corresponding to a particular projects invoice.

If Timesheets could do that from list menu without paginatation, or if it was possible to bundle timesheets into one, I’d be happy with that

Did you try using ‘Customize Forms’, it is usually not recommended to make changes directly in the DocType.

About timesheet and payroll, if you intend to link both then probably what you are saying is correct. Are timesheet and payroll linked in your company? If they are linked, then you could possibly customize to pull the data for payroll based on some other criteria than what is delivered as part of V7.

Employees entering timesheet in draft mode daily and manager submitting weekly is the suggested way to operate in the new version.

Thank you for your feedback, it is very helpful in improving v7

Thanks for responding.

I do all modifications through the provided “Customize…” options, so as to leave trouble away from versioning/upgrading. The customizations previously shown are both done through that method. Since V7 I feel as if they are going to get me in trouble. The timelog>timesheet patch destroyed a lot of valuable information we had been keeping, but I think we’re just on the mend :slight_smile:

It looks like Calendar view calls for “project” field, but not limited to just the “Timesheet Detail” doctype (if I’m understanding the ambiguous error correctly). I have a “project” field in the timesheet parent doc, so I think that’s the error, but since there are records existing now, simply renaming the field doesn’t help. I would love to submit a PR for the call on project to be specific on the child table if I knew more

The error I have on report view could be caused by a record that was submitted when I was trying to script some information to be used as a title for legibility in list view. I accidentally used doc.name, which seems to be an internal function though it’s not listed as a field. Switched that to doc.title, but it’s still throwing the error in report build view

Timesheet and payroll are indeed linked in my company. It is usable by doing the daily operations fixed per whole timesheet, but that makes the improvement of timesheet tables redundant. Introducing another workflow for them such as saved, approved by payroll manager, then submitted would work, but is also creating more work for the administration side, and the two would have to work around one another, if not being able to double accounted (billing, payroll).

Therein lies the issue I’m seeing from a company that is entirely project based. I don’t think it’s realistic to be able to leave a timesheet in the employees hands for a week, for the amount of untraceable, or forgettable errors that could occur out of human nature in a weeks span. The timeline difference between payroll and project billing is always going to be inconsistent in my field as well, and the current workflow does not allow the two modules to see eye to eye.

I feel like I’m almost pleading for a reevalution on the system, but would be very glad to provide a case report if that would help anything.

  • Payroll can run off existing timesheets which are submitted & would be available for payroll processing once they are submitted by employees

  • Global setting to ‘Enable Timesheet adjustments’ feature.

  • The same submitted timesheets would serve as inputs for invoicing to the new proposed ‘Timesheet Billing Adjustments’ doc type

    * If project is selected, grid would show related project timesheets
    * 'Billable', 'Adjustment' columns to be editable
    * Once submitted 'Make Invoice' button to appear & 'Total Hrs' to be available for billing
    

This is based on discussions and feedback we have received so far @umair

@superlack,@spa ,@agerken kindly provide any feedback you have on the above proposed page

So this would serve as a broader view to be able to make adjustments? I really do miss the old workflow, where the only administrative tasks came in the form of approving or rejecting a time log, and if that’s worked in by the “enable timesheets feature” that would be so great. Kind of like each person continues to toss their pebbles into a counter, and they get labelled and sorted out into buckets, as opposed to each person being responsible for the sorting and counting of each pebble into individual buckets.

This granular idea makes using the info and sorting it a lot more flexible, considering the power and ease of the filters provided

This could be really handy tool in the new direction of timesheets, and it would compliment it very well. It’s more forgiving for the invoice creator to not have to get an employee to do minor corrections, but it looks like it would solve only the issue of changing numbers. As I see it, the problems can get corrected, but if an employee uses incorrect data in the project field of a timesheet, then it would still need some verification on each sheet to correct it. (Also, wouldn’t have the ability to do manual corrections for payroll. )

It’s hard to think about what criteria for “containment” I would use for timesheets master, as it’s currently the individual relationship with employee. I was thinking that “Project” the would help, so things don’t get double billed, but then with the submission being a pre-requisite for billing, and paying employees, at what point do you stop using the timesheet as a container and just use it as a daily stop (ala Time Logs), but without the option to batch.

I apologize if I come off as negative about the development. I’m very interested in this conversation, looking forward to what comes from it, and appreciate the involvement that the team gives. Thanks guys!

1 Like

@superlack,For relabelling the tasks, you could make the tasks editable on the new doc type if needed or hope for some discipline from employees so that they choose the correct tasks while entering time.

We have been talking about allowing adjustment hours @rohit_w on the payroll side

The criteria of containment is different for different business and we are trying to come up with something that works for all, it could be daily for some, weekly for some, project for some & so on.

After a few weeks of testing, reports seem to be the way to go for offering a breakdown of labour hours and notes from daily submitted timesheets to a client.

The billing timesheet workflow seems like it has removed a very important stepping stone though. Considering the idea of different billing/pay times, the only solution is to enter timesheets daily. What that leaves is a list of timesheets per project cycle (much like time logs), but leaves us without the ability to filter and either apply directly to an invoice, or batch them as one document, marking all contained timesheets as “Billed” and having a package of labor times, in case the information is ever re-requested (reports unfortunately don’t have the milestone ability, and would require filtering project, billing from-to dates)

Is a timesheet container completely out of the question? Not being able to batch from time entry list is putting us in a bad spot.

hi all,

fyi
sorry I hadnt much time to get my head around it.
hope to find some next week

A few days after using the system, and attempting to push out a detailed invoice with it using Timesheets as a daily entry fixture:

issue: Timesheets are not filterable while creating an invoice, but they are in the timesheet list. Repetetive clicking and missing details in the Sales Invoice table make this method difficult
Solution: Timesheet list view should copy the “Make Time Log Batch” function, and have a selection of Timesheets in list view be able to be attributed directly to a new sales invoice via “Make Sales Invoice” menu function

Issue: Sales Invoice does not fetch Note/Employee/Time fields
Solution: Fetching fields from timesheets when attributed to an invoice.

Issue: Sales Invoice Trends report does not show timesheets billed, since it’s not an item. Is it untraceable in reports?
Solution: Is it possible to have a global setting, or predefined as timesheets being considered one particular item? We were previously billing labour as an item, which worked with the previous line item entry (related time log batch on a line item)

@Pawan @rohit_w After exploring the workflow, and finding out what was removed in v7, does this seem like a realistic approach to reinstating the lost features? Currently, we (my company) have a dirty system because timesheets are difficult to enter to invoice. Times are showing unbilled, labor hours are copied, and the calculators and notepads are out again.

I think it’s reasonable, and fits the tune of the customizable environment to be able to have all details from the timesheets fetched by sales invoice, and have them default to unchecked in the print format. Ideally, it would be possible to print the standard invoice, but on choosing a different print format, have the breakdown of times for it. Much like the timelog batch, it would be very easy to pull up details pertaining to an invoice and re-print if ever needed; reports won’t provide the functionality.

Regarding the issue with “Sales Invoice Trends” and presumably other reports not showing what Timesheets have billed: I don’t know enough about the internal mechanics of how data gets passed from doc to doc, but I would assume billing amount would have to be handed directly to a line item like the Time Log Batch did.

If you can take a glance over my suggestions that would be very, very appreciated. I think this would be the simplest way to make the system much more usable with what’s already there. (and what I could contribute to help)

Thanks!

@superlack thanks for your feedback. Below are my thoughts:

  • I think the Sales invoice format is the same as it was in the previous version.

  • I agree that we don’t have a batch functionality to correct multiple timesheet in one go but I think list reports can have fields editable using report builder. We have added a ‘Billable Hrs’ field so that employees can just submit the timesheet and ‘Field level permissions’ can control access to the ‘Billable Hrs’ field. Managers can adjust this field via the list report.

We would have a relook at your feedback and let you know as we make further improvements.

When TLB was pushed to Sales Invoice (via the TLB “Make Sales Invoice” button), it showed as a line item. I don’t remember if it was mandatory to select an “item name” in that line or not, but it did allow for billed labour hours to be tracked under a Labour item. I guess that does mean that labour hours sold were untrackable under the Sales Invoice Trends report if they werent entered with an item… My bad. It seems weird

My last reply was a bit of a different approach to a workflow similar to the batching, but without a new doctype. It would involve being able to filter, select, and send a list of timesheets to invoice from list view. I’ve been testing the method of using reports, and the problems I see are:

  • There’s no way to save the information as it was processed at the time of billing. There is no way to re-print a report attributed to an invoice days, months, or years later without a lot of digging around in old documents. I don’t think that’s something the community should be content with, given the power of a database. (Even if there would be an alteration or addition of timesheet within the time between the invoice and report, it would be inaccurate instantaneously, but that scenario isn’t very likely)

  • It isn’t possible to mass select from list view, and push to billing. The child table in Sales Invoice is handy, but not for over 10 timesheets… Timelog>Timelog batch accomplished this quite well. Is it suggestible to have the same functionality, but skipping the batch process?

Thanks for your time on this thread.