<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://globalqss.com/wiki/index.php?action=history&amp;feed=atom&amp;title=IDempiere%2FFullMeeting20121017</id>
	<title>IDempiere/FullMeeting20121017 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://globalqss.com/wiki/index.php?action=history&amp;feed=atom&amp;title=IDempiere%2FFullMeeting20121017"/>
	<link rel="alternate" type="text/html" href="https://globalqss.com/wiki/index.php?title=IDempiere/FullMeeting20121017&amp;action=history"/>
	<updated>2026-04-05T19:16:42Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.32.1</generator>
	<entry>
		<id>https://globalqss.com/wiki/index.php?title=IDempiere/FullMeeting20121017&amp;diff=189&amp;oldid=prev</id>
		<title>CarlosRuiz: full meeting</title>
		<link rel="alternate" type="text/html" href="https://globalqss.com/wiki/index.php?title=IDempiere/FullMeeting20121017&amp;diff=189&amp;oldid=prev"/>
		<updated>2012-10-17T17:36:52Z</updated>

		<summary type="html">&lt;p&gt;full meeting&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;!-- breadcrumb --&amp;gt;&lt;br /&gt;
&amp;lt;font size=-2&amp;gt;&lt;br /&gt;
&amp;amp;lArr;&lt;br /&gt;
[[IDempiere|Table of Contents]] |&lt;br /&gt;
[[IDempiere/Full Meeting Minutes|Full Meeting Minutes]] |&lt;br /&gt;
Full Meeting 2012-10-17&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''CarlosRuiz''''': Good morning&amp;lt;br&amp;gt;&lt;br /&gt;
'''''nmicoud''''': Bonjour&amp;lt;br&amp;gt;&lt;br /&gt;
'''''a42niem''''': hi all&amp;lt;br&amp;gt;&lt;br /&gt;
'''''nmicoud''''': I manage to fix the bug with table dir and commit a patch in my repo&amp;lt;br&amp;gt;&lt;br /&gt;
'''''nmicoud''''': hi&amp;lt;br&amp;gt;&lt;br /&gt;
'''''nmicoud''''': if you want to integrate it&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': yes Nicolas - I saw your comment - good&amp;lt;br&amp;gt;&lt;br /&gt;
'''''nmicoud''''': ok, i play with the new master/detail layout. That's very nice. Just wondering if it could be possible to keep old version and this one. To easier transition for users&amp;lt;br&amp;gt;&lt;br /&gt;
'''''nmicoud''''': I mean, maybe adding a checkbon on window to determine if we want new design or old one&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': sorry, I think the old approach was completely dropped&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': two reasons: 1 - it was kind of underdeveloped and very prone to errors&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': 2 - keeping both approaches make those classes very hard to maintain&amp;lt;br&amp;gt;&lt;br /&gt;
'''''nmicoud''''': i agree, i was just thinking from users point of view ; i fear they will be lost&amp;lt;br&amp;gt;&lt;br /&gt;
'''''nmicoud''''': that could have been done softly with a smooth transition. Maybe firstly 'reference' window and after some times, documents ones&amp;lt;br&amp;gt;&lt;br /&gt;
'''''nmicoud''''': so, we will see when starting migration&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': well - for those using actual master-detail can be a problem&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': in my case I basically didn't use that - like two years fixing bugs there and never worked fine  :-)&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': nmicoud, about some contributions from you pending for review - hengsin suggested if we create a ticket status to create a peer review queue&amp;lt;br&amp;gt;&lt;br /&gt;
'''''nmicoud''''': yes, no problem&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': just that I don't know how to do that on JIRA  :-)   will need to research&amp;lt;br&amp;gt;&lt;br /&gt;
'''''nmicoud''''': don't know ; i only use jira superficially&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': got it&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': https://confluence.atlassian.com/display/JIRA/Configuring+Workflow&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': sounds like adding an optional step &amp;quot;Peer Review&amp;quot; before &amp;quot;Resolved&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
'''''nmicoud''''': yes, so we would have Open -&amp;gt; Peer Review -&amp;gt; Resolved ?&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': yes - or back to open in case the peer review didn't pass&amp;lt;br&amp;gt;&lt;br /&gt;
'''''nmicoud''''': yep&amp;lt;br&amp;gt;&lt;br /&gt;
'''''nmicoud''''': let's do this !&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': hi everyone&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': Hi Edwin_Ang &amp;lt;br&amp;gt;&lt;br /&gt;
'''''nmicoud''''': hi&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': what is the current topic?&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': just saying hi to Edwin  :-)&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': no, seriously - we have open agenda always&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': so, we were discussing with Nicolas a new step on JIRA to mark &amp;quot;ready for peer review&amp;quot; tickets&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': I have pending to review fixed assets - sorry I haven't find the time to integrate it&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': ah.. i thought you guys are discussing the election in &amp;quot;the other project&amp;quot; :D&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': :-)  trying to avoid politics on this room&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': no worries.. carlos.. i know you have a lot of tickets to review&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': just take your time&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': however may i discuss IDEMPIERE-385 now?&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': sure&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': i am working based on the comment on the ticket&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': created M_StorageOnHand and M_StorageReservation&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': refactor all codes that call M_Storage to M_StorageOnHand instead&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': moving method getQtyAvailable to M_StorageReservation&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': wow - sounds like you're almost done&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': not really :D&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': got to update views and db functions&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': and i need some explanation about this: create reserve-location on warehouse? for reporting and info product purposes&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': ah sure&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': I guess you're aware of the actual problems having reservations on storage table - because sometimes reservation is done on a location and shipping is done in a different&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': leading to negatives and positives&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': yes..&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': ok - when you split the table in onhand and reservation&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': the reservation table won't have location column&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': so - when you try to join those back again to create the M_Storage view&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': you need a &amp;quot;default reservation&amp;quot; location to show the reservations on that view&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': is intended just for reporting purposes and kind of backward compatibility - so it doesn't mind if the user change the &amp;quot;reservation location&amp;quot; in the middle&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': it will just show reservations elsewhere in the reports&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': i thought we retain m_warehouse_id in M_StorageReservation&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': yep&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': but dropped locator&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': and M_Storage view (that must be equal to the actual M_Storage table) has locator&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': so - the idea is to add a new column, something like M_Warehouse_ID.M_ReserveLocator_ID&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': and the view and the db functions show the reservations just on that locator - the other locators will show reservations as zero&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': ah.. i see&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': but the consequences is: the reservedqty will only be calculated as subtractor for qtyavailable in the reserve locator&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': for other locator in that warehouse, qtyavail will equal qtyonhand&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': yes&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': kind of what happens actually  - asking for available on a locator doesn't make sense - it can throw anything&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': you can ask for the available on a warehouse - summing up all locators&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': actually i do not like the current qtyreservation implementation&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': users tend to think that reserve means that the qty is &amp;quot;booked&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': for example onhand is 100&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': user A make a sales order with qty 80&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': user B move 30 units to another locator in another warehouse&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': the available qty will become -10&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': i find it hard to explain it to them&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': reservation does not really mean &amp;quot;reservation&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': :D&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': yes - even worst if you move that to another warehouse&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': cos you'll have warehouse negative available&amp;lt;br&amp;gt;&lt;br /&gt;
'''''hengsin''''': that's a bug, the current reservation does means to be a revervation :)&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': Edwin_Ang, is clearer now - do you want to assign that ticket to you?&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': @CarlosRuiz: lemme give it a try :)&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': @hengsin: if that is a bug then every inventory transaction must consider qtyavail instead of qtyonhand&amp;lt;br&amp;gt;&lt;br /&gt;
'''''fjvr''''': In the scenario of the movement of quantities: Block because you are breaking reservation or Go if your are moving to fufill reservation.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': incl movement and internal use inv&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': physical inv should still use qtyonhand but then there will be a possibility of minus qtyavail caused by physical inv transaction&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': @fjvr: can you please elaborate more on &amp;quot;Go if you are moving to fulfill reservation&amp;quot;?&amp;lt;br&amp;gt;&lt;br /&gt;
'''''fjvr''''': When you do the movement you would have to make a reference to (the sales order or the reservation) and so this reservation should carry over with the movemement. In th example you present, it is NOT carrying over and thus you have the - 10 as on hand quantity.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''fjvr''''': So, if you move because of reason independent of the reservation, the system should block you because you are breaking your agreement with a customer OR you are moving to fufill the reservation in which case the system can only know if you make reference to that which it reserved it initially.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''fjvr''''': *to that which reserved it initially&amp;lt;br&amp;gt;&lt;br /&gt;
'''''hengsin''''': @fjvr, yes, exactly. at the minimum, there should be a flag to say a particular warehouse or locator shouldn't allow negative inventory&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': I have seen that use case - a company that reserve on a warehouse and fulfill the shipments from a different warehouse&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': I would suggest to keep it simple at first - solve the IDEMPIERE-385 - and then we can discuss how to control more strictly the breaks on reservations&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': my concern is if we don't consider it now, we would need to change the table structure again later to fix the problem&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': ok - the flag for negative inventory on warehouse is there - but just for onhand&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': it doesn't check available&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': maybe we can add another flag to disallow negative available inventory?&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': just thinking draft - if that could be a solution&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': what i am thinking now is elaborating on the M_Warehouse_ID.M_ReserveLocator_ID&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': when completing the sales order, the system should compare orderqty with qtyavailable in M_Warehouse_ID.M_ReserveLocator_ID&amp;lt;br&amp;gt;&lt;br /&gt;
'''''hengsin''''': yeah, that could work - you can use a logical warehouse to control you don't actually accept order more than what you have&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': so even thought if there are sufficient qty in other locator in the same warehouse, they wouldn't be consider as available&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': but if going this way, then the M_StorageReservation should have M_Locator_ID&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': so that any movement that use confirmation will also generate reservation on original locator&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': no, sounds like we go back to our original approach&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': I mean back to the original approach with the known problems&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': well we actually improved the original approach with M_Warehouse_ID.M_ReserveLocator_ID&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': hengsin, &amp;quot;that could work&amp;quot; refers to Edwin suggestion or &amp;quot;disallow negative available&amp;quot; ?&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': and i think the flaw in the original design is mixing m_storage with reservation&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': still reservations by locator doesn't sound good&amp;lt;br&amp;gt;&lt;br /&gt;
'''''hengsin''''': Carlos, I means adding the disallow negative available flag to warehouse&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': yes - that would mean that you cannot move reserved items out of that warehouse&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': or &amp;quot;internal use&amp;quot; them&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': maybe we could complement that with a &amp;quot;move reservation to another warehouse&amp;quot; process&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': in movement, the user will directly choose the locator from&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': it is wrong if the qtyreserved is then allocated to M_Warehouse_ID.M_ReserveLocator_ID&amp;lt;br&amp;gt;&lt;br /&gt;
'''''hengsin''''': for better or worst - http://wiki.idempiere.org/wiki/File:ToolbarProcessButton.png :)&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': sorry Edwin_Ang - I'm not following that line&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': in movement - user is moving onhand qtys&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': but there is that movement with confirmation&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': although it is currently buggy&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': but i think movement with confirmation should reserve the stock&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': I saw that recently&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': reserving on movement prepare - and releasing the reserve on confirmation&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': well - it was not reservation - but more like allocation&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': and it was kind of hard to control all the other possible events - i.e reversing - not confirming &amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': I think actual approach if you want to make such movements is to move to a transit warehouse&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': well.. moving to transit warehouse is another case&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''':  i mean we have the move confirmation inherited from Compiere&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': it serves a certain inventory movement scenario&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': it is become more and more complex :D&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': i will try to work on the initial work first&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': yes&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': then elaborate later&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': that's what happened on every forum thread where we discussed this  :-)&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': :D&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': great - you can contact me on skype - or here - or on JIRA - in case new doubts arise&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': one more thing that i would like to ask you&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': sure&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': in one of my previous installation&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': i noticed many m_storage records with negative qty&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': if you sum up by m_product_id and m_locator_id, the qty will be +&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': however the negative qty records surely make me feel uneasy&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': do you have any idea what cause that?&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': do you mean on onhand?&amp;lt;br&amp;gt;&lt;br /&gt;
'''''hengsin''''': qtyonhand ?&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': yes&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': qtyonhand&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': I think it can happen &amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': if you don't have the check &amp;quot;disallow negative inventory&amp;quot; &amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': which is recent and not present on adempiere &amp;quot;official&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': you haven't committed that feature yet at the time&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': it must be so common that Jorg Janke made a process to fix that  :-)&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': oh really? which one? :D :D&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': i don't know there's such process&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': http://adempiere.com/ManPageP_StorageCleanup&amp;lt;br&amp;gt;&lt;br /&gt;
'''''hengsin''''': &amp;quot;if you sum up by m_product_id and m_locator_id, the qty will be +&amp;quot; - it is + but is it correct ?&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': but I don't like it - it seems kind of &amp;quot;random&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': @hengsin: i can't be sure if it is 100% correct&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': cos at that time we heavily customized the inventory codes&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': my last implementation incl inventory&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': been avoiding inventory ever since&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': :D&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': until now&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': hahaha&amp;lt;br&amp;gt;&lt;br /&gt;
'''''CarlosRuiz''''': ok guys - I need to move out - thanks for attending the meeting&amp;lt;br&amp;gt;&lt;br /&gt;
'''''hengsin''''': one issue that have been there since day one is the lack of concurrency control&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': ok.. bye Carlos&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': thanks for the discussion :)&amp;lt;br&amp;gt;&lt;br /&gt;
'''''nmicoud''''': bye&amp;lt;br&amp;gt;&lt;br /&gt;
'''''hengsin''''': in many place, it is reading mstorage record without &amp;quot;for update&amp;quot; and then use it for calculation and further update, i.e you could be working with stale data and end up sending the wrong update to db.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': @hengsin: any idea how we can improve that area?&amp;lt;br&amp;gt;&lt;br /&gt;
'''''hengsin''''': for scenario where you need to perform update with figures from m_storage, we should read it from m_storage with the for update clause&amp;lt;br&amp;gt;&lt;br /&gt;
'''''hengsin''''': that should ensure we get the &amp;quot;current data&amp;quot; since the lock will prevent other transaction to mess with it.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Edwin_Ang''''': can you give an example of implementation in the idempiere code?&amp;lt;br&amp;gt;&lt;br /&gt;
'''''hengsin''''': for example, in MInOut.completeIt,  in checkMaterialPolicy, it call MStorage.getWarehouse to retrieve storage records. it then use that for delivery calculate and later use MStorage.add to modify the m_storage.qtyonhand&amp;lt;br&amp;gt;&lt;br /&gt;
'''''hengsin''''': in a busy environment, some other transactions might have retrieve/modify the same storage record during that interval.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''hengsin''''': i means the interval between mstorage.getwarehouse and mstore.add&amp;lt;br&amp;gt;&lt;br /&gt;
'''''hengsin''''': typo - mstorage.add&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
		
	</entry>
</feed>