Issue #23507:initial commit
[xtuple] / foundation-database / public / functions / copyitemsite.sql
1 CREATE OR REPLACE FUNCTION copyItemSite(pItemsiteid INTEGER,
2                                         pDestWhsid INTEGER) RETURNS INTEGER AS $$
3 -- Copyright (c) 1999-2014 by OpenMFG LLC, d/b/a xTuple.
4 -- See www.xtuple.com/CPAL for the full text of the software license.
5
6 BEGIN
7
8   RETURN copyItemSite(pItemsiteid, pDestWhsid, NULL);
9
10 END;
11 $$ LANGUAGE plpgsql;
12
13
14 CREATE OR REPLACE FUNCTION copyItemSite(pItemsiteid INTEGER,
15                                         pDestWhsid INTEGER,
16                                         pDestItemid INTEGER) RETURNS INTEGER AS $$
17 -- Copyright (c) 1999-2014 by OpenMFG LLC, d/b/a xTuple.
18 -- See www.xtuple.com/CPAL for the full text of the software license.
19 DECLARE
20   _destwhs  whsinfo%ROWTYPE;
21   _new    itemsite%ROWTYPE;
22   _supplywarehousid INTEGER := NULL;
23
24 BEGIN
25   -- make a copy of the old itemsite
26   SELECT * INTO _new
27   FROM itemsite
28   WHERE (itemsite_id=pItemsiteid);
29   IF (NOT FOUND) THEN
30     RETURN -1;
31   END IF;
32
33   -- if there is no dest warehouse then perhaps the user is manually copying it
34   IF (pDestWhsid IS NOT NULL) THEN
35     SELECT * INTO _destwhs
36     FROM whsinfo
37     WHERE (warehous_id=pDestWhsid);
38     IF (NOT FOUND) THEN
39       RETURN -2;
40     END IF;
41   END IF;
42
43   IF (NOT checkPrivilege('MaintainItemSites')) THEN
44     RETURN -3;
45   END IF;
46
47   SELECT itemsite_id INTO _new.itemsite_id
48   FROM itemsite
49   WHERE ((itemsite_item_id=COALESCE(pDestItemid, _new.itemsite_item_id))
50     AND  (itemsite_warehous_id=pDestWhsid OR
51     (itemsite_warehous_id IS NULL AND pDestWhsid IS NULL)));
52   IF (FOUND) THEN
53     RETURN _new.itemsite_id;
54   END IF;
55
56   -- find supply itemsite
57   IF (_new.itemsite_supply_itemsite_id IS NOT NULL) THEN
58     SELECT itemsite_warehous_id INTO _supplywarehousid
59     FROM itemsite
60     WHERE (itemsite_id=_new.itemsite_supply_itemsite_id);
61     IF (FOUND) THEN
62       SELECT itemsite_id INTO _new.itemsite_supply_itemsite_id
63       FROM itemsite
64       WHERE (itemsite_warehous_id=_supplywarehousid)
65         AND (itemsite_item_id=pDestItemid);
66     END IF;
67   END IF;
68
69   -- now override the things we know have to change
70   _new.itemsite_id                   := NEXTVAL('itemsite_itemsite_id_seq');
71   _new.itemsite_warehous_id          := pDestWhsid;
72   _new.itemsite_qtyonhand            := 0;
73   _new.itemsite_value                := 0;
74   _new.itemsite_datelastcount        := NULL;
75   _new.itemsite_datelastused         := NULL;
76   _new.itemsite_location_id          := -1;
77   _new.itemsite_recvlocation_id      := -1;
78   _new.itemsite_issuelocation_id     := -1;
79   _new.itemsite_location_dist        := FALSE;
80   _new.itemsite_recvlocation_dist    := FALSE;
81   _new.itemsite_issuelocation_dist   := FALSE;
82
83   IF (_destwhs.warehous_transit) THEN
84     _new.itemsite_reorderlevel         := 0;
85     _new.itemsite_ordertoqty         := 0;
86     _new.itemsite_soldranking        := NULL;
87     _new.itemsite_posupply           := FALSE;
88     _new.itemsite_wosupply           := FALSE;
89     _new.itemsite_loccntrl           := FALSE;
90     _new.itemsite_safetystock        := 0;
91     _new.itemsite_minordqty          := 0;
92     _new.itemsite_multordqty         := 0;
93     _new.itemsite_leadtime           := 0;
94     _new.itemsite_controlmethod      := 'R';
95     IF(_new.itemsite_costmethod='N') THEN
96       _new.itemsite_costmethod       := 'S';
97     END IF;
98     _new.itemsite_active             := TRUE;
99     -- ? _new.itemsite_plancode_id   := -1;
100     -- ? _new.itemsite_costcat_id    := -1;
101     _new.itemsite_eventfence         := 1;
102     _new.itemsite_sold               := FALSE;
103     _new.itemsite_stocked            := FALSE;
104     _new.itemsite_location_id        := -1;
105     _new.itemsite_useparams          := FALSE;
106     _new.itemsite_useparamsmanual    := FALSE;
107     _new.itemsite_createpr           := FALSE;
108     _new.itemsite_location           := NULL;
109     _new.itemsite_location_comments  := NULL;
110     _new.itemsite_notes              := 'Transit Warehouse';
111     _new.itemsite_createwo           := FALSE;
112     _new.itemsite_costcat_id         := _destwhs.warehous_costcat_id;
113     _new.itemsite_supply_itemsite_id := NULL;
114   END IF;
115
116   INSERT INTO itemsite (
117     itemsite_id,                     itemsite_item_id,
118     itemsite_warehous_id,            itemsite_qtyonhand,
119     itemsite_costmethod,             itemsite_value,
120     itemsite_reorderlevel,           itemsite_ordertoqty,
121     itemsite_cyclecountfreq,         itemsite_datelastcount,
122     itemsite_datelastused,
123     itemsite_posupply,               itemsite_wosupply,
124     itemsite_loccntrl,
125     itemsite_safetystock,            itemsite_minordqty,
126     itemsite_multordqty,             itemsite_leadtime,
127     itemsite_abcclass,               itemsite_issuemethod,
128     itemsite_controlmethod,          itemsite_active,
129     itemsite_plancode_id,            itemsite_costcat_id,
130     itemsite_eventfence,             itemsite_sold,
131     itemsite_stocked,                itemsite_freeze,
132     itemsite_location_id,
133     itemsite_useparams,              itemsite_useparamsmanual,
134     itemsite_soldranking,            itemsite_createpr,
135     itemsite_location,               itemsite_location_comments,
136     itemsite_notes,                  itemsite_perishable,
137     itemsite_autoabcclass,
138     itemsite_ordergroup,             itemsite_disallowblankwip,
139     itemsite_maxordqty,              itemsite_mps_timefence,
140     itemsite_createwo,               itemsite_warrpurc,
141     itemsite_autoreg,
142     itemsite_planning_type,          itemsite_supply_itemsite_id,
143     itemsite_createsopr,             itemsite_createsopo,
144     itemsite_dropship,
145     itemsite_recvlocation_id,        itemsite_issuelocation_id,
146     itemsite_location_dist,          itemsite_recvlocation_dist,
147     itemsite_issuelocation_dist
148   ) VALUES (
149     _new.itemsite_id,                COALESCE(pDestItemid, _new.itemsite_item_id),
150     _new.itemsite_warehous_id,         _new.itemsite_qtyonhand,
151     _new.itemsite_costmethod,        _new.itemsite_value,
152     _new.itemsite_reorderlevel,      _new.itemsite_ordertoqty,
153     _new.itemsite_cyclecountfreq,    _new.itemsite_datelastcount,
154     _new.itemsite_datelastused,
155     _new.itemsite_posupply,          _new.itemsite_wosupply,
156     _new.itemsite_loccntrl,
157     _new.itemsite_safetystock,         _new.itemsite_minordqty,
158     _new.itemsite_multordqty,        _new.itemsite_leadtime,
159     _new.itemsite_abcclass,          _new.itemsite_issuemethod,
160     _new.itemsite_controlmethod,     _new.itemsite_active,
161     _new.itemsite_plancode_id,         _new.itemsite_costcat_id,
162     _new.itemsite_eventfence,        _new.itemsite_sold,
163     _new.itemsite_stocked,           _new.itemsite_freeze,
164     _new.itemsite_location_id,
165     _new.itemsite_useparams,         _new.itemsite_useparamsmanual,
166     _new.itemsite_soldranking,         _new.itemsite_createpr,
167     _new.itemsite_location,          _new.itemsite_location_comments,
168     _new.itemsite_notes,             _new.itemsite_perishable,
169     _new.itemsite_autoabcclass,
170     _new.itemsite_ordergroup,        _new.itemsite_disallowblankwip,
171     _new.itemsite_maxordqty,         _new.itemsite_mps_timefence,
172     _new.itemsite_createwo,          _new.itemsite_warrpurc,
173     _new.itemsite_autoreg,
174     _new.itemsite_planning_type,     _new.itemsite_supply_itemsite_id,
175     _new.itemsite_createsopr,        _new.itemsite_createsopo,
176     _new.itemsite_dropship,
177     _new.itemsite_recvlocation_id,   _new.itemsite_issuelocation_id,
178     _new.itemsite_location_dist,     _new.itemsite_recvlocation_dist,
179     _new.itemsite_issuelocation_dist
180     );
181
182   RETURN _new.itemsite_id;
183 END;
184 $$ LANGUAGE plpgsql;