Changeset 436


Ignore:
Timestamp:
Mar 8, 2010, 4:37:12 PM (14 years ago)
Author:
gav
Message:

Change InventoryItem to have a preferred and many alternate suppliers and manufacturers.
Remove reverse InventoryItem references from Supplier and Manufacture domain classes.
InventoryCsvService updated.

Location:
trunk/grails-app
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/domain/Manufacturer.groovy

    r402 r436  
    66
    77    static hasMany = [contacts: Contact,
    8                                     addresses: Address,
    9                                     inventoryItems: InventoryItem]
     8                                    addresses: Address]
    109
    11     static belongsTo = [InventoryItem]
     10//     static belongsTo = []
    1211
    1312    static constraints = {
  • trunk/grails-app/domain/Supplier.groovy

    r402 r436  
    66
    77    static hasMany = [contacts: Contact,
    8                                     addresses: Address,
    9                                     inventoryItems: InventoryItem]
     8                                    addresses: Address]
    109
    11     static belongsTo = [InventoryItem]
     10//     static belongsTo = []
    1211
    1312    static constraints = {
  • trunk/grails-app/services/InventoryCsvService.groovy

    r427 r436  
    5555            def line = []
    5656            def lineNumber = 0
    57             def maxNumberOfColumns = 23
     57            def maxNumberOfColumns = 25
    5858            def inventoryParams = [:]
    5959            def inventoryProperties = ["name", "description", "comment", "unitsInStock", "reorderPoint", "recommendedReorderPoint",
     
    6161                                                        "enableReorder", "inventoryLocation", "inventoryStore", "site",
    6262                                                        "inventoryGroup", "inventoryType", "averageDeliveryTime", "averageDeliveryPeriod",
    63                                                         "suppliersPartNumber", "suppliers",
    64                                                         "manufacturersPartNumber", "manufacturers", "alternateItems", "spareFor"]
     63                                                        "suppliersPartNumber", "preferredSupplier", "alternateSuppliers",
     64                                                        "manufacturersPartNumber", "preferredManufacturer", "alternateManufacturers",
     65                                                        "alternateItems", "spareFor"]
    6566
    6667            def siteInstance
    67             def supplierInstance
     68            def alternateSupplierInstance
     69            def preferredSupplierInstance
    6870            def supplierTypeInstance
    6971            def supplierTypeUnknown = SupplierType.get(1)
    7072            def spareForInstance
    7173            def alternateItemInstance
    72             def manufacturerInstance
     74            def preferredManufacturerInstance
     75            def alternateManufacturerInstance
    7376            def manufacturerTypeInstance
    7477            def manufacturerTypeUnknown = ManufacturerType.get(1)
     
    8184            def averageDeliveryPeriodInstance
    8285
    83             def tempSuppliers = []
     86            def tempPreferredSupplierItemAndType = ''
     87            def tempPreferredSupplierItem = ''
     88            def tempPreferredSupplierType = ''
     89
     90            def tempAlternateSuppliers = []
    8491            def tempSupplierItem = ''
    8592            def tempSupplierType = ''
    8693            def tempSupplierItemAndType = []
    87             def tempManufacturers = []
     94
     95            def tempPreferredManufacturerItemAndType = ''
     96            def tempPreferredManufacturerItem = ''
     97            def tempPreferredManufacturerType = ''
     98
     99            def tempAlternateManufacturers = []
    88100            def tempManufacturerItem = ''
    89101            def tempManufacturerType = ''
     
    258270                }
    259271
    260                 // Manufacturers.
    261                 tempManufacturers = parseInputList(inventoryParams.manufacturers)
     272                // Preferred Manufacturer
     273                if(inventoryParams.preferredManufacturer) {
     274                    tempPreferredManufacturerItemAndType = parseItemAndType(inventoryParams.preferredManufacturer)
     275                    tempPreferredManufacturerItem = WordUtils.capitalize(tempPreferredManufacturerItemAndType[0])
     276
     277                    preferredManufacturerInstance = Manufacturer.findByName(tempPreferredManufacturerItem)
     278                    if(!preferredManufacturerInstance) {
     279
     280                        // Manufacturer Type.
     281                        if(tempPreferredManufacturerItemAndType.size == 2) {
     282                            tempPreferredManufacturerType = WordUtils.capitalizeFully(tempPreferredManufacturerItemAndType[1])
     283                            manufacturerTypeInstance = ManufacturerType.findByName(tempPreferredManufacturerType)
     284                        }
     285                        else
     286                            manufacturerTypeInstance = manufacturerTypeUnknown
     287                        if(!manufacturerTypeInstance) {
     288                            log.error "Failed to find preferred manufacturer type on line: " + lineNumber
     289                            return fail(code: "inventory.import.failure", args: [lineNumber, logFileLink])
     290                        }
     291
     292                        preferredManufacturerInstance = new Manufacturer(name: tempPreferredManufacturerItem,
     293                                                                                                            supplierType: manufacturerTypeInstance)
     294                        if(!preferredManufacturerInstance.save()) {
     295                            log.error "Failed to create preferred manufacturer on line: " + lineNumber
     296                            return fail(code: "inventory.import.failure", args: [lineNumber, logFileLink])
     297                        }
     298                    }
     299                }
     300                else
     301                    preferredManufacturerInstance = null
     302
     303                // Alternate Manufacturers.
     304                tempAlternateManufacturers = parseInputList(inventoryParams.manufacturers)
    262305                inventoryParams.manufacturers = []
    263306
    264                 for(tempManufacturer in tempManufacturers) {
     307                for(tempManufacturer in tempAlternateManufacturers) {
    265308                    tempManufacturerItemAndType = parseItemAndType(tempManufacturer)
    266309                    tempManufacturerItem = WordUtils.capitalizeFully(tempManufacturerItemAndType[0])
     
    292335                }
    293336
    294                 // Suppliers.
    295                 tempSuppliers = parseInputList(inventoryParams.suppliers)
    296                 inventoryParams.suppliers = []
    297 
    298                 for(tempSupplier in tempSuppliers) {
     337                // Preferred Supplier
     338                if(inventoryParams.preferredSupplier) {
     339                    tempPreferredSupplierItemAndType = parseItemAndType(inventoryParams.preferredSupplier)
     340                    tempPreferredSupplierItem = WordUtils.capitalize(tempPreferredSupplierItemAndType[0])
     341
     342                    preferredSupplierInstance = Supplier.findByName(tempPreferredSupplierItem)
     343                    if(!preferredSupplierInstance) {
     344
     345                        // SupplierType.
     346                        if(tempPreferredSupplierItemAndType.size == 2) {
     347                            tempPreferredSupplierType = WordUtils.capitalizeFully(tempPreferredSupplierItemAndType[1])
     348                            supplierTypeInstance = SupplierType.findByName(tempPreferredSupplierType)
     349                        }
     350                        else
     351                            supplierTypeInstance = supplierTypeUnknown
     352                        if(!supplierTypeInstance) {
     353                            log.error "Failed to find preferred supplier type on line: " + lineNumber
     354                            return fail(code: "inventory.import.failure", args: [lineNumber, logFileLink])
     355                        }
     356
     357                        preferredSupplierInstance = new Supplier(name: tempPreferredSupplierItem,
     358                                                                                            supplierType: supplierTypeInstance)
     359                        if(!preferredSupplierInstance.save()) {
     360                            log.error "Failed to create preferred supplier on line: " + lineNumber
     361                            return fail(code: "inventory.import.failure", args: [lineNumber, logFileLink])
     362                        }
     363                    }
     364                }
     365                else
     366                    preferredSupplierInstance = null
     367
     368                // Alternate Suppliers.
     369                tempAlternateSuppliers = parseInputList(inventoryParams.alternateSuppliers)
     370                inventoryParams.alternateSuppliers = []
     371
     372                for(tempSupplier in tempAlternateSuppliers) {
    299373                    tempSupplierItemAndType = parseItemAndType(tempSupplier)
    300374                    tempSupplierItem = WordUtils.capitalizeFully(tempSupplierItemAndType[0])
    301375
    302                     supplierInstance = Supplier.findByName(tempSupplierItem)
    303                     if(!supplierInstance) {
     376                    alternateSupplierInstance = Supplier.findByName(tempSupplierItem)
     377                    if(!alternateSupplierInstance) {
    304378
    305379                        // SupplierType.
     
    311385                            supplierTypeInstance = supplierTypeUnknown
    312386                        if(!supplierTypeInstance) {
    313                             log.error "Failed to find supplier type on line: " + lineNumber
    314                             return fail(code: "inventory.import.failure", args: [lineNumber, logFileLink])
    315                         }
    316 
    317                         supplierInstance = new Supplier(name: tempSupplierItem,
     387                            log.error "Failed to find alternate supplier type on line: " + lineNumber
     388                            return fail(code: "inventory.import.failure", args: [lineNumber, logFileLink])
     389                        }
     390
     391                        alternateSupplierInstance = new Supplier(name: tempSupplierItem,
    318392                                                                            supplierType: supplierTypeInstance)
    319                         if(!supplierInstance.save()) {
    320                             log.error "Failed to create suppliers on line: " + lineNumber
    321                             return fail(code: "inventory.import.failure", args: [lineNumber, logFileLink])
    322                         }
    323                     }
    324 
    325                     inventoryParams.suppliers.add(supplierInstance)
     393                        if(!alternateSupplierInstance.save()) {
     394                            log.error "Failed to create alternate suppliers on line: " + lineNumber
     395                            return fail(code: "inventory.import.failure", args: [lineNumber, logFileLink])
     396                        }
     397                    }
     398
     399                    inventoryParams.suppliers.add(alternateSupplierInstance)
    326400                }
    327401
     
    373447                inventoryParams.unitOfMeasure = unitOfMeasureInstance
    374448                inventoryParams.averageDeliveryPeriod = averageDeliveryPeriodInstance
     449                inventoryParams.preferredSupplier = preferredSupplierInstance
     450                inventoryParams.preferredManufacturer = preferredManufacturerInstance
    375451
    376452                // Name.
     
    469545                                        "Consumable",
    470546                                        "7", "Week(s)",
    471                                         "123", "Multi Distributors1@OEM; Multi Distributors2@Local",
    472                                         "321", "Mega Manufacturer1@OEM;Mega Manufacturer2@Alternate",
     547                                        "123", "Multi Supplier@Local",
     548                                        "Multi Distributors1@OEM; Multi Distributors2@Local",
     549                                        "321", "Master Manufacturer@OEM",
     550                                        "Mega Manufacturer1@OEM;Mega Manufacturer2@Alternate",
    473551                                        "2204E-2RS", ""
    474552                                        ] as String[])
     
    483561                                        "Consumable",
    484562                                        "2", "Month(s)",
    485                                         "456KL", "Multi Distributors1; Multi Distributors2",
    486                                         "654OP", "Mega Manufacturer1;Mega Manufacturer2",
     563                                        "456KL", "Multi Supplier",
     564                                        "Multi Distributors1; Multi Distributors2",
     565                                        "654OP", "Master Manufacturer",
     566                                        "Mega Manufacturer1;Mega Manufacturer2",
    487567                                        "", ""
    488568                                        ] as String[])
     
    494574    /**
    495575    * Build complete inventory for export.
    496     * @param inventoryItemList The list of inventory items to build..
     576    * @param inventoryItemList The list of inventory items to build.
    497577    * @returns The inventory as a String in csv format.
    498578    */
     
    528608            row.add(inventoryItem.suppliersPartNumber)
    529609
    530             row.add( inventoryItem.suppliers.sort { p1, p2 ->
     610            if(inventoryItem.preferredSupplier)
     611                row.add( inventoryItem.preferredSupplier.name + "@" + inventoryItem.preferredSupplier.supplierType )
     612            else
     613                row.add('')
     614
     615            row.add( inventoryItem.alternateSuppliers.sort { p1, p2 ->
    531616                p1.name.compareToIgnoreCase(p2.name)
    532617            }.collect { it.name + "@" + it.supplierType }.join(';') )
     
    534619            row.add(inventoryItem.manufacturersPartNumber)
    535620
    536             row.add(inventoryItem.manufacturers.sort { p1, p2 ->
     621            if(inventoryItem.preferredManufacturer)
     622                row.add( inventoryItem.preferredManufacturer.name + "@" + inventoryItem.preferredManufacturer.manufacturerType )
     623            else
     624                row.add('')
     625
     626            row.add(inventoryItem.alternateManufacturers.sort { p1, p2 ->
    537627                p1.name.compareToIgnoreCase(p2.name)
    538628            }.collect { it.name + "@" + it.manufacturerType }.join(';'))
     
    556646            ["Name*", "Description", "Comment", "Units In Stock", "Reorder Point*", "Recommended Reorder Point", "Unit Of Measure*",
    557647            "Estimated Unit Price", "Currency", "Enable Reorder", "Location*", "Store*", "Site*", "Group*", "Type*",
    558             "averageDeliveryTime", "averageDeliveryPeriod", "Supplier's Part Number", "Supplier",
    559             "Manufacturer's Part Number", "Manufacturer", "Alternate Item", "Spare For"]
     648            "Average Delivery Time", "Average Delivery Period", "Supplier's Part Number", "Preferred Supplier", "Alternate Suppliers",
     649            "Manufacturer's Part Number", "Preferred Manufacturer", "Alternate Manufacturers", "Alternate Item", "Spare For"]
    560650    }
    561651
  • trunk/grails-app/views/manufacturerDetailed/edit.gsp

    r402 r436  
    9595                                </td>
    9696                            </tr>
    97                    
    98                         <tr class="prop">
    99                             <td valign="top" class="name">Inventory Items:</td>
    100                            
    101                             <td  valign="top" style="text-align:left;" class="value">
    102                                 <ul>
    103                                 <g:each var="i" in="${manufacturerInstance.inventoryItems}">
    104                                     <li><g:link controller="inventoryItemDetailed" action="show" id="${i.id}">${i?.encodeAsHTML()}</g:link></li>
    105                                 </g:each>
    106                                 </ul>
    107                             </td>
    108                            
    109                         </tr>
    11097                       
    11198                        </tbody>
  • trunk/grails-app/views/manufacturerDetailed/show.gsp

    r402 r436  
    8282                           
    8383                        </tr>
    84                    
    85                         <tr class="prop">
    86                             <td valign="top" class="name">Inventory Items:</td>
    87                            
    88                             <td  valign="top" style="text-align:left;" class="value">
    89                                 <ul>
    90                                 <g:each var="i" in="${manufacturerInstance.inventoryItems}">
    91                                     <li><g:link controller="inventoryItemDetailed" action="show" id="${i.id}">${i?.encodeAsHTML()}</g:link></li>
    92                                 </g:each>
    93                                 </ul>
    94                             </td>
    95                            
    96                         </tr>
    97                    
     84
    9885                    </tbody>
    9986                </table>
  • trunk/grails-app/views/supplierDetailed/edit.gsp

    r402 r436  
    9595                                </td>
    9696                            </tr>
    97                            
    98                             <tr class="prop">
    99                                 <td valign="top" class="name">Inventory Items:</td>
    100                                
    101                                 <td  valign="top" style="text-align:left;" class="value">
    102                                     <ul>
    103                                     <g:each var="i" in="${supplierInstance.inventoryItems}">
    104                                         <li><g:link controller="inventoryItemDetailed" action="show" id="${i.id}">${i?.encodeAsHTML()}</g:link></li>
    105                                     </g:each>
    106                                     </ul>
    107                                 </td>
    108                                
    109                             </tr>
    11097                       
    11198                        </tbody>
  • trunk/grails-app/views/supplierDetailed/show.gsp

    r402 r436  
    8181                           
    8282                        </tr>
    83                    
    84                         <tr class="prop">
    85                             <td valign="top" class="name">Inventory Items:</td>
    86                            
    87                             <td  valign="top" style="text-align:left;" class="value">
    88                                 <ul>
    89                                 <g:each var="i" in="${supplierInstance.inventoryItems}">
    90                                     <li><g:link controller="inventoryItemDetailed" action="show" id="${i.id}">${i?.encodeAsHTML()}</g:link></li>
    91                                 </g:each>
    92                                 </ul>
    93                             </td>
    94                            
    95                         </tr>
    96                    
     83
    9784                    </tbody>
    9885                </table>
Note: See TracChangeset for help on using the changeset viewer.