source: trunk/grails-app/controllers/InventoryItemPurchaseDetailedController.groovy @ 594

Last change on this file since 594 was 594, checked in by gav, 14 years ago

Remember inventoryItemPurchase search and sort, as per ticket #71

File size: 16.0 KB
Line 
1import org.codehaus.groovy.grails.plugins.springsecurity.Secured
2import org.codehaus.groovy.grails.commons.ConfigurationHolder
3import com.zeddware.grails.plugins.filterpane.FilterUtils
4
5@Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_InventoryManager'])
6class InventoryItemPurchaseDetailedController extends BaseController {
7
8    def authService
9    def filterService
10    def exportService
11    def dateUtilService
12    def inventoryPurchaseService
13
14    def index = {
15        redirect(action:'search', params:params)
16    }
17
18    // the delete, save and update actions only accept POST requests
19    static allowedMethods = [delete:'POST', save:'POST', update:'POST']
20
21    def setSearchParamsMax = {
22        def max = 1000
23        if(params.newMax.isInteger()) {
24            def i = params.newMax.toInteger()
25            if(i > 0 && i <= max)
26                session.inventoryItemPurchaseSearchParamsMax = params.newMax
27            if(i > max)
28                session.inventoryItemPurchaseSearchParamsMax = max
29        }
30        forward(action: 'search', params: params)
31    }
32
33    def search = {
34
35        if(session.inventoryItemPurchaseSearchParamsMax)
36            params.max = session.inventoryItemPurchaseSearchParamsMax
37
38        // Protect filterPane.
39        params.max = Math.min( params.max ? params.max.toInteger() : 10,  1000 )
40        params.offset = params.offset?.toInteger() ?: 0
41
42        def inventoryItemPurchaseList = []
43        def inventoryItemPurchaseTotal
44        def filterParams = com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params)
45        def isFilterApplied = FilterUtils.isFilterApplied(params)
46
47        // Restore search unless a new search is being requested.
48        if(!params.quickSearch && !filterParams) {
49            if(session.inventoryItemPurchaseQuickSearch)
50                params.quickSearch = session.inventoryItemPurchaseQuickSearch
51            else if(session.inventoryItemPurchaseSearchFilterParams) {
52                session.inventoryItemPurchaseSearchFilterParams.each() { params[it.key] = it.value }
53                params.filter = session.inventoryItemPurchaseSearchFilter
54                isFilterApplied = FilterUtils.isFilterApplied(params)
55            }
56        }
57
58        // Remember sort if supplied, otherwise try to restore.
59        if(params.sort && params.order) {
60            // Reset to defaultSort if requested.
61            if(params.sort == 'defaultSort') {
62                params.sort = null
63                params.order = null
64                session.removeAttribute("inventoryItemPurchaseSearchSort")
65                session.removeAttribute("inventoryItemPurchaseSearchOrder")
66            }
67            else {
68                session.inventoryItemPurchaseSearchSort = params.sort
69                session.inventoryItemPurchaseSearchOrder = params.order
70            }
71        }
72        else if(session.inventoryItemPurchaseSearchSort && session.inventoryItemPurchaseSearchOrder) {
73            params.sort = session.inventoryItemPurchaseSearchSort
74            params.order = session.inventoryItemPurchaseSearchOrder
75        }
76        else {
77            params.sort = "purchaseOrderNumber"
78            params.order = "desc"
79        }
80
81        if(isFilterApplied) {
82            // filterPane:
83            params.sort = params.sort ?: "id"
84            params.order = params.order ?: "desc"
85            //if(params.sort == "attentionFlag") // See ticket #64 in Trac.
86                //params.sort = "id"
87
88            // Call filterService.
89            inventoryItemPurchaseList = filterService.filter( params, InventoryItemPurchase )
90            inventoryItemPurchaseTotal = filterService.count( params, InventoryItemPurchase )
91            filterParams = com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params)
92            // Remember search.
93            session.inventoryItemPurchaseSearchFilterParams = new LinkedHashMap(filterParams)
94            session.inventoryItemPurchaseSearchFilter = new LinkedHashMap(params.filter)
95            session.removeAttribute("inventoryItemPurchaseQuickSearch")
96        }
97        else {
98            // Quick Search:
99
100            if(params.quickSearch == "searchAllOrders") {
101                inventoryItemPurchaseList = InventoryItemPurchase.findAllByInventoryItemPurchaseType(InventoryItemPurchaseType.read(1),
102                                                                                                                                                                        [max:params.max,
103                                                                                                                                                                        offset:params.offset,
104                                                                                                                                                                        sort:params.sort,
105                                                                                                                                                                        order:params.order])
106                if(inventoryItemPurchaseList.size() > 0) { params.message = "All Orders." }
107                else { params.message = "No orders found." }
108            }
109            else if(params.quickSearch == "searchAllReceived") {
110                inventoryItemPurchaseList = InventoryItemPurchase.findAllByInventoryItemPurchaseTypeOrInventoryItemPurchaseType(InventoryItemPurchaseType.read(2),
111                                                                                                                                                                                                                            InventoryItemPurchaseType.read(3),
112                                                                                                                                                                                                                            [max:params.max,
113                                                                                                                                                                                                                            offset:params.offset,
114                                                                                                                                                                                                                            sort:params.sort,
115                                                                                                                                                                                                                            order:params.order])
116                if(inventoryItemPurchaseList.size() > 0) { params.message = "All Received Complete." }
117                else { params.message = "No orders found." }
118            }
119            else {
120                //Default:
121                inventoryItemPurchaseList = InventoryItemPurchase.list(max:params.max,
122                                                                                                                offset:params.offset,
123                                                                                                                sort:params.sort,
124                                                                                                                order:params.order)
125                if(inventoryItemPurchaseList.size() > 0) { params.message = "All Purchases." }
126                else { params.message = "No orders found." }
127            }
128
129            inventoryItemPurchaseTotal = inventoryItemPurchaseList.size()
130            filterParams.quickSearch = params.quickSearch
131            // Remember search.
132            session.removeAttribute("inventoryItemPurchaseSearchFilterParams")
133            session.removeAttribute("inventoryItemPurchaseSearchFilter")
134            session.inventoryItemPurchaseQuickSearch = params.quickSearch
135        }
136
137        // export plugin:
138        if(params?.format && params.format != "html") {
139
140            def dateFmt = { date ->
141                formatDate(format: "EEE, dd-MMM-yyyy", date: date)
142            }
143
144            String title
145            if(params.quickSearch)
146                title = "${params.quickSearch} inventory purchases."
147            else
148                title = "Filtered inventory purchases."
149
150            response.contentType = ConfigurationHolder.config.grails.mime.types[params.format]
151            response.setHeader("Content-disposition", "attachment; filename=Purchases.${params.extension}")
152            List fields = ["purchaseOrderNumber", "dateEntered", "costCode", "quantity", "orderValueAmount", "invoiceNumber",
153                                    "inventoryItemPurchaseType"]
154            Map labels = ["purchaseOrderNumber": "Order Number", "dateEntered": "Date", "costCode": "Cost Code",
155                                    "quantity": "Quantity", "orderValueAmount": "Order \$", "invoiceNumber": "Invoice Number",
156                                    "inventoryItemPurchaseType": "Type"]
157            Map formatters = [ dateEntered: dateFmt]
158            Map parameters = [title: title, separator: ","]
159
160            exportService.export(params.format, response.outputStream, inventoryItemPurchaseList, fields, labels, formatters, parameters)
161        }
162
163        // Add some basic params to filterParams.
164        filterParams.max = params.max
165        filterParams.offset = params.offset?.toInteger() ?: 0
166        filterParams.sort = params.sort ?: "purchaseOrderNumber"
167        filterParams.order = params.order ?: "desc"
168
169        return[ inventoryItemPurchaseList: inventoryItemPurchaseList,
170                inventoryItemPurchaseTotal: inventoryItemPurchaseTotal,
171                filterParams: filterParams ]
172
173    } // end search()
174
175    def show = {
176        def inventoryItemPurchaseInstance = InventoryItemPurchase.read( params.id )
177
178        if(!inventoryItemPurchaseInstance) {
179            flash.message = "InventoryItemPurchase not found with id ${params.id}"
180            redirect(controller: 'inventoryItemDetailed', action:'search')
181        }
182        else { return [ inventoryItemPurchaseInstance : inventoryItemPurchaseInstance ] }
183    }
184
185    def delete = {
186        def result = inventoryPurchaseService.delete(params)
187
188        if(!result.error) {
189            flash.message = g.message(code: "default.delete.success", args: ["InventoryItemPurchase", params.id])
190            redirect(controller: 'inventoryItemDetailed',
191                            action: 'show',
192                            id: result.inventoryItemId,
193                            params: [showTab: "showPurchasingTab"])
194            return
195        }
196
197        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
198
199        if(result.error.code == "default.not.found") {
200            redirect(controller: 'inventoryItemDetailed', action: 'search')
201            return
202        }
203
204        redirect(action:show, id: params.id)
205    }
206
207    def edit = {
208        def result = inventoryPurchaseService.edit(params)
209
210        if(!result.error)
211            return [ inventoryItemPurchaseInstance : result.inventoryItemPurchaseInstance ]
212
213        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
214        redirect(controller: 'inventoryItemDetailed', action:'search', params:params)
215    }
216
217    def update = {
218        def result = inventoryPurchaseService.update(params)
219
220        if(!result.error) {
221            flash.message = g.message(code: "default.update.success", args: ["Inventory Purchase", params.id])
222            redirect(action:show, id: params.id)
223            return
224        }
225
226        if(result.error.code == "default.not.found") {
227            flash.message = g.message(code: result.error.code, args: result.error.args)
228            redirect(controller: 'inventoryItemDetailed', action:'search', params:params)
229            return
230        }
231
232        render(view:'edit', model:[inventoryItemPurchaseInstance: result.inventoryItemPurchaseInstance.attach()])
233    }
234
235    def create = {
236        def inventoryItemPurchaseInstance = new InventoryItemPurchase()
237        inventoryItemPurchaseInstance.properties = params
238
239        if(!inventoryItemPurchaseInstance.inventoryItem) {
240            flash.message = "Please select an inventory item then the 'purchasing' tab."
241            redirect(controller: 'inventoryItemDetailed', action: 'search')
242            return
243        }
244
245        return ['inventoryItemPurchaseInstance':inventoryItemPurchaseInstance]
246    }
247
248    def save = {
249        def result = inventoryPurchaseService.save(params)
250
251        if(!result.error) {
252            flash.message = g.message(code: "default.create.success", args: ["Inventory Purchase", ''])
253            redirect(controller: 'inventoryItemDetailed',
254                            action: 'show',
255                            id: result.inventoryItemId,
256                            params: [showTab: "showPurchasingTab"])
257            return
258        }
259
260        render(view:'create', model:['inventoryItemPurchaseInstance': result.inventoryItemPurchaseInstance])
261    }
262
263    def receive = {
264        def inventoryItemPurchaseInstance = InventoryItemPurchase.read( params.id )
265
266        if(!inventoryItemPurchaseInstance) {
267            flash.message = "InventoryItemPurchase not found with id ${params.id}"
268            redirect(controller: 'inventoryItemDetailed', action:'search')
269            return
270        }
271
272        inventoryItemPurchaseInstance.properties = params
273        def calcQuantities = inventoryPurchaseService.calcQuantities(inventoryItemPurchaseInstance)
274        inventoryItemPurchaseInstance.quantity = calcQuantities.thisOrderRemaining
275        return ['inventoryItemPurchaseInstance':inventoryItemPurchaseInstance,
276                        'orderId': inventoryItemPurchaseInstance.id]
277    }
278
279    def receiveSave = {
280        def result = inventoryPurchaseService.receiveSave(params)
281
282        if(!result.error) {
283            flash.message = g.message(code: "default.create.success", args: ["Inventory Purchase", ''])
284            redirect(controller: 'inventoryItemDetailed',
285                            action: 'show',
286                            id: result.inventoryItemId,
287                            params: [showTab: "showPurchasingTab"])
288            return
289        }
290
291        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
292
293        if(result.error.code == "default.not.found") {
294            redirect(controller: 'inventoryItemDetailed', action: 'search')
295            return
296        }
297
298        render(view:'receive',
299                        model:['inventoryItemPurchaseInstance': result.inventoryItemPurchaseInstance,
300                                    'orderId': result.orderId])
301    }
302
303    def approveInvoicePayment = {
304        def inventoryItemPurchaseInstance = InventoryItemPurchase.read( params.id )
305
306        if(!inventoryItemPurchaseInstance) {
307            flash.message = "InventoryItemPurchase not found with id ${params.id}"
308            redirect(controller: 'inventoryItemDetailed', action:'search')
309            return
310        }
311
312        inventoryItemPurchaseInstance.properties = params
313        return ['inventoryItemPurchaseInstance':inventoryItemPurchaseInstance,
314                        'orderId': inventoryItemPurchaseInstance.id]
315    }
316
317    def approveInvoicePaymentSave = {
318        def result = inventoryPurchaseService.approveInvoicePaymentSave(params)
319
320        if(!result.error) {
321            flash.message = g.message(code: "default.create.success", args: ["Inventory Purchase", ''])
322            redirect(controller: 'inventoryItemDetailed',
323                            action: 'show',
324                            id: result.inventoryItemId,
325                            params: [showTab: "showPurchasingTab"])
326            return
327        }
328
329        if(result.error.code == "default.not.found") {
330            flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
331            redirect(controller: 'inventoryItemDetailed', action: 'search')
332            return
333        }
334
335        render(view:'approveInvoicePayment',
336                    model:['inventoryItemPurchaseInstance': result.inventoryItemPurchaseInstance,
337                                    'orderId': result.orderId])
338    }
339}
Note: See TracBrowser for help on using the repository browser.