Commit Graph

1444 Commits

Author SHA1 Message Date
Marica
46d02ec4b2
Merge branch 'develop' into bom-update-log-cleanup-perf 2022-06-22 11:50:06 +05:30
rohitwaghchaure
186224a12a
Merge branch 'develop' into fixed-transferred-materials-are-not-consumed 2022-06-21 22:45:05 +05:30
s-aga-r
dc2830da4d fix: set default_bom for item 2022-06-21 15:13:01 +05:30
marination
4cf2225a29 chore: Implement Log clearing interface in BOM Update Log
- Implement Log clearing interface in BOM Update Log
- Add additional info in sidebar: Log clearing only happens for 'Update Cost' type logs
- 'Replace BOM' logs have important info and is used in BOM timeline, so we'll let users decide if they wanna keep or discard it
2022-06-21 14:10:59 +05:30
Sagar Sharma
912d26361d
Merge branch 'develop' into fixed-transferred-materials-are-not-consumed 2022-06-21 13:23:37 +05:30
Marica
5ae8f5d4b8
Merge branch 'develop' into bom-update-log-cleanup-perf 2022-06-21 11:01:03 +05:30
marination
0320b59ea6 chore: Clear Progress section for completed logs & on_submit UX
- Delete `BOM Update Batch` table on 'Completed' log, to save space
- Hide Progress section on 'Completed' log
- Enqueue `on_submit` for 'Update Cost' job, getting leaf boms could take time for huge DBs. Users have to wait for screen to unfreeze.
- Add error handling to `process_boms_cost_level_wise` (Called via cron job and on submit, both in background)
2022-06-20 16:25:34 +05:30
Conor
74a782d81d
refactor: DB independent quoting and truthy/falsy values (#31358)
* refactor: DB independent quoting and truthy/falsy values

* style: reformat to black spec

* fix: ifnull -> coalesce

* fix: coalesce -> Coalesce

* fix: revert pypika comparison

* refactor: convert queries to QB

* fix: incorrect value types for query

`=` query makes no sense with list of values

* fix: remove warehouse docstatus condition

* fix: keep using base rate as rate

Co-authored-by: Ankush Menat <ankush@frappe.io>
2022-06-17 17:01:27 +05:30
rohitwaghchaure
2ec133df6d
Merge branch 'develop' into fixed-transferred-materials-are-not-consumed 2022-06-17 15:02:07 +05:30
Ankush Menat
94ad66e55b
chore: revert naming to default (#31364) 2022-06-15 13:35:42 +05:30
rohitwaghchaure
a4c2c3e02f
Merge branch 'develop' into fixed-transferred-materials-are-not-consumed 2022-06-15 09:41:01 +05:30
Ankush Menat
39ec0aca95
fix(UX): use doc.status for Job Card status (#31320)
fix(UX): use doc.status for JC status

- Use doc.status directly for indicator - single source of truth
- Update status to cancelled when doc is cancelled
2022-06-10 18:43:46 +05:30
Ankush Menat
16c8b7404d
Merge pull request #31072 from marination/perf-bom-update-tool
perf: BOM Update Tool
2022-06-09 17:04:00 +05:30
marination
3fa0a46f39 chore: Less hacky tests, versioning (replace bom) and clearing log data (update cost)
- Remove `auto_commit_on_many_writes` in `update_cost_in_level()` as commits happen every N BOMs
- Auto commit every 50 BOMs
- test: Remove hacky `frappe.flags.in_test` returns
- test: Enqueue `now` if in tests (for update cost and replace bom)
- Replace BOM: Copy bom object to `_doc_before_save` so that version.py finds a difference between the two
- Replace BOM: Add reference to version
- Update Cost: Unset `processed_boms` if Log is completed (useless after completion)
- test: `update_cost_in_all_boms_in_test` works close to actual prod implementation (only call Cron job manually)
- Test: use `enqueue_replace_bom`  so that test works closest to production behaviour

Co-authored-by: Ankush Menat <ankushmenat@gmail.com>
2022-06-09 16:27:51 +05:30
Ankush Menat
d9a5213952
fix(ux): hide new version btn on unsaved BOM (#31297) 2022-06-09 15:33:18 +05:30
marination
7e41d84a11 chore: get_valuation_rate sider fixes
- Use qb instead of db.sql
- Don't use `args` as argument for function
- Cleaner variable names
2022-06-08 14:01:04 +05:30
marination
9f2793ccf1 test: Fix test_update_bom_cost_in_all_boms
- Use base_rate for assertions as rate is subject to change due to conversion factor (USD)
2022-06-08 11:18:53 +05:30
Marica
ff0a6b7cbd
Merge branch 'develop' into perf-bom-update-tool 2022-06-07 14:49:59 +05:30
marination
6bde1bb5d2 test: Util to update cost in all BOMs
- Utility to update cost in all BOMs without cron jobs or background jobs (run immediately)
- Re-use util wherever all bom costs are to be updated
- Skip explicit commits if in test
- Specify company in test records (dirty data sometimes, company wh mismatch)
- Skip background jobs queueing if in test
2022-06-07 14:44:00 +05:30
Rohit Waghchaure
d94ff3ede8 test: test cases to cover batch, serialized raw materials 2022-06-06 17:57:52 +05:30
marination
15101190a6 chore: get_valuation_rate in bom.py must always return float & goto Item master if no bins 2022-06-06 17:54:13 +05:30
marination
934db57fdd chore: Miscellanous fixes/enhancements
- `get_valuation_rate`: if no bins are found return 0, SLEs do not exist either
- `get_valuation_rate`: Compute average valuation rate via query
- `get_rm_rate_map`: set order_by as None to avoid creating sort index (modified) each time query runs (seen in process list)
- BOM Update Batch: add status field and hide `boms_updated` so that  users can see progress without loading all updated boms (too much data)
- BOM Update Batch: set batch row status to completed after job runs
- BOM Update Log: remove `parent_boms` field (just pass parent boms to processing function) & remove Paused state (not used)
- Move job to long queue to avoid choking default queue
- `update_cost_in_boms`: use `get_doc` as each BOM is accessed only once. Use `for_update` to lock BOM row
- Commit after every 100 BOMs
2022-06-06 17:01:51 +05:30
Ankush Menat
ee5bc58e9b
fix(job card): only hold during draft state (#31243) 2022-06-06 16:27:25 +05:30
marination
62857e3e08 feat: Track progress in Log Batch/Job wise
- This was done due to stale reads while the background jobs tried updating status of the log
- Added a table where all bom jobs within log will be tracked with what level they are processing
- Cron job will check if table jobs are all processed every 5 mins
- If yes, it will prepare parents and call `process_boms_cost_level_wise` to start next level
- If pending jobs, do nothing
- Current BOM Level is being tracked that helps adding rows to the table
- Individual bom cost jobs (that are queued) will process and update boms > will update BOM Update Batch table row with list of updated BOMs
2022-06-02 13:35:30 +05:30
marination
a62bc9b6c9 chore: Limit Update Cost jobs & db_update only if changed values
- If `Update Cost` job is ongoing, then block creation of new ones since all BOMs are updated
- `db_update` in `calculate_rm_cost` only if changed values to reduce redundant row updates
- Misc: Use variable for batch size
2022-05-31 16:00:29 +05:30
Ankush Menat
954dac88a8 fix: allow non-explosive recrusive BOMs
Recursion should be allowed as long as child item is not "exploded"
further by a BOM.
2022-05-30 10:40:13 +05:30
Ankush Menat
d224bf1d34 fix: only erase BOM when do_not_explode is set 2022-05-30 10:40:13 +05:30
Ankush Menat
b170cec2fe fix(ux): "New Version" button BOM
"duplicate" technically creates a new version but that's not intuitive
at all.
2022-05-30 10:40:12 +05:30
marination
978ba5238f fix: Safe cast row.rate (in case of faulty exploded items, edge case but oh well) 2022-05-27 21:59:59 +05:30
marination
2de2491e17 perf: get_next_higher_level_boms
- Separate getting dependants and checking if they are valid (loop within loop led to redundant processing that slowed down function)
- Adding to above, the same dependant(parent) was repeatedly processed as many children shared it. Expensive.
- Use a parent-child map similar to child-parent map to check if all children are resolved
- `map.get()` reduced time: 10 mins -> 0.9s~1 second (as compared to `get_cached_doc` or query)
- Total time: 17 seconds to process 6599 leaf boms and 4.2L parent boms
- Previous Total time: >10 mins (I terminated it due to not wanting to waste time XD)
2022-05-27 20:33:14 +05:30
marination
5949946265 chore: Change BOM Progress field types to Long Text 2022-05-27 17:04:21 +05:30
marination
eabd8290d4 feat: Only update exploded items rate and amount
- Generate RM-Rate map from Items table (will include subassembly items with rate)
- Function to reset exploded item rate from above map
- `db_update` exploded item rate only if rate is changed
- Via Update Cost, only update exploded items rate, do not regenerate table again
- Exploded Items are regenerated on Save and Replace BOM job
- `calculate_exploded_cost` is run only via non doc events (Update Cost button, Update BOMs Cost Job)
2022-05-27 14:32:58 +05:30
marination
9f5f18e94d style: Update docstrings and fix/add type hints + Collapsible progress section in Log 2022-05-25 11:22:13 +05:30
marination
ab2d95a74d feat: Level-wise BOM cost updation
- Process BOMs level wise and Pause after level is complete
- Cron job will resume Paused jobs, which will again process the new level and pause at the end
- This will go on until all BOMs are updated
- Added Progress section with fields to track updated BOMs in Log
- Cleanup: Add BOM Updation utils file to contain helper functions/sub-functions
- Cleanup: BOM Update Log file will only contain functions that are in direct context of the Log

Co-authored-by: Gavin D'souza <gavin18d@gmail.com>
2022-05-25 11:21:01 +05:30
marination
9f6e10663b chore: Run _validate_over_transfer only if excess transfer is blocked in settings 2022-05-23 11:05:55 +05:30
Ankush Menat
1a58b788e5 Merge branch 'develop' into jc-excess-transfer-config 2022-05-21 14:32:44 +05:30
Ankush Menat
66cf9aa344 fix: creation of corrective job card fails
This used to fail because sub_operations is a child table that's not
initalized by default till v13, in develop branch we init tables with
empty list.
2022-05-21 14:01:30 +05:30
Ankush Menat
e625394488 test: simplify job card tests 2022-05-21 14:01:28 +05:30
marination
90d4dc0cd6 fix: test_work_order_with_non_stock_item
- Use the right price list and currency to avoid rate conversion (1000/62.9), since rates are reset correctly now
- Use RM rate based on Price List in BOM. Non stock item has no valuation
2022-05-20 03:12:42 +05:30
marination
dd99c00eb6 fix: Get fresh RM rate in calculate_rm_cost 2022-05-19 21:48:24 +05:30
marination
9a7e9d902d perf: Use cached doc instead of get_doc
- Doc is only used to iterate over items(which wont change) and change rate/amount of rows
- These changes are inserted in db via `db_update`, so no harm
- Tested locally: refetching cached doc after db update, reflects fresh data.
2022-05-19 21:24:31 +05:30
marination
9dc3083088 fix: Call calculate_cost for Draft BOM and typo in argument 2022-05-19 20:33:48 +05:30
marination
5932e9d78a fix: DB update child items, remove redundancy, fix perf
- Move `get_boms_in_bottom_up_order` in bom update tool’s file
- Remove repeated rm cost update from `update_cost`. `calculate_cost` handles RM cost update
- db_update children in `calculate_cost` optionally
- Don’t call `update_exploded_items` and regenerate exploded items in `update_cost`. They will stay the same (except cost)
2022-05-19 20:22:13 +05:30
Ankush Menat
1de6b14d15
fix: remove "scrap %" field (#31069)
This does nothing, there's scrap items table below that's actually used
for specifying scrap.
2022-05-19 14:25:16 +05:30
marination
b6e46eea80 perf: get_boms_in_bottom_up_order
- Create child-parent map once and fetch value from child key to get parents
- Get parents recursively for a leaf node (get all ancestors)
- Approx. 44 secs for 4lakh 70k boms
2022-05-18 13:00:00 +05:30
marination
e07ce6efe0 fix: Job Card excess transfer behaviour
- Block excess transfer of items if not allowed in settings
- Behaviour made consistent with js behaviour (button disappears if not pending and not allowed in settings)
- Test for same case
2022-05-17 17:39:45 +05:30
marination
90a8e924f5 fix: set_missing_values in SE and re-use the same on all SE mappings
- `set_missing_values` in SE will set actual qty, transfer qty and calculate rate/amount
- Re-use `set_missing_values` wherever SE is doc is being mapped
2022-05-11 14:54:22 +05:30
Rushabh Mehta
548afba8bb
fix(minor): update frappe.error_log to new API (#30864)
* fix(minor): update frappe.error_log to new API

* refactor: changes for updated log_error api

Co-authored-by: Ankush Menat <ankush@frappe.io>
2022-05-02 15:04:26 +05:30
Ankush Menat
7d2587c0a9 fix: nullish check and table name 2022-04-26 11:03:32 +05:30
HENRY Florian
143786aaa0
fix: Must not be able to start Job Card if it is related to Work Order that is not started yet (#29072)
* fix: Cannot start Job strat if related to Work Order not started yet

* fix: Cannot start Job strat if related to Work Order not started yet

* test

* test

* fix siders

* PR review

* chore: Code cleanup

- Better short circuit for if condition (make it such that both conditions dont always have to be computed)
- Remove `r.message` extraction by avoiding `then()`

* chore: Remove unnecessary json change

Co-authored-by: marination <maricadsouza221197@gmail.com>
2022-04-20 12:29:52 +05:30