IRC logs of #tryton for Tuesday, 2010-01-26 #tryton log beginning Tue Jan 26 00:00:02 CET 2010
udonovengfulsquirrel: Having a question to your concept on
vengfulsquirreludono: ?00:00
udonovengfulsquirrel: do you have an idea for disassemble an produced product into its parts?00:00
vengfulsquirreludono: You mean from an inventory perspective to take a product off the shelf and re-stock it as products for each part?00:01
udonovengfulsquirrel: yes, but ...00:02
cedksharoon: do you see our comments about the naming?00:04
sharoonis it abt camel case?00:04
cedksharoon: we think that it should be named sale.opportunity00:04
sharooni dint see that comment00:04
cedksharoon: we think that crm is all concept like erp00:04
cedksharoon: and so it should not be used as name00:05
sharooncedk: where was the comment? are there any further additions?00:05
sharooncedk: agree00:05
sharooncedk: and should the menu classification change/?00:05
udonovengfulsquirrel: I talked last week to an interest. He told me he is producing products made of a BOM, which are stored. When producing other products, sometimes he takes equipment out of one (exsting and produced) product. Then he use this disassembled part in another product.00:05
cedksharoon: I said that history functionnality could fully be used00:05
cedksharoon: classification ?00:06
sharooncedk: which is why i decided to forget the extra table we thought of having to maintain history00:06
sharooncedk: the menu now says CRM00:06
sharoonshould we hold that or get this Opportunity to Sales?00:06
cedksharoon: i think you could put into sale00:06
sharooncedk: that sounds uniform00:07
cedksharoon: some comments about coding:00:07
sharooncedk: please, all welcome00:07
cedkspace after comma00:08
cedkparty_id -> party00:08
cedkwe never use _id00:08
cedkit has a better look with browserecords00:08
sharoongot you00:08
sharoondoes it append id in the table like django?00:08
cedksharoon: no00:09
cedksharoon: I don't know if it is good to have the active domain on party00:09
sharooncedk: we thought of having active and inactive partners in leads, but only active in the sale etc. but its erring out anyway00:10
cedksharoon: is the field stage could be named state? We often use state fields00:10
vengfulsquirreludono: Well I think subassemblies are represented.  Does disassembling a product destroy it from inventory?  Or do you mean to sort of use the production process in reverse by selecting a bom to disassemble a product to?00:10
sharooncedk: though it lists the partner it doesnt save at the end00:10
sharooncedk: agree on stage -> state00:10
cedksharoon: for selection fields you can put sort=False and remove numbering00:11
sharooncedk: ok00:12
cedksharoon: I think probabilty shoud be an float field00:12
cedksharoon: we could make operation on it00:12
cedkwhat is change_history ?00:12
sharooncedk: anyhow we dont allow arbitary values to be entered since its selection?00:12
sharooncedk: i was told that the history in orm doesnt generate a view00:13
cedksharoon: you can create a ModelSQL that use a SQL query or even custom it00:13
cedksharoon: like for the cost price historisation00:14
bechameludono: isn't it enough to concider the final product as an input that is splitted into several output by a production order ?00:14
vengfulsquirreludono: If a bom exists for a product that specifies the part then it can be used to produce that product(assuming the part is in inventory), ie. instead of all the materials that were used to create that part.00:14
sharooncedk: can you point me to an examle00:14
sharooncedk: ok00:14
sharoonlooking at it :-)00:15
cedksharoon: for probability, it must be a number between 0 and 10000:15
sharoonso convert selection to blank float field?00:15
cedksharoon: I think it will be more powerful than a char field00:16
sharoonagree, but is it possible to limit values or do we use constrain?00:16
bechamelcedk: why ? imo it's easier to select a percentage on a selection00:16
cedksharoon: because we could later make query like this sum(amount * probability)00:16
sharoonwe could also do sum(amount * int(probability)) with current case?00:17
cedkbechamel: you are a mathematician ?00:17
cedksharoon: I mean in SQL00:17
cedksharoon: and it suppose that nobody (module) will extend the selection and append a non-mumeric key00:18
sharooncedk got u00:18
cedksharoon: I think end_date would be useful00:19
bechamelcedk: yes but before all a lazy user that don't want to leave is mouse using my clicky GUI00:19
cedksharoon: and perhaps a cancel/lost description00:19
sharooncedk: end_date filled auto when state in cancel/lost/converted?00:20
cedkbechamel: I think we learn that stay as close as possible to the real type of concept is better00:20
cedksharoon: yes00:20
cedksharoon: perhaps with workflow00:20
sharoongot u00:20
sharoonso make field state readonl?00:21
cedksharoon: always readonly no?00:21
sharooncedk: yes00:21
cedksharoon: also double empty line before class00:22
sharooncedk: ok00:22
sharooncedk: is there any doc somewhere abt historisation?00:22
cedksharoon: and for lines, try to use the same string for the fields than his name00:23
sharooncedk: unclear00:23
cedksharoon: no doc, it just need to add _history = True to the Model00:24
sharooncedk: cool00:24
sharoonwill look how it works and get back00:24
cedksharoon: you used as string "Items" for field "lines"00:24
sharoonso finally what abt the probability? selection or Float?00:24
sharooncedk: got you abt lines00:25
cedksharoon: I'm for a float or integer00:25
sharoonlets stick to int then and validate by a constrain that its between 0 & 10000:25
cedksharoon: ok00:27
udonobechamel: I told the interest the same. Just explode the produced product into its parts, and move them into their Standard locations or anywhere, but00:36
udonobechamel: for him it is far from reality. He uses alredy produced products as a kind of stock for other products00:36
cedkudono: so no need to explode anything00:37
bechamelcedk: for integer in the db vs selection in the view, nothing prevent us to do both00:38
udonovengfulsquirrel: if disassembling a product destroy it from inventory I don't know. For me it sounds like using a part from a produced product A and produce product B of it. Product A becomes unproduced and waiting for (end) Production.00:39
cedkudono: of course there is no more product A but a product C00:41
udonocedk: yes, but what happens to the rest of product A? Where are all the parts going to?00:42
udonocedk: vengfulsquirrel: on the other hand, a produced product can be seen as a location with products inside...00:42
cedkudono: the rest of product A is some other products C, D ...00:43
cedkudono: but the explode could be done at a specific level of the bom tree00:44
cedkACTION go to sleep00:44
udonocedk: dd the rest of product A fall into ts pieces (partial products)?00:44
cedkudono: it must it is no more product A00:44
udonocedk: ok00:45
udonoMaybe disassemble of Product A can be done with a wizard. There can be choosen:00:52
udono1. all part-products of Product A should be stored in their default locations00:52
udono2. storing all part-products in a new location. The new location can be default named like Product A (disassembled)00:52
udonoafter this, Product A does no longer exist as Product, but now exist as stock location with the rest of the part-products inside.00:55
udonovengfulsquirrel: what do you think about?00:58
vengfulsquirreludono:  Sorry, had to make food.  *Reading*01:01
vengfulsquirreludono: I think that is abusing stock locations, I think you would just disassemble in parts(other products) and then they could be moved into their default locations.  If you need them in production again you would have to assign them from those locations, wherever they might be.  I don't think a relationship between the product that they were disassembled from is necessary.  A wizard for the disassembly of the product into parts(01:05
udonovengfulsquirrel: your last post ended with " product into parts(" is it right?01:11
vengfulsquirreluduno: * A wizard for the disassembly of the product into parts(other products) and shipment of the parts into storage seems like it would make sense to me.01:13
vengfulsquirrelSorry, I can never tell when IRC is going to trim it.01:13
udonovengfulsquirrel: Where do you see stock location abusing, when creating a new ocation on demand for the disassembled stuff?01:14
vengfulsquirrelYes, because then someone would have to delete it eventually, and its not clear exactly "where" that location is.01:15
vengfulsquirreludono:  I don't know, maybe I misunderstood what you meant.01:16
udonovengfulsquirrel: It could be a new location type, which must be inside a storage location.01:16
vengfulsquirreludono: I guess I don't understand its purpose, why not just put the parts back into storage where they physically end up?01:17
vengfulsquirreludono: Maybe a more general and permanent area for disassembly would be more appropriate.01:18
udonovengfulsquirrel: The purpose is to produce products for the stock. And quickly produce new products out of the stock and out of parts of another product. When using parts of another product this product disappears (disassembled into parts). This parts can be stored in their default locations _or_ all together in an other (or new) location.01:23
-!- saxa_( has joined #tryton01:24
-!- bechamel( has joined #tryton01:24
udonovengfulsquirrel: I doesn't mean it make sense to be a generic functionality of disassembling a product... For me it is an specfic addon to the generc disassemble-and-put-parts-into-default-location functionality.01:26
vengfulsquirreluduno: That seems like the specific need of a certain user but not the general case.  Maybe if dissembling was very expensive and the parts were very large.  Like say a car junkyard.  Although if you disassembled a computer you would most likely place the parts back into their respective bins.01:26
vengfulsquirrelYes, okay, that's fine.  So maybe the developer would extend the dissassemble wizard and generate a new location for certain product types instead of performing the default action which would be returning the parts to their default locations.01:27
udonovengfulsquirrel: yes, car yunkyard is a good example01:27
udonovengfulsquirrel: should I add the disassembly to the MRP concept in the wik?01:28
vengfulsquirrelYes, I have no idea when this will all be implemented though.  Maybe 2020 AD ?01:29
vengfulsquirrelI can add it.01:30
udonovengfulsquirrel: we will see01:30
udonoI hope for 2010 :-)01:30
vengfulsquirrelSuch a feature does seem simpler to implement than many of the other features.01:32
vengfulsquirreludono: Actually the user could be allowed to customize the default locations for re-stocking which would provide an opportunity for the user to create a new custom location and replace all the default locations.01:33
vengfulsquirreludono: For example we could just pre-fill the locations in the lines of the internal shipment or whatever and then the use could customize it and finalize it.01:34
vengfulsquirrelThat seems like a better general use case and it would be very easy to extend it to just pre-fill with a new location everytime for certain product types.01:35
udonovengfulsquirrel: yes. We need on BOM level a flag can_diassemled which indicates, that parts in this BOM can or can not be disassembled.01:38
vengfulsquirrelHmm good point, is that really necessary?01:41
vengfulsquirrelI mean did someone mention they needed that ?01:41
udonovengfulsquirrel: some parts are soldered together. They will never be unsolderd. Components like01:41
vengfulsquirrelWell any bom might allow users to scrap portions of a product and extract other portions, and in that case many of the parts would be "shipped" into a virtual Garbage location for means of tracking.01:43
vengfulsquirrelI guess it might not hurt to have it though, it just might be limiting if it was set and wasn't need for some sort of definitive purpose.  I don't see how it would really hurt the implementation too much though and the admin could always go back and set it to True if it was really needed.01:44
vengfulsquirrelDo the website commits show up in tryton-commit as well?01:47
udonoyes, Iam talking about tzhe request of an interest. He produce components and put them together to produce an other product. On disassemble the product, he wanted to have the only components and not all the part-products of the components. Because the components stays to be a produced product.01:47
vengfulsquirrelYou mean sub-assemblies ?01:49
vengfulsquirrel'''only components and not all the part-products of the components'''01:49
udonosubassemblies and produced products made of other produced products in storage01:50
vengfulsquirrelYes, that could most likely be customized by either picking a different BOM(since many BOMs can exist for 1 product) or by somehow pruning the BOM with the wizard somehow.01:51
udonois subassembly the same as a product produced of other products or is it the same as a 'component'?01:52
vengfulsquirreludono: Since a bom is really just many single level boms connected into a tree, your client would want to stop at bom higher in the tree rather than disassembling the product entirely into the leaves of the tree.01:52
udonovengfulsquirrel: yes, got it01:53
vengfulsquirrelI guess I didn't mention that in notes, will try that now.01:53
udonovengfulsquirrel: what try now?01:54
udonoah, the wiki?01:54
vengfulsquirrelOh right I meant I will update the wiki.01:56
udonovengfulsquirrel: and going back to your idea with the internal shipment, we can put a field default location on disassembly wizard, which rules the lines of disassembled parts in the internal shipment (or whatever). If this field default location is empty, the parts where stored into their special default location (that's the default behavoir). If field default location is given, all parts where stored into this location. This can be 01:57
udonoIf field default location is given, all parts where stored into this location. This can be done in an addon module.01:58
vengfulsquirrelYeah I find that if a field in on the screen then users want to fill it with something so I think the default should be less obtrusive somehow, maybe the empty field can be added IN the addon.02:00
udonovengfulsquirrel: yes02:01
udonogood point02:01
vengfulsquirrelThe pruning process must involve selecting a subtree of the multi-level bom tree that will not be followed in the disassembly process thereby resulting in the production of the bom determined quantity of the root of that subtree rather than the products at the leaves of that subtree.02:01
vengfulsquirrelI think my explaination is way too complicated.02:01
udonovengfulsquirrel: yeah, I understand nothng in the last sentence :-)02:02
udonovengfulsquirrel: just kidding, after three times reading it is clear as fresh water02:03
udonovengfulsquirrel: and you are right. The disassemble stops at BOMS with the flag can_disassembled is False, and take the sub-BOM as a complete product.02:05
vengfulsquirrelOh ha well I kind of simplified it anyways.02:06
vengfulsquirrelThis is what I have now:
vengfulsquirreludono: I think functionality to select what not to disassemble beyond the flag will be necessary.  Since the flag will be more of a policy and not as much a technicality of the current dis-assembly process.  So users cannot disassemble beyond a flagged BOM but also they can select additional products that they don't want to disassemble even if they COULD be disassembled(ie. no flag).02:09
udonovengfulsquirrel: do you have an example?02:11
udonovengfulsquirrel: I do not see the need for this much control02:12
vengfulsquirrelWell a user might sometimes want to disassemble a car and furthermore the car's engine (and other parts) COMPLETELY whereas other times if demand for the engine exists then only disassemble the car to its engine(and other parts).02:15
udonovengfulsquirrel: you are right it could sometimes needed. So it could be another module, which provides the disassembly parts tree and the possibility to choose for each node, if it should be disassemled or not.02:16
udonoall nodes could be preferenced with the can_dissassembled flag from the appropriate BOM.02:17
vengfulsquirrelYes, okay I guess it will depend on the complexity to implement.  The base module could just strive to be extensible for that case.02:17
udonovengfulsquirrel: yes. But as far as I understand your concept, there is no limitation in all discussed parts.02:18
vengfulsquirrelSo by default all boms must be disassembled to materials or flagged subassemblies.02:19
udonoyes, this I would think02:19
vengfulsquirrelAnother feature would be to have an flag that could be overriden in the wizard that marked subassemblies as default to being unable to be disassembled.(sorry the double negatives are confusing)02:20
udonovengfulsquirrel: double negative is positive, so: yes02:22
udonosubassemblies are a different concept then products produced of other produced products?02:26
vengfulsquirrelNo, I just use that terminology here because it is easier.02:26
vengfulsquirrelEverything was planned to be a product.02:26
vengfulsquirrelSo a single level bom points to products which then point to their own boms therefore building the multi-level bom.02:26
udonoare subassemblies always phantoms?02:26
vengfulsquirrelThis is what I have now --
vengfulsquirrelOh wait sorry, I think I am wrong about phantoms.02:27
vengfulsquirrelOh wait, I had intended for phantom boms to also be products.02:30
vengfulsquirrelThe use of "phantom" seemed highly abused as the definition for everything when I was researching for this.02:31
vengfulsquirreludono: I need to go out for a bit though, I will be back soon.02:34
udonovengfulsquirrel: see you02:34
-!- ikks_(n=ikks@ has joined #tryton02:43
udonovengfulsquirrel: phantom subassembly I do not understand correctly.03:05
vengfulsquirreludono: Okay, I am back btw, just went out for a walk.03:06
udonovengfulsquirrel: it seems a product A.1 which is produced on demand without a production order when parent Product A is produced.03:08
-!- ikks_(n=ikks@ has joined #tryton03:11
udonoIs it a flag like salable or purchasable on product which indicates a phantom product?03:14
udonoeverytime I use a phantom product, I produce it on demand sounds wrong for me. What to do if a part of a phantom product is not available. It needs to be reordered. On Production time for me it is to late for reordering missing parts. They need to be reordered at the time of assign a sales order.03:23
vengfulsquirrelSorry I got a phone call.03:44
udonovengfulsquirrel: np03:44
vengfulsquirreludono: It just means to never actually produce it directly, when a bom references a phantom product then the bom of that product is expanded. Rather than a non-phantom product which generates another production order.03:47
vengfulsquirrelIn the case of a phantom product it means that the production line produces the phantom product in the process of producing the final product.  Rather than having it be a separate production line.03:48
vengfulsquirrelTherefore one should never really have any phantom products in stock unless a product was disassembled.  So its really more of a placeholder to partition a large bom into smaller boms but still have it act like a single bom.03:49
udonovengfulsquirrel: so at sales order assignation time, the parts of a phantom product are treated like other parts of the product? Which means, if parts of a phantom product are missing, then they are reordered at the time the sales order is assigned?03:52
udonovengfulsquirrel: Phantom Products are only for another logical view on products and parts?03:53
vengfulsquirreludono: Well right when allocating for production if parts of a phantom product are missing, then they are reordered.04:00
vengfulsquirrelThis way common phantom products can be shared between boms though.  For example if there is a common subassembly process that takes place on two production lines that then produce different final products.04:01
vengfulsquirrelI guess after reading a bunch of definitions for phantoms this implementation is what I came up with.04:01
udonovengfulsquirrel: now I understand, and it sounds good for me.04:07
udonovengfulsquirrel: thanks for your time, see you04:31
vengfulsquirreludono: Yeah no problem.  Talk to you tomorrow.04:32
-!- yangoon( has joined #tryton05:19
-!- ikks_(n=ikks@ has joined #tryton05:20
-!- varun_openlabs(n=VARUN@ has joined #tryton06:24
-!- varun_openlabs(n=VARUN@ has left #tryton06:26
-!- udono( has joined #tryton07:03
-!- Timitos(n=timitos@ has joined #tryton07:39
-!- bechamel( has joined #tryton07:56
-!- paepke( has joined #tryton08:28
-!- cedk(n=ced@gentoo/developer/cedk) has joined #tryton09:45
-!- sharoon(n=sharoont@ has joined #tryton09:51
Timitoscedk: hi09:53
Timitoscedk: i cannot create issues on bugtracker any more09:53
Timitosi am not allowed to create entries ob class 'msg'09:53
cedkTimitos: which kind of issues?09:58
Timitoscedk: i tried to create an issue with priority error and type behavior10:00
cedkTimitos: there is no priority error10:00
Timitoscedk: sorry i only have german names here 'Fehler'10:01
cedkTimitos: try with english browser10:02
Timitoscedk: it is priority 'bug'10:04
cedkTimitos: it doesn't work ?10:05
cedkTimitos: what is the error message in english?10:07
Timitoscedk: You do not have permission to create msg10:07
cedkTimitos: try again10:10
Timitoscedk: still the same10:10
cedkTimitos: again10:13
Timitoscedk: again same problem10:14
cedkTimitos: and now?10:15
Timitoscedk: works now10:16
-!- enlightx( has joined #tryton10:40
sharooncedk: i built a workflow, I can see it in admin workflow too but doesnt get attached or create an instance when i create a record11:03
cedksharoon: did you inherit from ModelWorkflow?11:07
sharooncedk:  got you!!! i dint11:07
sharooncedk: is it possible to use time object in workflow action? or should i use a function and then in function write the date, its for end time11:15
sharoonend date11:15
yangooncedk would be nice to have direct links to changesets on #tryton-commit as we had before here11:17
cedksharoon: it is in trytond/workflow/expr.py11:17
cedksharoon: and I don't see time11:17
sharoonso just access a method and in method use write with date time11:18
sharoonno problem11:18
sharoonthanks again11:18
cedkyangoon: should be fixed11:18
sharooncedk: one more question, i think the calendar events and todo should have a related party field11:19
sharooncedk: what do you say?11:19
cedksharoon: I think the main issue is to make it works with CalDAV clients11:19
sharooncedk: so if a new field exists it will create prob with caldav?11:20
cedksharoon: no, but it will not work well because this information will not be available to caldav users11:21
cedksharoon: and by the way, it should be parties11:21
sharooncedk: we can give a warning, or else we have to use many2many?11:21
cedksharoon: there is the attendees on events and I think we could use it to make links to parties11:22
cedksharoon: but it works on emails11:23
sharooncedk: so make a link with active_id in attendees?11:23
cedksharoon: don't understand11:26
sharooncedk: i want to show the events & todo as a related item for a prty11:27
-!- paepke_( has joined #tryton11:27
cedksharoon: yes I understand that11:27
cedksharoon: I don't understand "make a link with active_id in attendees"11:27
cedksharoon: I think it possible to make a function field that return events linked to a party by his email addresses11:28
sharooncedk: got it11:28
cedksharoon: but we should have options on contact_mechanism to prevent Tryton to send emails about events to the parties11:29
sharooncedk: you mean like an option to opt out of emails?11:38
sharoonwhat should be the data type of the value if i want to write directly to a date time field. Eg .self.write(cursor,user,id,{'end_date':???})11:46
sharoongot it, string11:50
-!- mourad( has joined #tryton11:56
cedksharoon: better to use datetime12:00
sharoonan example?12:00
cedksharoon: and yes an opt out like in calendar_scheduling module12:13
sharooncedk: checking12:13
-!- ikks(n=ikks@ has joined #tryton12:14
sharooncedk: i couldnt find it, can you point me to that?12:14
sharooncedk: i just got tryton sync with ical in mac, does it update from ical to tryton?12:22
bechamelsharoon: yes it works both ways12:24
sharoonbechamel: thanks, THATS JUST AWESOME!!!!12:24
sharoonbechamel: but still struggling to get it up in evolution12:24
bechamelsharoon: and cedk made some fix to make it works with the iphone client12:25
bechamelsharoon: yes12:25
sharoonbechamel: it has issue with evolution then?12:25
paepkebechamel, cedk: great work with the calendar stuff!12:25
bechamelsharoon: yes I think12:25
bechamelpaepke: thx :), cedk made most of the work, I worked on the todo and scheduling stuffs12:27
-!- ikks(n=ikks@ has joined #tryton12:59
-!- tekknokrat( has joined #tryton13:31
sharooncedk: bechamel:
sharoonthe module name has to be changed though13:47
cedksharoon: you should use codereview it is better to comment code13:49
sharoonok, link please13:49
sharooncedk: i am using this for the first time. can you say what i got to do??? i created a new repositry and added the trunk!13:53
bechamelsharoon: the easiest it to create a new repo, put the code from crm in it (hg init + hg addremove)and use the codereview script to updload it13:56
udonosharoon: the upload tool can be found here:
sharoonudono: i did the upload14:19
-!- woakas(n=woakas@ has joined #tryton14:24
bechamelsharoon: nice job, I hope you won't be discouraged by all the comments :)15:04
sharoonbechamel: i believe in code review15:04
sharooncedk: what exactly is depends used for ?15:16
cedksharoon: it ensure that the fields define in depends are also read by the client when reading the field15:19
cedksharoon: like that the evaluation of states will always work15:20
-!- paepke( has left #tryton15:22
-!- rednul_( has joined #tryton15:22
-!- Timitos(n=timitos@ has left #tryton15:25
-!- Timitos(n=timitos@ has joined #tryton15:27
bechamelsharoon: you can reupload the issue with " -i issue_number"15:39
cedkand --send_mail to inform reviewers15:39
sharooncedk bechamel thanks15:57
sharoonwhat is ir.action.act_window.view used for?16:10
cedksharoon: define the order of view of an act_window16:10
sharooncedk:  ok16:11
sharooncedk: bechamel: udono: yangoon: The final code has been committed. So is the review done??16:39
yangoonsharoon: I didn't get any feedback to my question so far16:43
sharoonlooks like i dint publish it!16:44
udonosharoon: I have an open question with the use of COALESCE, too16:45
sharoonudono: It think what happens is a double update, one to the original table and16:45
sharoonsecond to the history table. So all entries of the same parent record16:45
sharoonwill have same create date in history table.16:45
sharoonAlso, the first update to history table will not have write_id16:45
udonosharoon: so, when there is no write_id, why use coalesce?16:47
sharoonudono: so all the records have the same create_uid16:47
sharoonudono: therefore we use write_id for all records except first16:48
udonosharoon: ok, understand16:48
sharooncedk: what does We indent with 8cols and not align to { mean? how many tabs/spaces from left or intend from ?16:50
yangoonsharoon: instead of aligning subsequent lines to {, indent them with 8 cols16:57
udonocedk: in you do no longer check if self.parent.context exists. Why is it no longer needed?17:01
cedkudono: because context is initialised to {} by default17:05
udonocedk: ok, thanks17:06
-!- juanfer(n=juanfer@ has joined #tryton17:11
sharooncedk: do you normally use space for xml intendation? and not tab?17:12
udonosharoon: we use always space for identation, never tab17:15
sharoonhmm, eclipse doesnt have a tool to convert tab to space in xml17:15
sharoonwhat about python?17:15
udonocedk: what about states? is it initialised to {}, too?17:23
cedkudono: yes17:25
sharooncedk: was pyson introduced in the trunk?17:26
sharoonis it not there in 1.417:26
cedksharoon: yes17:26
sharooncedk: so how do i build a windows installer for the trunk client??17:26
cedksharoon: I think you did not upload all the files for last update in codereview17:32
sharooncedk: i think it update only changes17:33
sharoonshall i go for a new issue?17:33
cedksharoon: there is just and sale_opportunity.py17:33
cedksharoon: did you add renamed files?17:34
cedksharoon: and by the way should be named opportunity.py17:34
udonocedk: do you thing the following transformation to pyson is ok?
bechamelsharoon: I think it's because you made a commit, the script only upload non-commited stuffs17:44
sharoonbechamel: thats right17:44
cedkudono: no17:46
udonocedk: yes, got it, thanks17:48
sharooncedk: when i use python py2exe it gives error: invalid command 'py2exe'17:58
cedksharoon: py2exe can only be run on windows18:02
-!- FWiesing( has joined #tryton18:12
sharooncedk: got you18:13
-!- KangOl( has joined #tryton18:14
-!- vengfulsquirrel( has joined #tryton18:40
-!- LucaSub1( has joined #tryton20:08
-!- LucaSub1( has left #tryton20:08
-!- sharoon( has joined #tryton20:17
-!- sharoon( has left #tryton20:17
-!- sharoon( has joined #tryton20:17
sharooncedk: bechamel: so is the module for sale_opportunity final now?20:21
yangoon sharoon sorry, still no answer for me and codereview currently is incomplete (no xml)20:24
sharoonyangoon: whats your question?20:24
sharoon"I don't see the difference between States lead and opportunity."?20:25
yangoonsharoon: comment 8 on codereview20:25
sharoonyangoon: we discussed this yesterday20:25
yangoonsharoon: then I will have mised something20:26
sharoonbechamel: cedk: yangoon: if you guys consider this complete for sale_opportunity, then I want to go into my next requirement: CRM Cases, Tickets20:27
sharoonif we can discuss here then we could have a common solution like yesterday.20:27
yangoonsharoon: even re-reading the log gives me no answer to my question20:29
sharoonyangoon: let me explain20:29
sharoonyangoon: Lead is like a tip off. Eg. Company X wants to implement ERP and you come to know of it20:30
sharoonyangoon: Then you take it to an opportunity after which they say, Yes, we are looking for a solution lets discuss this... If they say No we are obsessed with M$ then we mark it as a lost lead and record the reason as their obsession20:31
sharoonyangoon: during the discussions at various stages we take the winning probability up and down and finally we win it (converted opportunity) or loose it (lost opportunity)20:32
yangoonsharoon: as far as I have read 'lead' is a more generic term, not necessarily related to sales20:33
yangoonso if you have a state lead on oppportunities I am with you20:34
sharoonyangoon: yes and no20:34
sharoonyangoon: yes, thats exactly the design :-)20:35
yangoonbut the model you created for me is opportunity20:35
sharoonyes, and lead is a state in that20:35
yangoonso I would rename all occurrences of Leads/Opportunities to Opportunities, because this is the model20:36
yangoonleads only being a state20:36
cedkyangoon, sharoon : I'm thinking that we could rename lead into draft20:54
cedka state that is common in Tryton20:55
sharooncedk: all such systems have a lead and when simething functions like a lead lets use that term ?20:55
sharooni have uploaded the new code:
cedksharoon: ok, so why using open lead and not just lead20:59
sharooncedk: agree20:59
cedksharoon: according to wikipedia, state opportunity should be qualified21:00
sharooncedk: can you share the link?21:01
cedksharoon: I think also it misses the company21:02
sharooncedk: +1 M2O to company?21:02
cedksharoon: yes21:02
cedksharoon: with rules to prevent other company users to see opportinyties21:02
cedksharoon: and also instead of using user, we should use employee21:03
cedksharoon: I don't think that every sales will have an user21:03
sharooncompany = fields.Many2One('', 'Company', required=True,21:04
sharoon            states={21:04
sharoon                'readonly':Not(Equal(Eval('state'), 'lead'),21:04
sharoon            }, domain=[21:04
sharoon                ('id', If(In('company', Eval('context', {})), '=', '!='),21:04
sharoon                    Get(Eval('context', {}), 'company', 0)),21:04
sharoon            ])21:04
sharooncedk: the employee is usually called owner in other systems like salesforce21:04
cedksharoon: why not sale?21:06
sharooncedk: i did not understand21:06
cedksharoon: ok for company fields21:06
cedksharoon: employee many2one named salesman (better)21:07
sharooncedk: agree21:07
sharooncedk: where is the employee object?21:07
cedksharoon: in module company21:09
sharooncedk: company.employee21:10
cedksharoon: yes21:10
cedkACTION bbl21:12
-!- rednul_( has joined #tryton21:21
sharoonyangoon: 1 question from the comment21:52
sharoonyangoon: lead -> prospect is true when you treat a lead as entity21:52
sharoonyangoon: but in this design lead -> opportunity is a process21:53
sharoonyangoon: you cannot call it a prospect?21:53
sharoonyangoon: thoughts?21:53
yangoonsharoon: we are talking about states21:53
yangoonsharoon: finally you are the native speaker I think21:54
yangoonmy thoughts are just what I read from the cited links21:54
sharoonyes yangoon21:54
sharoonyangoon: i went through few systems21:54
sharoonyangoon: so this is one approach we could use with our system an ERP21:54
sharoonyangoon: in a dedicated CRM the Entity (customer) itself could migrate from lead -> prospect to ...21:55
yangoonsharoon: genericity (also in states) has its advantages, but I have to sleep one night thinking about;)22:03
yangoonand read a little bit more22:03
sharoonyangoon: i agree with genericity of things, but something like an opportunity makes more sense to be called a lead than draft??22:04
yangoonsharoon: it depends22:05
yangoona draft in tryton normally is something which has absolutely no effect, it is a blue print22:06
sharoonyangoon: i agree but leads have effect22:07
sharoonsale orders in draft are blueprints but leads are not22:07
sharoonleads are important for you?22:07
yangoonsharoon: if you took some action on a lead, it can no more be a draft22:08
yangoonbut I think we should have state draft for a lead/opportunity22:09
sharoonyangoon: not really, i got a lead that somebody needs an erp, how many of them to translate into opportunity is an import KPI22:09
-!- sharoon( has joined #tryton22:17
cedksharoon: sorry for all remarks about coding style but we think it is important to have same coding style in all the project23:11
cedksharoon: it makes the read easier and if somebody needs to work on one module that he doesn't know he will not be lost23:11
sharooncedk: i agree absolutely that coding style is important and i always stress on this... thanks guys for the review. I love the way you guys do it23:28
sharooncedk: can you explain how the states is to be refactored?23:31
cedksharoon: which states?23:32
sharooncomment 123:32
cedksharoon: it is about indentation, the } must be under the s of states23:34
sharoonis it the first s or second s?23:35
cedksharoon: first one23:36
sharooncedk: BTW i decided to declare state dic for lead & converted because it could be reused23:36
sharooncedk: ok23:36
cedksharoon: don't understand23:37
sharoon_STATES_CONVERTED = {'readonly': Equal(Eval('state'), 'converted'),}23:37
sharoonand then use states=_STATES_CONVERTED23:38
sharoonbecause its used atleast 6 times23:38
cedksharoon: why not23:40
sharooncedk: what abt intendation in self.write23:42
cedksharoon: 4cols for 'end_date'23:45
cedksharoon: oops 8cols indent for keys23:45
cedksharoon: and 4cols indent for }23:45

Generated by 2.11.0 by Marius Gedminas - find it at!