Responding to agg...
I am at a disadvantage in reading your model since the only French
I remember is Je ne comprend pas. So I am mostly
speculating here. First, some general comments...
I assume that the classes LigneXxxx are subclasses of
LigneDocument in a generalization. If so, I think you need to get
a better tool that can draw generalizations properly.
I am concerned about your naming conventions. My French may be
rusty, but I am pretty sure Document does not mean Purchase Order
or Request. In OO modeling classes should be named for the
underlying problem space entities as precisely as possible. I
realize that your orders and requests have shared characteristics.
But if they are truly shared (which I doubt, see below), then
there must be a better problem space name to describe the
superclass (e.g., Warehouse Action).
Speaking of that, if Ligne really means line item, where is your
aggregation of individual line items into an order? Also, I find
your use of 'order' and 'request' confusing. They seem to suggest
that every line item has its own unique request and order. Surely
a purchasing agent orders items from vendors in aggregates and
items are pulled from the warehouse in aggregates(???)
Finally, what is the difference between a 'request' and an
'order'? Normally the purchasing agent creates vendor orders,
which are relevant until the items are actually in the warehouse.
But once they are in the warehouse they are in a pool of items.
Then items are withdrawn from the warehouse pool using pick lists
that are generated by production or store stocking needs quite
independently from the orders. But you seem to be using 'request'
for an order and 'order' for a pick list.
I am also concerned about the various Line Item (LigneXxxx)
subclasses being transformed into one another. Subtype migration
was popular in the '80s, but today it is very rarely used. In your
situation I don't see any need for it because I am suspicious that
your 'request' and 'order' are entirely different things and don't
really share properties. (Car and House objects may both have a
'color' attribute, but those attributes have nothing to do with
each other semantically and it very rarely makes sense to have Car
and House be subclasses of some superclass.)
Your description below seems to describe the relatively narrow
suite of functionality for moving products in and out of a
warehouse. IOW, it would be a subset of overall inventory control.
However, your Produits object seems to have a lot more
functionality that that. It seems to be doing general inventory
management, like calculating minimum and maximum stock levels,
which would require forecasting. In fact, Produits seems to have a
lot of attributes that have nothing at all to do with warehousing.
This suggests strongly to me that this application needs better
application partitioning into subsystems. If the subsystem you are
trying to model deals only with warehousing, then the objects in
that subsystem should deal only with warehousing. Thus a Product
is going to look quite different in a Warehouse subsystem than it
would in an Inventory Forecasting subsystem.
Finally, some detailed issues...
Hello everyone,
I'm new in the uml world and i have to develop a warehouse
management software for my company. Here's the application
description:
- The storekeeper must establish a purchase request and the system
have to print a copy of it with barecode.
- The purchasing manager should generate the order by scanning the
barecode of the purshare order(s) concerned. the system should
print 2 copies of the order with a bar code. an order for the
warehouse, the other for the supplier.
I don't understand these steps. Why wouldn't the store keeper's pick
list go directly to the warehouse? The store keeper is going to get
his items from the pool that is already in the warehouse from past
vendor purchase orders. If the warehouse is out of the item, the
store keeper gets an out-of-stock message. It is the purchasing
manager's job to anticipate the store keeper's needs by generating
purchase requests to vendors before the pick lists are generated so
that the warehouse has the stock available. IOW, the purchasing
manager has to forecast store keeper demand.
- Upon receipt of the goods, the warehouseman shall
generate a receipt based on information from the order form.
Labels will be printed and then glued to the packages received.
This implies these packages will go as-is to the store keeper. That
is not the way warehouses work. When the goods come into the
warehouse, they go into the warehouse's general inventory. When a
store keeper needs to fill his shelves, a pick list request is sent
to the warehouse and whatever items the store keeper needs are
pulled from inventory.
Note that if the store keeper gets an out-of-stock response, all
that means is that the store keeper's pick list gets highest
priority for filling when the items do come into the warehouse. In
addition, when the warehouse gets low on inventory, the purchasing
manager will be notified so new vendor orders can be generated to
replenish the warehouse stock so that store keepers don't get a lot
of out-of-stock messages.
- When the storekeeper wants to deliver a package to
the production, it must scan the bar code on the label concerned.
I'm not sure what you mean by "deliver...to the production". Do you
mean the item is sold to a store customer and scanning the bar code
at the register informs the purchasing manager that store stocks are
going down, which the purchasing manager uses to forecast demand?
The warehouseman may issue a delivery order to the
supplier in case of non-compliant products.
If non-compliant means defective, spoiled, wrong model, etc., then
that notification would go to the purchasing manager. Warehousemen
fetch and carry; they don't deal with vendors. This get back to the
point above about application partitioning. The business needs to
keep different areas of responsibility simple and self-contained.
The software needs to emulate that. (If the business doesn't do
that, it will pay for it because the software will be less reliable
and more difficult to maintain.)
The warehouse will receive a product from production
when not using it (sections of the plant).
You use 'store keeper' above, which implies a retail business. Here,
though, you are talking about a manufacturing facility. Generally
retailing and manufacturing are very different business and often
need different inventory control software. (Though the warehousing
subset of functionality is often the same because the warehouse is
just moving things.)
--
Life is the only flaw in an otherwise perfect nonexistence
-- Schopenhauer
Imagine how much more difficult physics would be if electrons had feelings
-- Richard Feynman
Rene Descartes went into a bar. The bartender asked if he would like a drink. Descartes said, "I think not," and disappeared.
H. S. Lahman
H.la...@verizon.net
software blog: http://pathfinderpeople.blogs.com/hslahman/index.html
software book: Model Based Development, Addison-Wesley, 2011
geology book: The Evolution and Utilization of Marine Resources, MIT Press, 1972