Version Notes
It is a stable version
Download this release
Release Info
Developer | Ray Zhang |
Extension | Amosoft_Dropship |
Version | 1.0.0 |
Comparing to | |
See all releases |
Version 1.0.0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Amosoft.php +19 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Inventory.php +19 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Inventory/Edit/Tab/Addvendorfield.php +99 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Inventory/Edit/Tab/Amosoftvendor.php +83 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Inventory/Edit/Tab/Vendortabhistory.php +30 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Inventory/Edit/Vendortab.php +37 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Inventory/Edit/Vendortabhistory.php +37 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Inventory/Grid.php +137 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Notification.php +107 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Ranking.php +62 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Ranking/Grid.php +87 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Sales/Order/View/Items.php +23 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Showhistory.php +39 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing.php +27 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing/Edit.php +67 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing/Edit/Form.php +26 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing/Edit/Tab/Form.php +69 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing/Edit/Tabs.php +32 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing/Grid.php +211 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing/History/Renderer/Action.php +30 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing/History/View.php +47 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing/History/View/Form.php +30 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing/History/View/Tabs.php +30 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/System/Config/Crontime.php +59 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/System/Config/Fieldset/Hint.php +44 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/System/Config/Helplink.php +18 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/System/Config/Singuplink.php +18 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/System/Config/Submitbutton.php +25 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/System/Config/Time.php +76 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Upload.php +110 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Upload/Bulkassign.php +182 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Upload/Edit/Button.php +22 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Upload/Edit/Form.php +63 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Vendorproductuploadhistory.php +142 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Widget/Grid/Column/Nameaction.php +29 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Widget/Grid/Column/Orderaction.php +27 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Widget/Grid/Column/Skuaction.php +34 -0
- app/code/local/Amosoft/Dropship/Block/Adminhtml/Widget/Grid/Column/Textaction.php +38 -0
- app/code/local/Amosoft/Dropship/Helper/Data.php +488 -0
- app/code/local/Amosoft/Dropship/Model/Amosoft.php +233 -0
- app/code/local/Amosoft/Dropship/Model/Api2/Createroleandrule.php +248 -0
- app/code/local/Amosoft/Dropship/Model/Api2/Inventory.php +19 -0
- app/code/local/Amosoft/Dropship/Model/Api2/Inventory/Rest.php +53 -0
- app/code/local/Amosoft/Dropship/Model/Api2/Inventory/Rest/Admin/V1.php +37 -0
- app/code/local/Amosoft/Dropship/Model/Api2/Inventory/Rest/Customer/V1.php +65 -0
- app/code/local/Amosoft/Dropship/Model/Api2/Inventory/Rest/Guest/V1.php +12 -0
- app/code/local/Amosoft/Dropship/Model/Api2/Product.php +18 -0
- app/code/local/Amosoft/Dropship/Model/Api2/Product/Rest.php +53 -0
- app/code/local/Amosoft/Dropship/Model/Api2/Product/Rest/Admin/V1.php +44 -0
- app/code/local/Amosoft/Dropship/Model/Api2/Product/Rest/Customer/V1.php +65 -0
- app/code/local/Amosoft/Dropship/Model/Api2/Product/Rest/Guest/V1.php +12 -0
- app/code/local/Amosoft/Dropship/Model/Carrier/Flatrateperproduct.php +65 -0
- app/code/local/Amosoft/Dropship/Model/Csvparser.php +265 -0
- app/code/local/Amosoft/Dropship/Model/Inventory.php +468 -0
- app/code/local/Amosoft/Dropship/Model/Inventorylog.php +17 -0
- app/code/local/Amosoft/Dropship/Model/Observer.php +508 -0
- app/code/local/Amosoft/Dropship/Model/Order/Api.php +312 -0
- app/code/local/Amosoft/Dropship/Model/Order/Dropship/Api.php +352 -0
- app/code/local/Amosoft/Dropship/Model/Order/Invoice.php +31 -0
- app/code/local/Amosoft/Dropship/Model/Orderitems.php +186 -0
- app/code/local/Amosoft/Dropship/Model/Ordersourcing.php +90 -0
- app/code/local/Amosoft/Dropship/Model/Productimport.php +596 -0
- app/code/local/Amosoft/Dropship/Model/Ranking.php +64 -0
- app/code/local/Amosoft/Dropship/Model/Rankinglog.php +18 -0
- app/code/local/Amosoft/Dropship/Model/Resource/Inventory.php +16 -0
- app/code/local/Amosoft/Dropship/Model/Resource/Inventory/Collection.php +20 -0
- app/code/local/Amosoft/Dropship/Model/Resource/Inventorylog.php +16 -0
- app/code/local/Amosoft/Dropship/Model/Resource/Inventorylog/Collection.php +20 -0
- app/code/local/Amosoft/Dropship/Model/Resource/Orderitems.php +58 -0
- app/code/local/Amosoft/Dropship/Model/Resource/Orderitems/Collection.php +20 -0
- app/code/local/Amosoft/Dropship/Model/Resource/Ordersourcing.php +52 -0
- app/code/local/Amosoft/Dropship/Model/Resource/Ordersourcing/Collection.php +20 -0
- app/code/local/Amosoft/Dropship/Model/Resource/Ranking.php +16 -0
- app/code/local/Amosoft/Dropship/Model/Resource/Ranking/Collection.php +20 -0
- app/code/local/Amosoft/Dropship/Model/Resource/Rankinglog.php +16 -0
- app/code/local/Amosoft/Dropship/Model/Resource/Rankinglog/Collection.php +20 -0
- app/code/local/Amosoft/Dropship/Model/Resource/Setup.php +72 -0
- app/code/local/Amosoft/Dropship/Model/Resource/Uploadvendor.php +16 -0
- app/code/local/Amosoft/Dropship/Model/Resource/Uploadvendor/Collection.php +20 -0
- app/code/local/Amosoft/Dropship/Model/Resource/Vendorimportlog.php +38 -0
- app/code/local/Amosoft/Dropship/Model/System/Config/Backend/Oudatedinventory/Email.php +61 -0
- app/code/local/Amosoft/Dropship/Model/System/Config/Backend/Sourcing/Cronbackorder.php +63 -0
- app/code/local/Amosoft/Dropship/Model/System/Config/Backend/Sourcing/Cronsourcing.php +61 -0
- app/code/local/Amosoft/Dropship/Model/System/Config/Backend/Uploadvendor/Cron.php +61 -0
- app/code/local/Amosoft/Dropship/Model/System/Config/Source/Attributecodes.php +37 -0
- app/code/local/Amosoft/Dropship/Model/System/Config/Source/Category.php +32 -0
- app/code/local/Amosoft/Dropship/Model/System/Config/Source/Ediqualifier.php +65 -0
- app/code/local/Amosoft/Dropship/Model/System/Config/Source/Optionvalues.php +62 -0
- app/code/local/Amosoft/Dropship/Model/System/Config/Source/Ranktype.php +21 -0
- app/code/local/Amosoft/Dropship/Model/System/Config/Source/Store.php +31 -0
- app/code/local/Amosoft/Dropship/Model/System/Config/Source/Time.php +33 -0
- app/code/local/Amosoft/Dropship/Model/System/Config/Source/Vendorlist.php +94 -0
- app/code/local/Amosoft/Dropship/Model/Uploadvendor.php +1540 -0
- app/code/local/Amosoft/Dropship/Model/Versions/Api.php +23 -0
- app/code/local/Amosoft/Dropship/Model/Versions/Api/V2.php +11 -0
- app/code/local/Amosoft/Dropship/controllers/Adminhtml/AmosoftController.php +264 -0
- app/code/local/Amosoft/Dropship/controllers/Adminhtml/InventoryController.php +81 -0
- app/code/local/Amosoft/Dropship/controllers/Adminhtml/RankingController.php +210 -0
- app/code/local/Amosoft/Dropship/controllers/Adminhtml/SourcingController.php +182 -0
- app/code/local/Amosoft/Dropship/controllers/Adminhtml/UploadController.php +389 -0
- app/code/local/Amosoft/Dropship/data/dropship_setup/data-install-1.0.3.php +55 -0
- app/code/local/Amosoft/Dropship/data/dropship_setup/data-upgrade-1.0.3-1.0.4.php +104 -0
- app/code/local/Amosoft/Dropship/data/dropship_setup/data-upgrade-1.0.4-1.0.5.php +49 -0
- app/code/local/Amosoft/Dropship/data/dropship_setup/data-upgrade-1.0.5-1.0.6.php +25 -0
- app/code/local/Amosoft/Dropship/etc/adminhtml.xml +99 -0
- app/code/local/Amosoft/Dropship/etc/api.xml +442 -0
- app/code/local/Amosoft/Dropship/etc/api2.xml +167 -0
- app/code/local/Amosoft/Dropship/etc/config.xml +310 -0
- app/code/local/Amosoft/Dropship/etc/jstranslator.xml +17 -0
- app/code/local/Amosoft/Dropship/etc/system.xml +247 -0
- app/code/local/Amosoft/Dropship/etc/wsdl.xml +184 -0
- app/code/local/Amosoft/Dropship/sql/dropship_setup/mysql4-install-1.0.3.php +105 -0
- app/code/local/Amosoft/Dropship/sql/dropship_setup/mysql4-upgrade-1.0.4-1.0.5.php +50 -0
- app/code/local/Amosoft/Dropship/sql/dropship_setup/mysql4-upgrade-1.0.5-1.0.6.php +28 -0
- app/code/local/Amosoft/Dropship/sql/dropship_setup/mysql4-upgrade-1.0.6-1.0.7.php +54 -0
- app/code/local/Amosoft/Dropship/sql/dropship_setup/mysql4-upgrade-1.0.7-1.0.8.php +12 -0
- app/design/adminhtml/default/default/layout/amosoftdropship.xml +185 -0
- app/design/adminhtml/default/default/template/amosoft/add_help_js.phtml +26 -0
- app/design/adminhtml/default/default/template/amosoft/addvendorfields.phtml +142 -0
- app/design/adminhtml/default/default/template/amosoft/bundle/renderer.phtml +441 -0
- app/design/adminhtml/default/default/template/amosoft/custom-msg.phtml +1 -0
- app/design/adminhtml/default/default/template/amosoft/downloadable/downloadable.phtml +301 -0
- app/design/adminhtml/default/default/template/amosoft/html/pager.phtml +124 -0
- app/design/adminhtml/default/default/template/amosoft/import/form/after.phtml +14 -0
- app/design/adminhtml/default/default/template/amosoft/import/form/before.phtml +126 -0
- app/design/adminhtml/default/default/template/amosoft/import/frame/result.phtml +31 -0
- app/design/adminhtml/default/default/template/amosoft/inline-edit.phtml +89 -0
- app/design/adminhtml/default/default/template/amosoft/item_order_history.phtml +37 -0
- app/design/adminhtml/default/default/template/amosoft/popup.phtml +62 -0
- app/design/adminhtml/default/default/template/amosoft/process-profile.phtml +290 -0
- app/design/adminhtml/default/default/template/amosoft/result.phtml +80 -0
- app/design/adminhtml/default/default/template/amosoft/sales/default.phtml +312 -0
- app/design/adminhtml/default/default/template/amosoft/sales/items.phtml +69 -0
- app/design/adminhtml/default/default/template/amosoft/system/config/fieldset/hint.phtml +132 -0
- app/design/adminhtml/default/default/template/amosoft/system/config/submitbutton.phtml +99 -0
- app/design/adminhtml/default/default/template/amosoft/upload_vendor_product.phtml +66 -0
- app/design/adminhtml/default/default/template/amosoft/vendor_ranking.phtml +455 -0
- app/design/adminhtml/default/default/template/amosoft/vendor_upload_product_history.phtml +63 -0
- app/design/adminhtml/default/default/template/amosoft/vendorproducttab.phtml +62 -0
- app/design/adminhtml/default/default/template/amosoft/vendorproducttabhistory.phtml +37 -0
- app/design/adminhtml/default/default/template/amosoft/window.phtml +107 -0
- app/etc/modules/Amosoft_Dropship.xml +10 -0
- js/amosoft/extjs/bootstrap.js +58 -0
- js/amosoft/extjs/css/example.css +83 -0
- js/amosoft/extjs/css/ext-all.css +1 -0
- js/amosoft/extjs/css/images/boundlist/trigger-arrow.png +0 -0
- js/amosoft/extjs/css/images/box/corners-blue.gif +0 -0
- js/amosoft/extjs/css/images/box/corners.gif +0 -0
- js/amosoft/extjs/css/images/box/l-blue.gif +0 -0
- js/amosoft/extjs/css/images/box/l.gif +0 -0
- js/amosoft/extjs/css/images/box/r-blue.gif +0 -0
- js/amosoft/extjs/css/images/box/r.gif +0 -0
- js/amosoft/extjs/css/images/box/tb-blue.gif +0 -0
- js/amosoft/extjs/css/images/box/tb.gif +0 -0
- js/amosoft/extjs/css/images/button/arrow.gif +0 -0
- js/amosoft/extjs/css/images/button/btn.gif +0 -0
- js/amosoft/extjs/css/images/button/group-cs.gif +0 -0
- js/amosoft/extjs/css/images/button/group-lr.gif +0 -0
- js/amosoft/extjs/css/images/button/group-tb.gif +0 -0
- js/amosoft/extjs/css/images/button/s-arrow-b-noline.gif +0 -0
- js/amosoft/extjs/css/images/button/s-arrow-b.gif +0 -0
- js/amosoft/extjs/css/images/button/s-arrow-bo.gif +0 -0
- js/amosoft/extjs/css/images/button/s-arrow-light.gif +0 -0
- js/amosoft/extjs/css/images/button/s-arrow-noline.gif +0 -0
- js/amosoft/extjs/css/images/button/s-arrow-o.gif +0 -0
- js/amosoft/extjs/css/images/button/s-arrow.gif +0 -0
- js/amosoft/extjs/css/images/datepicker/datepicker-footer-bg.gif +0 -0
- js/amosoft/extjs/css/images/datepicker/datepicker-footer-bg.png +0 -0
- js/amosoft/extjs/css/images/datepicker/datepicker-header-bg.gif +0 -0
- js/amosoft/extjs/css/images/datepicker/datepicker-header-bg.png +0 -0
- js/amosoft/extjs/css/images/dd/drop-add.gif +0 -0
- js/amosoft/extjs/css/images/dd/drop-no.gif +0 -0
- js/amosoft/extjs/css/images/dd/drop-yes.gif +0 -0
- js/amosoft/extjs/css/images/editor/tb-sprite.gif +0 -0
- js/amosoft/extjs/css/images/form/checkbox.gif +0 -0
- js/amosoft/extjs/css/images/form/clear-trigger.gif +0 -0
- js/amosoft/extjs/css/images/form/date-trigger.gif +0 -0
- js/amosoft/extjs/css/images/form/error-tip-corners.gif +0 -0
- js/amosoft/extjs/css/images/form/exclamation.gif +0 -0
- js/amosoft/extjs/css/images/form/radio.gif +0 -0
- js/amosoft/extjs/css/images/form/search-trigger.gif +0 -0
- js/amosoft/extjs/css/images/form/spinner-small.gif +0 -0
- js/amosoft/extjs/css/images/form/spinner.gif +0 -0
- js/amosoft/extjs/css/images/form/text-bg.gif +0 -0
- js/amosoft/extjs/css/images/form/trigger-square.gif +0 -0
- js/amosoft/extjs/css/images/form/trigger-tpl.gif +0 -0
- js/amosoft/extjs/css/images/form/trigger.gif +0 -0
- js/amosoft/extjs/css/images/grid/arrow-left-white.gif +0 -0
- js/amosoft/extjs/css/images/grid/arrow-right-white.gif +0 -0
- js/amosoft/extjs/css/images/grid/cell-special-bg.gif +0 -0
- js/amosoft/extjs/css/images/grid/cell-special-bg.png +0 -0
- js/amosoft/extjs/css/images/grid/cell-special-selected-bg.gif +0 -0
- js/amosoft/extjs/css/images/grid/cell-special-selected-bg.png +0 -0
- js/amosoft/extjs/css/images/grid/checked.gif +0 -0
- js/amosoft/extjs/css/images/grid/col-move-bottom.gif +0 -0
- js/amosoft/extjs/css/images/grid/col-move-top.gif +0 -0
- js/amosoft/extjs/css/images/grid/column-header-bg.gif +0 -0
- js/amosoft/extjs/css/images/grid/column-header-bg.png +0 -0
- js/amosoft/extjs/css/images/grid/column-header-over-bg.gif +0 -0
- js/amosoft/extjs/css/images/grid/column-header-over-bg.png +0 -0
- js/amosoft/extjs/css/images/grid/columns.gif +0 -0
- js/amosoft/extjs/css/images/grid/dd-insert-arrow-left.gif +0 -0
- js/amosoft/extjs/css/images/grid/dd-insert-arrow-left.png +0 -0
- js/amosoft/extjs/css/images/grid/dd-insert-arrow-right.gif +0 -0
- js/amosoft/extjs/css/images/grid/dd-insert-arrow-right.png +0 -0
- js/amosoft/extjs/css/images/grid/dirty.gif +0 -0
- js/amosoft/extjs/css/images/grid/done.gif +0 -0
- js/amosoft/extjs/css/images/grid/drop-no.gif +0 -0
- js/amosoft/extjs/css/images/grid/drop-yes.gif +0 -0
- js/amosoft/extjs/css/images/grid/footer-bg.gif +0 -0
- js/amosoft/extjs/css/images/grid/grid-blue-hd.gif +0 -0
- js/amosoft/extjs/css/images/grid/grid-blue-split.gif +0 -0
- js/amosoft/extjs/css/images/grid/grid-hrow.gif +0 -0
- js/amosoft/extjs/css/images/grid/grid-loading.gif +0 -0
- js/amosoft/extjs/css/images/grid/grid-split.gif +0 -0
- js/amosoft/extjs/css/images/grid/grid-vista-hd.gif +0 -0
- js/amosoft/extjs/css/images/grid/grid3-hd-btn.gif +0 -0
- js/amosoft/extjs/css/images/grid/grid3-hrow-over.gif +0 -0
- js/amosoft/extjs/css/images/grid/grid3-hrow.gif +0 -0
- js/amosoft/extjs/css/images/grid/grid3-rowheader.gif +0 -0
- js/amosoft/extjs/css/images/grid/group-by.gif +0 -0
- js/amosoft/extjs/css/images/grid/group-collapse.gif +0 -0
- js/amosoft/extjs/css/images/grid/group-expand-sprite.gif +0 -0
- js/amosoft/extjs/css/images/grid/group-expand.gif +0 -0
- js/amosoft/extjs/css/images/grid/hd-pop.gif +0 -0
- js/amosoft/extjs/css/images/grid/hmenu-asc.gif +0 -0
- js/amosoft/extjs/css/images/grid/hmenu-desc.gif +0 -0
- js/amosoft/extjs/css/images/grid/hmenu-lock.gif +0 -0
- js/amosoft/extjs/css/images/grid/hmenu-lock.png +0 -0
- js/amosoft/extjs/css/images/grid/hmenu-unlock.gif +0 -0
- js/amosoft/extjs/css/images/grid/hmenu-unlock.png +0 -0
- js/amosoft/extjs/css/images/grid/invalid_line.gif +0 -0
- js/amosoft/extjs/css/images/grid/loading.gif +0 -0
- js/amosoft/extjs/css/images/grid/mso-hd.gif +0 -0
- js/amosoft/extjs/css/images/grid/nowait.gif +0 -0
- js/amosoft/extjs/css/images/grid/page-first-disabled.gif +0 -0
- js/amosoft/extjs/css/images/grid/page-first.gif +0 -0
- js/amosoft/extjs/css/images/grid/page-last-disabled.gif +0 -0
- js/amosoft/extjs/css/images/grid/page-last.gif +0 -0
- js/amosoft/extjs/css/images/grid/page-next-disabled.gif +0 -0
- js/amosoft/extjs/css/images/grid/page-next.gif +0 -0
- js/amosoft/extjs/css/images/grid/page-prev-disabled.gif +0 -0
- js/amosoft/extjs/css/images/grid/page-prev.gif +0 -0
- js/amosoft/extjs/css/images/grid/pick-button.gif +0 -0
- js/amosoft/extjs/css/images/grid/property-cell-bg.gif +0 -0
- js/amosoft/extjs/css/images/grid/property-cell-selected-bg.gif +0 -0
- js/amosoft/extjs/css/images/grid/refresh-disabled.gif +0 -0
- js/amosoft/extjs/css/images/grid/refresh.gif +0 -0
- js/amosoft/extjs/css/images/grid/row-check-sprite.gif +0 -0
- js/amosoft/extjs/css/images/grid/row-expand-sprite.gif +0 -0
- js/amosoft/extjs/css/images/grid/row-over.gif +0 -0
- js/amosoft/extjs/css/images/grid/row-sel.gif +0 -0
- js/amosoft/extjs/css/images/grid/sort-hd.gif +0 -0
- js/amosoft/extjs/css/images/grid/sort_asc.gif +0 -0
- js/amosoft/extjs/css/images/grid/sort_desc.gif +0 -0
- js/amosoft/extjs/css/images/grid/unchecked.gif +0 -0
- js/amosoft/extjs/css/images/grid/wait.gif +0 -0
- js/amosoft/extjs/css/images/layout/mini-bottom.gif +0 -0
- js/amosoft/extjs/css/images/layout/mini-left.gif +0 -0
- js/amosoft/extjs/css/images/layout/mini-right.gif +0 -0
- js/amosoft/extjs/css/images/layout/mini-top.gif +0 -0
- js/amosoft/extjs/css/images/menu/checked.gif +0 -0
- js/amosoft/extjs/css/images/menu/group-checked.gif +0 -0
- js/amosoft/extjs/css/images/menu/item-over.gif +0 -0
- js/amosoft/extjs/css/images/menu/menu-item-active-bg.gif +0 -0
- js/amosoft/extjs/css/images/menu/menu-item-active-corners.gif +0 -0
- js/amosoft/extjs/css/images/menu/menu-item-active-sides.gif +0 -0
- js/amosoft/extjs/css/images/menu/menu-parent.gif +0 -0
- js/amosoft/extjs/css/images/menu/menu.gif +0 -0
- js/amosoft/extjs/css/images/menu/unchecked.gif +0 -0
- js/amosoft/extjs/css/images/progress/progress-default-bg.gif +0 -0
- js/amosoft/extjs/css/images/shared/blue-loading.gif +0 -0
- js/amosoft/extjs/css/images/shared/calendar.gif +0 -0
- js/amosoft/extjs/css/images/shared/glass-bg.gif +0 -0
- js/amosoft/extjs/css/images/shared/hd-sprite.gif +0 -0
- js/amosoft/extjs/css/images/shared/icon-error.gif +0 -0
- js/amosoft/extjs/css/images/shared/icon-info.gif +0 -0
- js/amosoft/extjs/css/images/shared/icon-question.gif +0 -0
- js/amosoft/extjs/css/images/shared/icon-warning.gif +0 -0
- js/amosoft/extjs/css/images/shared/large-loading.gif +0 -0
- js/amosoft/extjs/css/images/shared/left-btn.gif +0 -0
- js/amosoft/extjs/css/images/shared/loading-balls.gif +0 -0
- js/amosoft/extjs/css/images/shared/right-btn.gif +0 -0
- js/amosoft/extjs/css/images/shared/shadow-c.png +0 -0
- js/amosoft/extjs/css/images/shared/shadow-lr.png +0 -0
- js/amosoft/extjs/css/images/shared/shadow.png +0 -0
- js/amosoft/extjs/css/images/shared/warning.gif +0 -0
- js/amosoft/extjs/css/images/sizer/e-handle-dark.gif +0 -0
- js/amosoft/extjs/css/images/sizer/e-handle.gif +0 -0
- js/amosoft/extjs/css/images/sizer/ne-handle-dark.gif +0 -0
- js/amosoft/extjs/css/images/sizer/ne-handle.gif +0 -0
- js/amosoft/extjs/css/images/sizer/nw-handle-dark.gif +0 -0
- js/amosoft/extjs/css/images/sizer/nw-handle.gif +0 -0
- js/amosoft/extjs/css/images/sizer/s-handle-dark.gif +0 -0
- js/amosoft/extjs/css/images/sizer/s-handle.gif +0 -0
- js/amosoft/extjs/css/images/sizer/se-handle-dark.gif +0 -0
- js/amosoft/extjs/css/images/sizer/se-handle.gif +0 -0
- js/amosoft/extjs/css/images/sizer/square.gif +0 -0
- js/amosoft/extjs/css/images/sizer/sw-handle-dark.gif +0 -0
- js/amosoft/extjs/css/images/sizer/sw-handle.gif +0 -0
- js/amosoft/extjs/css/images/slider/slider-bg.gif +0 -0
- js/amosoft/extjs/css/images/slider/slider-bg.png +0 -0
- js/amosoft/extjs/css/images/slider/slider-thumb.gif +0 -0
- js/amosoft/extjs/css/images/slider/slider-thumb.png +0 -0
- js/amosoft/extjs/css/images/slider/slider-v-bg.gif +0 -0
- js/amosoft/extjs/css/images/slider/slider-v-bg.png +0 -0
- js/amosoft/extjs/css/images/slider/slider-v-thumb.gif +0 -0
- js/amosoft/extjs/css/images/slider/slider-v-thumb.png +0 -0
- js/amosoft/extjs/css/images/tab-bar/scroll-left.gif +0 -0
- js/amosoft/extjs/css/images/tab-bar/scroll-right.gif +0 -0
- js/amosoft/extjs/css/images/tab-bar/tab-bar-default-bg.gif +0 -0
- js/amosoft/extjs/css/images/tip/tip-corners.gif +0 -0
- js/amosoft/extjs/css/images/tip/tip-sides.gif +0 -0
- js/amosoft/extjs/css/images/toolbar/more.gif +0 -0
- js/amosoft/extjs/css/images/toolbar/scroll-left.gif +0 -0
- js/amosoft/extjs/css/images/toolbar/scroll-right.gif +0 -0
- js/amosoft/extjs/css/images/toolbar/toolbar-default-bg.gif +0 -0
- js/amosoft/extjs/css/images/tools/tool-sprite-tpl.gif +0 -0
- js/amosoft/extjs/css/images/tools/tool-sprites.gif +0 -0
- js/amosoft/extjs/css/images/tools/tools-sprites-trans.gif +0 -0
- js/amosoft/extjs/css/images/tree/arrows.gif +0 -0
- js/amosoft/extjs/css/images/tree/drop-above.gif +0 -0
- js/amosoft/extjs/css/images/tree/drop-add.gif +0 -0
- js/amosoft/extjs/css/images/tree/drop-append.gif +0 -0
- js/amosoft/extjs/css/images/tree/drop-below.gif +0 -0
- js/amosoft/extjs/css/images/tree/drop-between.gif +0 -0
- js/amosoft/extjs/css/images/tree/drop-no.gif +0 -0
- js/amosoft/extjs/css/images/tree/drop-over.gif +0 -0
- js/amosoft/extjs/css/images/tree/drop-under.gif +0 -0
- js/amosoft/extjs/css/images/tree/drop-yes.gif +0 -0
- js/amosoft/extjs/css/images/tree/elbow-end-minus-nl.gif +0 -0
- js/amosoft/extjs/css/images/tree/elbow-end-minus.gif +0 -0
- js/amosoft/extjs/css/images/tree/elbow-end-plus-nl.gif +0 -0
- js/amosoft/extjs/css/images/tree/elbow-end-plus.gif +0 -0
- js/amosoft/extjs/css/images/tree/elbow-end.gif +0 -0
- js/amosoft/extjs/css/images/tree/elbow-line.gif +0 -0
- js/amosoft/extjs/css/images/tree/elbow-minus-nl.gif +0 -0
- js/amosoft/extjs/css/images/tree/elbow-minus.gif +0 -0
- js/amosoft/extjs/css/images/tree/elbow-plus-nl.gif +0 -0
- js/amosoft/extjs/css/images/tree/elbow-plus.gif +0 -0
- js/amosoft/extjs/css/images/tree/elbow.gif +0 -0
- js/amosoft/extjs/css/images/tree/folder-open.gif +0 -0
- js/amosoft/extjs/css/images/tree/folder.gif +0 -0
- js/amosoft/extjs/css/images/tree/leaf.gif +0 -0
- js/amosoft/extjs/css/images/tree/loading.gif +0 -0
- js/amosoft/extjs/css/images/tree/s.gif +0 -0
- js/amosoft/extjs/css/images/util/splitter/mini-bottom.gif +0 -0
- js/amosoft/extjs/css/images/util/splitter/mini-left.gif +0 -0
- js/amosoft/extjs/css/images/util/splitter/mini-right.gif +0 -0
- js/amosoft/extjs/css/images/util/splitter/mini-top.gif +0 -0
- js/amosoft/extjs/dnd_grid_to_grid.js +120 -0
- js/amosoft/extjs/examples.js +110 -0
- js/amosoft/extjs/ext-all.js +21 -0
app/code/local/Amosoft/Dropship/Block/Adminhtml/Amosoft.php
ADDED
@@ -0,0 +1,19 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Block_Adminhtml_Amosoft extends Mage_Adminhtml_Block_Widget_Grid_Container
|
10 |
+
{
|
11 |
+
public function __construct()
|
12 |
+
{
|
13 |
+
$this->_controller = 'adminhtml_amosoft';
|
14 |
+
$this->_blockGroup = 'dropship';
|
15 |
+
$this->_headerText = Mage::helper('dropship')->__('Vendor/Supplier Manager');
|
16 |
+
$this->_addButtonLabel = Mage::helper('dropship')->__('Add Vendor/Supplier');
|
17 |
+
parent::__construct();
|
18 |
+
}
|
19 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Inventory.php
ADDED
@@ -0,0 +1,19 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Block_Adminhtml_Inventory extends Mage_Adminhtml_Block_Widget_Grid_Container
|
10 |
+
{
|
11 |
+
public function __construct()
|
12 |
+
{
|
13 |
+
$this->_controller = 'adminhtml_inventory';
|
14 |
+
$this->_blockGroup = 'dropship';
|
15 |
+
$this->_headerText = Mage::helper('dropship')->__('Vendor/Supplier Details');
|
16 |
+
parent::__construct();
|
17 |
+
$this->removeButton('add');
|
18 |
+
}
|
19 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Inventory/Edit/Tab/Addvendorfield.php
ADDED
@@ -0,0 +1,99 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Block_Adminhtml_Inventory_Edit_Tab_Addvendorfield extends Mage_Adminhtml_Block_Widget
|
11 |
+
{
|
12 |
+
protected $_product;
|
13 |
+
|
14 |
+
protected $_productInstance;
|
15 |
+
|
16 |
+
protected $_values;
|
17 |
+
|
18 |
+
protected $_itemCount = 1;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Class constructor
|
22 |
+
*/
|
23 |
+
public function __construct()
|
24 |
+
{
|
25 |
+
parent::__construct();
|
26 |
+
$this->setTemplate('amosoft/addvendorfields.phtml');
|
27 |
+
}
|
28 |
+
|
29 |
+
public function getItemCount()
|
30 |
+
{
|
31 |
+
return $this->_itemCount;
|
32 |
+
}
|
33 |
+
|
34 |
+
public function setItemCount($itemCount)
|
35 |
+
{
|
36 |
+
$this->_itemCount = max($this->_itemCount, $itemCount);
|
37 |
+
return $this;
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Retrieve options field name prefix
|
42 |
+
*
|
43 |
+
* @return string
|
44 |
+
*/
|
45 |
+
public function getFieldName()
|
46 |
+
{
|
47 |
+
return 'product[vendor_new]';
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Retrieve options field id prefix
|
52 |
+
*
|
53 |
+
* @return string
|
54 |
+
*/
|
55 |
+
public function getFieldId()
|
56 |
+
{
|
57 |
+
return 'product_vendor';
|
58 |
+
}
|
59 |
+
|
60 |
+
public function getVendorSelectHtml()
|
61 |
+
{
|
62 |
+
$productsku = Mage::getModel('catalog/product')->load(Mage::app()->getRequest()->getParam('id'))->getSku();
|
63 |
+
|
64 |
+
$select = $this->getLayout()->createBlock('adminhtml/html_select')
|
65 |
+
->setData(array(
|
66 |
+
'id' => $this->getFieldId().'_{{id}}_amosoft_vendor_code',
|
67 |
+
'class' => 'select select-product-option-type required-option-select'
|
68 |
+
))
|
69 |
+
->setName($this->getFieldName().'[{{id}}][amosoft_vendor_code]')
|
70 |
+
->setOptions(Mage::getSingleton('dropship/system_config_source_vendorlist')->vendorList('',$productsku));
|
71 |
+
|
72 |
+
return $select->getHtml();
|
73 |
+
}
|
74 |
+
protected function _prepareLayout()
|
75 |
+
{
|
76 |
+
$this->setChild('delete_button_vendor',
|
77 |
+
$this->getLayout()->createBlock('adminhtml/widget_button')
|
78 |
+
->setData(array(
|
79 |
+
'label' => Mage::helper('dropship')->__('Delete Option'),
|
80 |
+
'class' => 'delete delete-product-option-vendor '
|
81 |
+
))
|
82 |
+
);
|
83 |
+
return parent::_prepareLayout();
|
84 |
+
}
|
85 |
+
|
86 |
+
public function getAddButtonId()
|
87 |
+
{
|
88 |
+
$buttonId = $this->getLayout()
|
89 |
+
->getBlock('vendors_product_tab')
|
90 |
+
->getChild('vendor_add_button')->getId();
|
91 |
+
return $buttonId;
|
92 |
+
}
|
93 |
+
|
94 |
+
public function getDeleteButtonHtml()
|
95 |
+
{
|
96 |
+
return $this->getChildHtml('delete_button_vendor');
|
97 |
+
}
|
98 |
+
|
99 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Inventory/Edit/Tab/Amosoftvendor.php
ADDED
@@ -0,0 +1,83 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Block_Adminhtml_Inventory_Edit_Tab_Amosoftvendor extends Mage_Adminhtml_Block_Widget
|
11 |
+
{
|
12 |
+
public function __construct()
|
13 |
+
{
|
14 |
+
parent::__construct();
|
15 |
+
}
|
16 |
+
|
17 |
+
|
18 |
+
protected function _prepareLayout()
|
19 |
+
{
|
20 |
+
$this->setChild('vendor_add_button',
|
21 |
+
$this->getLayout()->createBlock('adminhtml/widget_button')
|
22 |
+
->setData(array(
|
23 |
+
'label' => Mage::helper('dropship')->__('Add New Supplier'),
|
24 |
+
'class' => 'add',
|
25 |
+
'id' => 'add_new_defined_option_vendor'
|
26 |
+
))
|
27 |
+
);
|
28 |
+
|
29 |
+
$this->setChild('update_delete_button_vendor',
|
30 |
+
$this->getLayout()->createBlock('adminhtml/widget_button')
|
31 |
+
->setData(array(
|
32 |
+
'label' => Mage::helper('dropship')->__('Delete Option'),
|
33 |
+
'class' => 'delete delete-product-option-vendor '
|
34 |
+
))
|
35 |
+
);
|
36 |
+
|
37 |
+
$this->setChild('vendor_options_box',
|
38 |
+
$this->getLayout()->createBlock('dropship/adminhtml_inventory_edit_tab_addvendorfield')
|
39 |
+
);
|
40 |
+
|
41 |
+
return parent::_prepareLayout();
|
42 |
+
}
|
43 |
+
|
44 |
+
public function getAddButtonHtml()
|
45 |
+
{
|
46 |
+
return $this->getChildHtml('vendor_add_button');
|
47 |
+
}
|
48 |
+
|
49 |
+
public function getOptionsBoxHtml()
|
50 |
+
{
|
51 |
+
return $this->getChildHtml('vendor_options_box');
|
52 |
+
}
|
53 |
+
|
54 |
+
public function getAssignedData(){
|
55 |
+
|
56 |
+
$rankingTableName = Mage::getSingleton('core/resource')->getTableName('dropship/ranking');
|
57 |
+
$collection = Mage::getModel('dropship/inventory')->getCollection()
|
58 |
+
->addFieldToFilter('product_sku',Mage::getModel('catalog/product')->load($this->getProductId())->getSku());
|
59 |
+
$collection->getSelect()->joinLeft(array('ranking' => $rankingTableName), 'main_table.amosoft_vendor_code=ranking.amosoft_vendor_code', array('vendor_name' => 'amosoft_vendor_name'));
|
60 |
+
return $collection;
|
61 |
+
}
|
62 |
+
|
63 |
+
public function getFieldName()
|
64 |
+
{
|
65 |
+
return 'product[vendor_update]';
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Retrieve options field id prefix
|
70 |
+
*
|
71 |
+
* @return string
|
72 |
+
*/
|
73 |
+
public function getFieldId()
|
74 |
+
{
|
75 |
+
return 'product_vendor';
|
76 |
+
}
|
77 |
+
|
78 |
+
public function getUpdateDeleteButtonHtml(){
|
79 |
+
|
80 |
+
return $this->getChildHtml('update_delete_button_vendor');
|
81 |
+
}
|
82 |
+
|
83 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Inventory/Edit/Tab/Vendortabhistory.php
ADDED
@@ -0,0 +1,30 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Block_Adminhtml_Inventory_Edit_Tab_Vendortabhistory extends Mage_Adminhtml_Block_Widget
|
11 |
+
{
|
12 |
+
public function __construct()
|
13 |
+
{
|
14 |
+
parent::__construct();
|
15 |
+
}
|
16 |
+
|
17 |
+
|
18 |
+
protected function _prepareLayout()
|
19 |
+
{
|
20 |
+
return parent::_prepareLayout();
|
21 |
+
}
|
22 |
+
|
23 |
+
public function getInventoryLog(){
|
24 |
+
|
25 |
+
$collection = Mage::getModel('dropship/inventorylog')->getCollection()->addFieldToFilter('product_sku',Mage::getModel('catalog/product')->load($this->getProductId())->getSku());
|
26 |
+
$collection->getSelect()->order('updated_at desc');
|
27 |
+
|
28 |
+
return $collection;
|
29 |
+
}
|
30 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Inventory/Edit/Vendortab.php
ADDED
@@ -0,0 +1,37 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Block_Adminhtml_Inventory_Edit_Vendortab extends Mage_Adminhtml_Block_Widget
|
11 |
+
implements Mage_Adminhtml_Block_Widget_Tab_Interface
|
12 |
+
{
|
13 |
+
public function canShowTab()
|
14 |
+
{
|
15 |
+
return true;
|
16 |
+
}
|
17 |
+
public function getTabLabel()
|
18 |
+
{
|
19 |
+
return $this->__('dropship Vendor');
|
20 |
+
}
|
21 |
+
public function getTabTitle()
|
22 |
+
{
|
23 |
+
return $this->__('dropship Vendor');
|
24 |
+
}
|
25 |
+
public function isHidden()
|
26 |
+
{
|
27 |
+
return false;
|
28 |
+
}
|
29 |
+
public function getTabUrl()
|
30 |
+
{
|
31 |
+
return $this->getUrl('amosoft/adminhtml_inventory/vendors', array('_current' => true));
|
32 |
+
}
|
33 |
+
public function getTabClass()
|
34 |
+
{
|
35 |
+
return 'ajax';
|
36 |
+
}
|
37 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Inventory/Edit/Vendortabhistory.php
ADDED
@@ -0,0 +1,37 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Block_Adminhtml_Inventory_Edit_Vendortabhistory extends Mage_Adminhtml_Block_Widget
|
11 |
+
implements Mage_Adminhtml_Block_Widget_Tab_Interface
|
12 |
+
{
|
13 |
+
public function canShowTab()
|
14 |
+
{
|
15 |
+
return true;
|
16 |
+
}
|
17 |
+
public function getTabLabel()
|
18 |
+
{
|
19 |
+
return $this->__('dropship Vendor History');
|
20 |
+
}
|
21 |
+
public function getTabTitle()
|
22 |
+
{
|
23 |
+
return $this->__('Vendor History');
|
24 |
+
}
|
25 |
+
public function isHidden()
|
26 |
+
{
|
27 |
+
return false;
|
28 |
+
}
|
29 |
+
public function getTabUrl()
|
30 |
+
{
|
31 |
+
return $this->getUrl('amosoft/adminhtml_inventory/vendorshistory', array('_current' => true));
|
32 |
+
}
|
33 |
+
public function getTabClass()
|
34 |
+
{
|
35 |
+
return 'ajax';
|
36 |
+
}
|
37 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Inventory/Grid.php
ADDED
@@ -0,0 +1,137 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Block_Adminhtml_Inventory_Grid extends Mage_Adminhtml_Block_Widget_Grid
|
11 |
+
{
|
12 |
+
public function __construct()
|
13 |
+
{
|
14 |
+
parent::__construct();
|
15 |
+
$this->setId('amosoftgrid');
|
16 |
+
$this->setDefaultSort('updated_at');
|
17 |
+
$this->setDefaultDir('DESC');
|
18 |
+
$this->setUseAjax(true);
|
19 |
+
$this->setSaveParametersInSession(true);
|
20 |
+
}
|
21 |
+
|
22 |
+
protected function _prepareCollection()
|
23 |
+
{
|
24 |
+
$entityTypeId = Mage::getModel('eav/config')->getEntityType('catalog_product')->getEntityTypeId();
|
25 |
+
$prodNameAttrId = Mage::getModel('eav/entity_attribute')->loadByCode($entityTypeId, 'name')->getAttributeId();
|
26 |
+
$collection = Mage::getModel('dropship/inventory')->getCollection();
|
27 |
+
$collection->getSelect()->join(array('amosoftRanking'=>Mage::getSingleton('core/resource')->getTableName('dropship/ranking')),'amosoftRanking.amosoft_vendor_code = main_table.amosoft_vendor_code', array('amosoft_vendor_name'));
|
28 |
+
$collection->getSelect()->joinLeft(array('prod' => Mage::getSingleton('core/resource')->getTableName('catalog/product')),'prod.sku = main_table.product_sku',array('magento_pro_id'=>'entity_id'));
|
29 |
+
$collection->getSelect()->joinLeft(array('cpev' => Mage::getSingleton('core/resource')->getTableName('catalog/product').'_varchar'),'cpev.entity_id=prod.entity_id AND cpev.attribute_id='.$prodNameAttrId.'',array('product_name' => 'value'));
|
30 |
+
$collection->getSelect()->where('prod.entity_id IS NOT NULL');
|
31 |
+
$this->setCollection($collection);
|
32 |
+
return parent::_prepareCollection();
|
33 |
+
}
|
34 |
+
|
35 |
+
protected function _getStore()
|
36 |
+
{
|
37 |
+
$storeId = (int) $this->getRequest()->getParam('store', 0);
|
38 |
+
return Mage::app()->getStore($storeId);
|
39 |
+
}
|
40 |
+
|
41 |
+
protected function _prepareColumns()
|
42 |
+
{
|
43 |
+
$this->addColumn('amosoft_vendor_name', array(
|
44 |
+
'header' => Mage::helper('dropship')->__('Vendor'),
|
45 |
+
'align' =>'right',
|
46 |
+
'width' => '50px',
|
47 |
+
'filter_index' => 'amosoftRanking.amosoft_vendor_name',
|
48 |
+
'index' => 'amosoft_vendor_name',
|
49 |
+
));
|
50 |
+
|
51 |
+
$this->addColumn('stock', array(
|
52 |
+
'header' => Mage::helper('dropship')->__('Vendor Inventory'),
|
53 |
+
'index' => 'stock',
|
54 |
+
'type' => 'number'
|
55 |
+
));
|
56 |
+
$store = $this->_getStore();
|
57 |
+
$this->addColumn('cost', array(
|
58 |
+
'header' => Mage::helper('dropship')->__('Cost'),
|
59 |
+
'index' => 'cost',
|
60 |
+
'type' => 'price',
|
61 |
+
'currency_code' => $store->getBaseCurrency()->getCode(),
|
62 |
+
));
|
63 |
+
|
64 |
+
$store = $this->_getStore();
|
65 |
+
$this->addColumn('shipping_cost', array(
|
66 |
+
'header' => Mage::helper('dropship')->__('Shipping Cost'),
|
67 |
+
'index' => 'shipping_cost',
|
68 |
+
'type' => 'price',
|
69 |
+
'currency_code' => $store->getBaseCurrency()->getCode(),
|
70 |
+
));
|
71 |
+
|
72 |
+
$this->addColumn('product_name', array(
|
73 |
+
'header' => Mage::helper('dropship')->__('Product Name'),
|
74 |
+
'align' =>'left',
|
75 |
+
'width' => '80px',
|
76 |
+
'index' => 'product_name',
|
77 |
+
'filter_index'=>'cpev.value',
|
78 |
+
));
|
79 |
+
$this->addColumn('product_sku', array(
|
80 |
+
'header' => Mage::helper('dropship')->__('Product Sku'),
|
81 |
+
'align' =>'left',
|
82 |
+
'width' => '80px',
|
83 |
+
'index' => 'product_sku',
|
84 |
+
'renderer' => 'Amosoft_Dropship_Block_Adminhtml_Widget_Grid_Column_Skuaction'
|
85 |
+
));
|
86 |
+
|
87 |
+
$this->addColumn('amosoft_vendor_sku', array(
|
88 |
+
'header' => Mage::helper('dropship')->__('Vendor Sku'),
|
89 |
+
'align' =>'left',
|
90 |
+
'width' => '80px',
|
91 |
+
'index' => 'amosoft_vendor_sku',
|
92 |
+
'renderer' => 'Amosoft_Dropship_Block_Adminhtml_Widget_Grid_Column_Skuaction'
|
93 |
+
));
|
94 |
+
$this->addColumn('updated_at', array(
|
95 |
+
'header' => Mage::helper('dropship')->__('Last Sync'),
|
96 |
+
'index' => 'updated_at',
|
97 |
+
'width' => '80px',
|
98 |
+
'default' => '--',
|
99 |
+
'type' => 'datetime',
|
100 |
+
'filter_index'=> 'main_table.updated_at'
|
101 |
+
));
|
102 |
+
|
103 |
+
// below code added for Jira ticket 734
|
104 |
+
$this->addColumn('action',
|
105 |
+
array(
|
106 |
+
'header' => Mage::helper('dropship')->__('Action'),
|
107 |
+
'width' => '100',
|
108 |
+
'type' => 'action',
|
109 |
+
'getter' => 'getMagentoProId',
|
110 |
+
'actions' => array(
|
111 |
+
array(
|
112 |
+
'caption' => Mage::helper('dropship')->__('Edit'),
|
113 |
+
'url' => array('base'=> 'adminhtml/catalog_product/edit/back/edit/tab/product_info_tabs_vendor_tab'),
|
114 |
+
'field' => 'id'
|
115 |
+
)
|
116 |
+
),
|
117 |
+
'filter' => false,
|
118 |
+
'sortable' => false,
|
119 |
+
'index' => 'stores',
|
120 |
+
'is_system' => true,
|
121 |
+
));
|
122 |
+
$this->addExportType('*/*/exportCsv', Mage::helper('dropship')->__('CSV'));
|
123 |
+
$this->addExportType('*/*/exportXml', Mage::helper('dropship')->__('XML'));
|
124 |
+
|
125 |
+
return parent::_prepareColumns();
|
126 |
+
}
|
127 |
+
|
128 |
+
public function getRowUrl($row)
|
129 |
+
{
|
130 |
+
//return $this->getUrl('*/*/edit', array('vendor_id' => $row->getVendorId()));
|
131 |
+
}
|
132 |
+
public function getGridUrl()
|
133 |
+
{
|
134 |
+
return $this->getUrl('*/*/grid', array('_current'=>true));
|
135 |
+
}
|
136 |
+
|
137 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Notification.php
ADDED
@@ -0,0 +1,107 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Block_Adminhtml_Notification extends Mage_Adminhtml_Block_Notification_Window
|
10 |
+
{
|
11 |
+
protected function _construct(){
|
12 |
+
parent::_construct();
|
13 |
+
$this->setHeaderText($this->escapeHtml($this->__('Amosoft Message')));
|
14 |
+
$this->setCloseText($this->escapeHtml($this->__('close')));
|
15 |
+
$this->setReadDetailsText($this->escapeHtml($this->__('Read details')));
|
16 |
+
$this->setNoticeText($this->escapeHtml($this->__('NOTICE')));
|
17 |
+
$this->setMinorText($this->escapeHtml($this->__('MINOR')));
|
18 |
+
$this->setMajorText($this->escapeHtml($this->__('MAJOR')));
|
19 |
+
$this->setCriticalText($this->escapeHtml($this->__('CRITICAL')));
|
20 |
+
|
21 |
+
}
|
22 |
+
|
23 |
+
public function getNoticeMessageText(){
|
24 |
+
|
25 |
+
$result = array();
|
26 |
+
//soap Details
|
27 |
+
$result['username'] = 'amosoft';
|
28 |
+
$apiResult = Mage::getModel('dropship/amosoft')->createApiRoleAndUser(array('api_user_name'=>'amosoft','email'=>'noreply@amosoft.com'));
|
29 |
+
$result['api_password'] = $apiResult['password'];
|
30 |
+
$result['user_id'] = $apiResult['user_id'];
|
31 |
+
|
32 |
+
//rest deatils
|
33 |
+
//code comment as Rest may be a part of future release
|
34 |
+
/* $arrRest = Mage::getModel('dropship/api2_createroleandrule')->initiliazeRest();
|
35 |
+
$result['consumer_key'] = $arrRest['consumer_key'];
|
36 |
+
$result['consumer_secret'] = $arrRest['consumer_secret'];
|
37 |
+
$result['token'] = $arrRest['token'];
|
38 |
+
$result['secret'] =$arrRest['secret']; */
|
39 |
+
$coreConfigData = array(
|
40 |
+
|
41 |
+
array(
|
42 |
+
'scope' => 'default',
|
43 |
+
'scope_id' => '0',
|
44 |
+
'path' => 'amosoft_integration/integration/soapuser',
|
45 |
+
'value' => $result['username'],
|
46 |
+
|
47 |
+
)
|
48 |
+
/*,
|
49 |
+
|
50 |
+
array(
|
51 |
+
'scope' => 'default',
|
52 |
+
'scope_id' => '0',
|
53 |
+
'path' => 'amosoft_integration/integration/cunsumer_key',
|
54 |
+
'value' => $result['consumer_key'],
|
55 |
+
|
56 |
+
)
|
57 |
+
,
|
58 |
+
array(
|
59 |
+
'scope' => 'default',
|
60 |
+
'scope_id' => '0',
|
61 |
+
'path' => 'amosoft_integration/integration/consumer_secret',
|
62 |
+
'value' => $result['consumer_secret'],
|
63 |
+
|
64 |
+
), array(
|
65 |
+
'scope' => 'default',
|
66 |
+
'scope_id' => '0',
|
67 |
+
'path' => 'amosoft_integration/integration/access_token',
|
68 |
+
'value' => $result['token'],
|
69 |
+
|
70 |
+
),
|
71 |
+
array(
|
72 |
+
'scope' => 'default',
|
73 |
+
'scope_id' => '0',
|
74 |
+
'path' => 'amosoft_integration/integration/access_secret',
|
75 |
+
'value' => $result['secret'],
|
76 |
+
|
77 |
+
) */
|
78 |
+
);
|
79 |
+
|
80 |
+
foreach ($coreConfigData as $data) {
|
81 |
+
$this->setConfigValue($data);
|
82 |
+
}
|
83 |
+
return $result;
|
84 |
+
|
85 |
+
}
|
86 |
+
|
87 |
+
public function setConfigValue($data)
|
88 |
+
{
|
89 |
+
Mage::getModel('core/config_data')->load($data['path'],'path')->setData($data)->save();
|
90 |
+
}
|
91 |
+
|
92 |
+
public function canShow()
|
93 |
+
{
|
94 |
+
if (Mage::getStoreConfig('amosoft_integration/integration/notificationstatus') == 0) {
|
95 |
+
$this->setConfigValue(array(
|
96 |
+
'scope' => 'default',
|
97 |
+
'scope_id' => '0',
|
98 |
+
'path' => 'amosoft_integration/integration/notificationstatus',
|
99 |
+
'value' => '1',
|
100 |
+
|
101 |
+
));
|
102 |
+
return true;
|
103 |
+
}
|
104 |
+
return false;
|
105 |
+
|
106 |
+
}
|
107 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Ranking.php
ADDED
@@ -0,0 +1,62 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Block_Adminhtml_Ranking extends Mage_Adminhtml_Block_Widget_Grid_Container
|
10 |
+
{
|
11 |
+
public function __construct()
|
12 |
+
{
|
13 |
+
$this->_controller = 'adminhtml_ranking';
|
14 |
+
$this->_blockGroup = 'dropship';
|
15 |
+
$this->_headerText = Mage::helper('dropship')->__('Vendor/Supplier Management');
|
16 |
+
$this->_addButtonLabel = Mage::helper('dropship')->__('Add Vendor Ranking');
|
17 |
+
|
18 |
+
|
19 |
+
$this->addButton('show_history',array(
|
20 |
+
'label' => 'Show History',
|
21 |
+
'onclick' => 'setLocation(\'' . $this->getUrl('*/*/showhistory') .'\')',
|
22 |
+
'class' => 'save amosoft-button',
|
23 |
+
));
|
24 |
+
$this->addButton('save_ranking_table',array(
|
25 |
+
'label' => 'save ranking table',
|
26 |
+
'onclick' => 'saveRankingTable()',
|
27 |
+
'class' => 'save amosoft-button',
|
28 |
+
));
|
29 |
+
|
30 |
+
$this->addButton('save_ranking',array(
|
31 |
+
'label' => 'Save Ranking',
|
32 |
+
'class' => 'save amosoft-button',
|
33 |
+
'onclick' => 'saveRankingTable()',
|
34 |
+
|
35 |
+
));
|
36 |
+
parent::__construct();
|
37 |
+
$this->setTemplate('amosoft/vendor_ranking.phtml');
|
38 |
+
$this->removeButton('add');
|
39 |
+
$this->removeButton('save_ranking_table');
|
40 |
+
|
41 |
+
}
|
42 |
+
public function getVendorCollection($type = 'no'){
|
43 |
+
|
44 |
+
$arrVendor = array();
|
45 |
+
$tempReslt = Mage::getModel('dropship/ranking')->getVendorCollection($type);
|
46 |
+
$result['gridData'] = Mage::helper('core')->jsonEncode($tempReslt);
|
47 |
+
if(!empty($tempReslt)){
|
48 |
+
foreach($tempReslt as $value){
|
49 |
+
$arrVendor[] = array('name'=>$value['name'],'code'=>$value['code']);
|
50 |
+
}
|
51 |
+
}
|
52 |
+
$result['arrayData'] = Mage::helper('core')->jsonEncode($arrVendor);
|
53 |
+
return $result;
|
54 |
+
}
|
55 |
+
public function getAttributeCode()
|
56 |
+
{
|
57 |
+
$helper = Mage::helper('dropship');
|
58 |
+
$attributeCode = array(array('link'=>'','name'=>$helper::AMOSOFT_PRODUCT_LINK_NONE),array('link'=>$helper::AMOSOFT_PRODUCT_LINK_CODE_UPC,'name'=>$helper::AMOSOFT_PRODUCT_LINK_UPC),array('link'=>$helper::AMOSOFT_PRODUCT_LINK_CODE_MNP,'name'=>$helper::AMOSOFT_PRODUCT_LINK_MNP),array('link'=>$helper::AMOSOFT_PRODUCT_LINK_CODE_SKU,'name'=>$helper::AMOSOFT_PRODUCT_LINK_SKU));
|
59 |
+
return Mage::helper('core')->jsonEncode($attributeCode);
|
60 |
+
}
|
61 |
+
|
62 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Ranking/Grid.php
ADDED
@@ -0,0 +1,87 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Block_Adminhtml_Ranking_Grid extends Mage_Adminhtml_Block_Widget_Grid
|
11 |
+
{
|
12 |
+
public function __construct()
|
13 |
+
{
|
14 |
+
parent::__construct();
|
15 |
+
$this->setId('amosoftgrid');
|
16 |
+
$this->setDefaultSort('ranking');
|
17 |
+
$this->setDefaultDir('ASC');
|
18 |
+
$this->setUseAjax(true);
|
19 |
+
$this->setSaveParametersInSession(true);
|
20 |
+
}
|
21 |
+
|
22 |
+
protected function _prepareCollection()
|
23 |
+
{
|
24 |
+
$collection = Mage::getModel('dropship/ranking')->getCollection();
|
25 |
+
$this->setCollection($collection);
|
26 |
+
return parent::_prepareCollection();
|
27 |
+
}
|
28 |
+
|
29 |
+
protected function _prepareColumns()
|
30 |
+
{
|
31 |
+
|
32 |
+
$this->addColumn('amosoft_vendor_code', array(
|
33 |
+
'header' => Mage::helper('dropship')->__('Vendor Code'),
|
34 |
+
'align' =>'right',
|
35 |
+
'width' => '50px',
|
36 |
+
'index' => 'amosoft_vendor_code',
|
37 |
+
));
|
38 |
+
$this->addColumn('ranking', array(
|
39 |
+
'header' => Mage::helper('dropship')->__('Position'),
|
40 |
+
'align' =>'right',
|
41 |
+
'width' => '50px',
|
42 |
+
'type' => 'input',
|
43 |
+
'index' => 'ranking',
|
44 |
+
'inline_css' => 'vendor_ranking required-entry validate-digits validate-greater-than-zero',
|
45 |
+
));
|
46 |
+
$this->addColumn('action',
|
47 |
+
array(
|
48 |
+
'header' => Mage::helper('dropship')->__('Action'),
|
49 |
+
'width' => '100',
|
50 |
+
'type' => 'textaction',
|
51 |
+
'getter' => 'getId',
|
52 |
+
'actions' => array(
|
53 |
+
array(
|
54 |
+
'caption' => Mage::helper('dropship')->__('edit'),
|
55 |
+
'url' => array('base'=> '*/*/edit'),
|
56 |
+
'field' => 'id'
|
57 |
+
),
|
58 |
+
array(
|
59 |
+
'caption' => Mage::helper('dropship')->__('delete'),
|
60 |
+
'url' => array('base'=> '*/*/delete'),
|
61 |
+
'field' => 'id',
|
62 |
+
'confirm' =>'Are you sure to delete the Vendor?'
|
63 |
+
|
64 |
+
)
|
65 |
+
),
|
66 |
+
'filter' => false,
|
67 |
+
'sortable' => false,
|
68 |
+
'index' => 'stores',
|
69 |
+
'is_system' => true,
|
70 |
+
'renderer' => 'Amosoft_Dropship_Block_Adminhtml_Widget_Grid_Column_Textaction'
|
71 |
+
));
|
72 |
+
return parent::_prepareColumns();
|
73 |
+
}
|
74 |
+
|
75 |
+
|
76 |
+
|
77 |
+
|
78 |
+
public function getRowUrl($row)
|
79 |
+
{
|
80 |
+
return $this->getUrl('*/*/edit', array('id' => $row->getId()));
|
81 |
+
}
|
82 |
+
public function getGridUrl()
|
83 |
+
{
|
84 |
+
return $this->getUrl('*/*/grid', array('_current'=>true));
|
85 |
+
}
|
86 |
+
|
87 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Sales/Order/View/Items.php
ADDED
@@ -0,0 +1,23 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Adminhtml order items grid overwrite for Adding Amosoft order item details
|
4 |
+
*
|
5 |
+
* @category Amosoft
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
class Amosoft_Dropship_Block_Adminhtml_Sales_Order_View_Items extends Mage_Adminhtml_Block_Sales_Order_View_Items
|
9 |
+
{
|
10 |
+
/**
|
11 |
+
* Retrieve order items collection
|
12 |
+
*
|
13 |
+
* @return unknown
|
14 |
+
*/
|
15 |
+
public function getItemsCollection()
|
16 |
+
{
|
17 |
+
$id = $this->getOrder()->getId();
|
18 |
+
$collection = Mage::getResourceModel('sales/order_item_collection');
|
19 |
+
$collection->getSelect()->joinLeft( array('abc'=> Mage::getSingleton('core/resource')->getTableName('dropship/orderitems')), "main_table.item_id = abc.item_id",array("abc.amosoft_item_status", "abc.amosoft_vendor_sku","abc.amosoft_vendor_code"))->where("main_table.order_id =".$id);
|
20 |
+
$collection->getSelect()->joinLeft( array('nr'=> Mage::getSingleton('core/resource')->getTableName('dropship/ranking')), "abc.amosoft_vendor_code = nr.amosoft_vendor_code",array("nr.amosoft_vendor_name"));
|
21 |
+
return $collection;
|
22 |
+
}
|
23 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Showhistory.php
ADDED
@@ -0,0 +1,39 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Block_Adminhtml_Showhistory extends Mage_Adminhtml_Block_Widget_Grid_Container
|
10 |
+
{
|
11 |
+
public function __construct()
|
12 |
+
{
|
13 |
+
$this->_controller = 'adminhtml_ranking';
|
14 |
+
$this->_blockGroup = 'dropship';
|
15 |
+
$this->_headerText = Mage::helper('dropship')->__('Vendor Ranking Log');
|
16 |
+
$this->__addBackButton = Mage::helper('dropship')->__('Back');
|
17 |
+
$this->addButton('back',array(
|
18 |
+
'label' => 'Back',
|
19 |
+
'onclick' => 'setLocation(\'' . $this->getUrl('*/*/') .'\')',
|
20 |
+
'class' => 'back',
|
21 |
+
)
|
22 |
+
);
|
23 |
+
parent::__construct();
|
24 |
+
$this->removeButton('add');
|
25 |
+
|
26 |
+
}
|
27 |
+
|
28 |
+
public function getLogCollection(){
|
29 |
+
$collection = Mage::getModel('dropship/rankinglog')->getCollection();
|
30 |
+
$collection->getSelect()->order('created_at desc');
|
31 |
+
$logtable = array();
|
32 |
+
foreach($collection as $value){
|
33 |
+
$logtable[$value->getLabel()] = unserialize($value->getRankingData());
|
34 |
+
$logtable[$value->getLabel()]['created'] = $value->getCreatedAt();
|
35 |
+
}
|
36 |
+
|
37 |
+
return $logtable;
|
38 |
+
}
|
39 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing.php
ADDED
@@ -0,0 +1,27 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Block_Adminhtml_Sourcing extends Mage_Adminhtml_Block_Widget_Grid_Container
|
10 |
+
{
|
11 |
+
public function __construct()
|
12 |
+
{
|
13 |
+
$this->_controller = 'adminhtml_sourcing';
|
14 |
+
$this->_blockGroup = 'dropship';
|
15 |
+
$this->_headerText = Mage::helper('dropship')->__('Order Management');
|
16 |
+
$this->_addButtonLabel = Mage::helper('dropship')->__('Add Vendor');
|
17 |
+
parent::__construct();
|
18 |
+
$this->removeButton('add');
|
19 |
+
}
|
20 |
+
|
21 |
+
public function getAmosoftOrderItemsDetails($item){
|
22 |
+
|
23 |
+
$ItemCollection = Mage::getModel('dropship/orderitems')->getCollection()->addFieldTofilter('item_order_id',$item->getOrderId())->addFieldTofilter('sku',$item->getSku());
|
24 |
+
$ItemCollection->getSelect()->joinLeft( array('nrank'=> Mage::getSingleton('core/resource')->getTableName('dropship/ranking')), "main_table.amosoft_vendor_code = nrank.amosoft_vendor_code",array("nrank.amosoft_vendor_name"));
|
25 |
+
return $ItemCollection->getFirstItem();
|
26 |
+
}
|
27 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing/Edit.php
ADDED
@@ -0,0 +1,67 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Block_Adminhtml_Sourcing_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
|
11 |
+
{
|
12 |
+
public function __construct()
|
13 |
+
{
|
14 |
+
|
15 |
+
|
16 |
+
$this->_objectId = 'amosoft_item_id';
|
17 |
+
$this->_blockGroup = 'dropship';
|
18 |
+
$this->_controller = 'adminhtml_sourcing';
|
19 |
+
parent::__construct();
|
20 |
+
|
21 |
+
$this->_updateButton('save', 'label', Mage::helper('dropship')->__('Save Sourcing'));
|
22 |
+
$this->_updateButton('delete', 'label', Mage::helper('dropship')->__('Delete Supplier'));
|
23 |
+
|
24 |
+
$this->_addButton('saveandcontinue', array(
|
25 |
+
'label' => Mage::helper('adminhtml')->__('Save And Continue Edit'),
|
26 |
+
'onclick' => 'saveAndContinueEdit()',
|
27 |
+
'class' => 'save amosoft-button',
|
28 |
+
), -100);
|
29 |
+
if(Mage::registry('sourcing_data')->getData('updated_by') != 'Amosoft'){
|
30 |
+
|
31 |
+
$this->_addButton('cancelitem', array(
|
32 |
+
'label' => Mage::helper('adminhtml')->__('Cancel Item'),
|
33 |
+
'onclick' => 'cancelItem()',
|
34 |
+
'class' => 'delete',
|
35 |
+
), -100);
|
36 |
+
}
|
37 |
+
$this->_removeButton('delete');
|
38 |
+
$this->_removeButton('reset');
|
39 |
+
$this->_formScripts[] = "
|
40 |
+
|
41 |
+
function saveAndContinueEdit(){
|
42 |
+
editForm.submit($('edit_form').action+'back/edit/');
|
43 |
+
}
|
44 |
+
function cancelItem(){
|
45 |
+
$('amosoft_vendor_code').className = '';
|
46 |
+
editForm.submit($('edit_form').action+'cancel/item/');
|
47 |
+
}
|
48 |
+
";
|
49 |
+
|
50 |
+
|
51 |
+
}
|
52 |
+
|
53 |
+
public function getBackUrl()
|
54 |
+
{
|
55 |
+
return $this->getUrl('*/*/sourcinggrid');
|
56 |
+
}
|
57 |
+
|
58 |
+
public function getHeaderText()
|
59 |
+
{
|
60 |
+
if( Mage::registry('sourcing_data') && Mage::registry('sourcing_data')->getAmosoftItemId() ) {
|
61 |
+
return Mage::helper('dropship')->__("Edit Item Sourcing Supplier", $this->htmlEscape(Mage::registry('sourcing_data')->getTitle()));
|
62 |
+
} else {
|
63 |
+
return Mage::helper('dropship')->__('Select Sourcing Supplier');
|
64 |
+
}
|
65 |
+
}
|
66 |
+
|
67 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing/Edit/Form.php
ADDED
@@ -0,0 +1,26 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Block_Adminhtml_Sourcing_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
|
11 |
+
{
|
12 |
+
protected function _prepareForm()
|
13 |
+
{
|
14 |
+
$form = new Varien_Data_Form(array(
|
15 |
+
'id' => 'edit_form',
|
16 |
+
'action' => $this->getUrl('*/*/save', array('amosoft_item_id' => $this->getRequest()->getParam('amosoft_item_id'), 'qty'=>$this->getRequest()->getParam('qty'))),
|
17 |
+
'method' => 'post',
|
18 |
+
'enctype' => 'multipart/form-data'
|
19 |
+
)
|
20 |
+
);
|
21 |
+
|
22 |
+
$form->setUseContainer(true);
|
23 |
+
$this->setForm($form);
|
24 |
+
return parent::_prepareForm();
|
25 |
+
}
|
26 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing/Edit/Tab/Form.php
ADDED
@@ -0,0 +1,69 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Block_Adminhtml_Sourcing_Edit_Tab_Form extends Mage_Adminhtml_Block_Widget_Form
|
11 |
+
{
|
12 |
+
|
13 |
+
protected $_statusArray = array(
|
14 |
+
Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_TRANSMITTING,
|
15 |
+
Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_SOURCING,
|
16 |
+
Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_REPROCESS,
|
17 |
+
Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_BACKORDER,
|
18 |
+
Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_NO_DROPSHIP
|
19 |
+
);
|
20 |
+
protected function _prepareForm()
|
21 |
+
{
|
22 |
+
$form = new Varien_Data_Form();
|
23 |
+
$sku = Mage::registry('sourcing_data')->getData('sku');
|
24 |
+
$this->setForm($form);
|
25 |
+
$fieldset = $form->addFieldset('amosoft_form', array('legend'=>Mage::helper('dropship')->__('Item Sourcing Information')));
|
26 |
+
|
27 |
+
if(in_array(Mage::registry('sourcing_data')->getData('amosoft_item_status'),$this->_statusArray)){
|
28 |
+
$fieldset->addField('amosoft_vendor_code', 'select', array(
|
29 |
+
'label' => Mage::helper('dropship')->__('Supplier'),
|
30 |
+
'class' => 'required-entry validate-select',
|
31 |
+
'required' => true,
|
32 |
+
'name' => 'amosoft_vendor_code',
|
33 |
+
'values' => Mage::getModel('dropship/system_config_source_vendorlist')->vendorListSourcing(true,$sku),
|
34 |
+
'default' => '',
|
35 |
+
'note' => 'Select your Dropship Supplier to source this item and bypass the dropship sourcing rule.'
|
36 |
+
));
|
37 |
+
}
|
38 |
+
$fieldset->addField('amosoft_item_status', 'text', array(
|
39 |
+
'label' => Mage::helper('dropship')->__('Amosoft Item Status'),
|
40 |
+
'name' => 'amosoft_item_status',
|
41 |
+
'note'=>'Read only filed',
|
42 |
+
'readonly'=> true
|
43 |
+
));
|
44 |
+
|
45 |
+
|
46 |
+
$fieldset->addField('sku', 'text', array(
|
47 |
+
'label' => Mage::helper('dropship')->__('Sku'),
|
48 |
+
'name' => 'sku',
|
49 |
+
'note'=>'Read only filed',
|
50 |
+
'readonly'=> true
|
51 |
+
));
|
52 |
+
$fieldset->addField('item_order_id', 'hidden', array(
|
53 |
+
'name' => 'item_order_id',
|
54 |
+
));
|
55 |
+
|
56 |
+
$fieldset->addField('item_id', 'hidden', array(
|
57 |
+
'name' => 'item_id',
|
58 |
+
));
|
59 |
+
|
60 |
+
if ( Mage::getSingleton('adminhtml/session')->getSourcingData() )
|
61 |
+
{
|
62 |
+
$form->setValues(Mage::getSingleton('adminhtml/session')->getSourcingData());
|
63 |
+
Mage::getSingleton('adminhtml/session')->setSourcingData(null);
|
64 |
+
} elseif ( Mage::registry('sourcing_data') ) {
|
65 |
+
$form->setValues(Mage::registry('sourcing_data')->getData());
|
66 |
+
}
|
67 |
+
return parent::_prepareForm();
|
68 |
+
}
|
69 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing/Edit/Tabs.php
ADDED
@@ -0,0 +1,32 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Block_Adminhtml_Sourcing_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
|
11 |
+
{
|
12 |
+
|
13 |
+
|
14 |
+
public function __construct()
|
15 |
+
{
|
16 |
+
parent::__construct();
|
17 |
+
$this->setId('amosoft_tabs');
|
18 |
+
$this->setDestElementId('edit_form');
|
19 |
+
$this->setTitle(Mage::helper('dropship')->__('Item Sourcing Information'));
|
20 |
+
}
|
21 |
+
|
22 |
+
protected function _beforeToHtml()
|
23 |
+
{
|
24 |
+
$this->addTab('form_section', array(
|
25 |
+
'label' => Mage::helper('dropship')->__('Item Sourcing Information'),
|
26 |
+
'title' => Mage::helper('dropship')->__('Item Sourcing Information'),
|
27 |
+
'content' => $this->getLayout()->createBlock('dropship/adminhtml_sourcing_edit_tab_form')->toHtml(),
|
28 |
+
));
|
29 |
+
|
30 |
+
return parent::_beforeToHtml();
|
31 |
+
}
|
32 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing/Grid.php
ADDED
@@ -0,0 +1,211 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Block_Adminhtml_Sourcing_Grid extends Mage_Adminhtml_Block_Widget_Grid
|
11 |
+
{
|
12 |
+
public function __construct()
|
13 |
+
{
|
14 |
+
parent::__construct();
|
15 |
+
$this->setId('sourcinggrid');
|
16 |
+
$this->setDefaultSort('created_at');
|
17 |
+
$this->setDefaultDir('DESC');
|
18 |
+
$this->setSaveParametersInSession(true);
|
19 |
+
}
|
20 |
+
|
21 |
+
protected function _prepareCollection()
|
22 |
+
{
|
23 |
+
$tableName = Mage::getSingleton("core/resource")->getTableName('sales/order_item');
|
24 |
+
|
25 |
+
$collection = Mage::getModel('sales/order_item')->getCollection()->addFieldToSelect(array('qty_ordered','order_id'));
|
26 |
+
|
27 |
+
$collection->getSelect()->columns('if(`main_table`.`row_total` <> 0, `main_table`.`row_total`,(SELECT config.`row_total` FROM '.$tableName.' as simple INNER JOIN '.$tableName.' as config
|
28 |
+
ON (simple.parent_item_id = config.item_id) where simple.item_id= `main_table`.`item_id`)) as row_total');
|
29 |
+
|
30 |
+
$collection->getSelect()->join(array('amosoftItems'=>Mage::getSingleton('core/resource')->getTableName('dropship/orderitems')),
|
31 |
+
'amosoftItems.item_id = main_table.item_id', array('item_order_id','amosoft_item_id'=>'id','amosoft_item_status','magento_sku'=>'sku','amosoft_vendor_code','amosoft_vendor_sku','vendor_cost','shipping_cost','updated_by','updated_at'));
|
32 |
+
|
33 |
+
$collection->getSelect()->join(array('salesOrder'=>Mage::getSingleton('core/resource')->getTableName('sales/order')),
|
34 |
+
'salesOrder.entity_id = main_table.order_id', array('increment_id','status','created_at'));
|
35 |
+
|
36 |
+
$collection->getSelect()->joinleft(array('amosoftRanking'=>Mage::getSingleton('core/resource')->getTableName('dropship/ranking')),
|
37 |
+
'amosoftRanking.amosoft_vendor_code = amosoftItems.amosoft_vendor_code', array('amosoft_vendor_name'));
|
38 |
+
$this->setCollection($collection);
|
39 |
+
return parent::_prepareCollection();
|
40 |
+
}
|
41 |
+
|
42 |
+
protected function _getStore()
|
43 |
+
{
|
44 |
+
$storeId = (int) $this->getRequest()->getParam('store', 0);
|
45 |
+
return Mage::app()->getStore($storeId);
|
46 |
+
}
|
47 |
+
|
48 |
+
protected function prepareOptionValue(){
|
49 |
+
|
50 |
+
$itemStatus = array_merge(Mage::helper('dropship')->getItemStatuses(), array('Sent to Vendor'));
|
51 |
+
foreach($itemStatus as $status )
|
52 |
+
{
|
53 |
+
$options[$status] = Mage::helper('dropship')->__($status);
|
54 |
+
}
|
55 |
+
return $options;
|
56 |
+
}
|
57 |
+
|
58 |
+
protected function _prepareColumns()
|
59 |
+
{
|
60 |
+
$this->addColumn('increment_id', array(
|
61 |
+
'header' => Mage::helper('dropship')->__('Order #'),
|
62 |
+
'align' =>'right',
|
63 |
+
'width' => '50px',
|
64 |
+
'index' => 'increment_id',
|
65 |
+
));
|
66 |
+
$this->addColumn('created_at', array(
|
67 |
+
'header' => Mage::helper('dropship')->__('Order Date'),
|
68 |
+
'align' =>'right',
|
69 |
+
'width' => '50px',
|
70 |
+
'type' => 'datetime',
|
71 |
+
'filter_index' => 'salesOrder.created_at',
|
72 |
+
'index' => 'created_at',
|
73 |
+
));
|
74 |
+
$this->addColumn('magento_sku', array(
|
75 |
+
'header' => Mage::helper('dropship')->__('Product Sku'),
|
76 |
+
'align' =>'right',
|
77 |
+
'width' => '50px',
|
78 |
+
"filter_index" => "amosoftItems.sku",
|
79 |
+
'index' => 'magento_sku',
|
80 |
+
));
|
81 |
+
|
82 |
+
$this->addColumn('amosoft_vendor_name', array(
|
83 |
+
'header' => Mage::helper('dropship')->__('Vendor'),
|
84 |
+
'align' =>'left',
|
85 |
+
'width' => '80px',
|
86 |
+
'index' => 'amosoft_vendor_name',
|
87 |
+
));
|
88 |
+
|
89 |
+
|
90 |
+
$this->addColumn('amosoft_vendor_sku', array(
|
91 |
+
'header' => Mage::helper('dropship')->__('Vendor Sku'),
|
92 |
+
'align' =>'left',
|
93 |
+
'width' => '80px',
|
94 |
+
'index' => 'amosoft_vendor_sku',
|
95 |
+
));
|
96 |
+
$store = $this->_getStore();
|
97 |
+
$this->addColumn('vendor_cost', array(
|
98 |
+
'header' => Mage::helper('dropship')->__('Vendor Price'),
|
99 |
+
'align' =>'left',
|
100 |
+
'width' => '80px',
|
101 |
+
'index' => 'vendor_cost',
|
102 |
+
'type' => 'price',
|
103 |
+
'currency_code' => $store->getBaseCurrency()->getCode(),
|
104 |
+
));
|
105 |
+
|
106 |
+
$this->addColumn('shipping_cost', array(
|
107 |
+
'header' => Mage::helper('dropship')->__('Vendor Ship Cost'),
|
108 |
+
'align' =>'left',
|
109 |
+
'width' => '80px',
|
110 |
+
'index' => 'shipping_cost',
|
111 |
+
'type' => 'price',
|
112 |
+
'currency_code' => $store->getBaseCurrency()->getCode(),
|
113 |
+
));
|
114 |
+
|
115 |
+
$this->addColumn('row_total', array(
|
116 |
+
'header' => Mage::helper('dropship')->__('Website Product Price'),
|
117 |
+
'align' =>'left',
|
118 |
+
'width' => '80px',
|
119 |
+
'index' => 'row_total',
|
120 |
+
'type' => 'price',
|
121 |
+
'currency_code' => $store->getBaseCurrency()->getCode(),
|
122 |
+
));
|
123 |
+
$this->addColumn('qty_ordered', array(
|
124 |
+
'header' => Mage::helper('dropship')->__('Qty'),
|
125 |
+
'align' =>'left',
|
126 |
+
'width' => '80px',
|
127 |
+
'index' => 'qty_ordered',
|
128 |
+
));
|
129 |
+
|
130 |
+
|
131 |
+
$this->addColumn('amosoft_item_status', array(
|
132 |
+
'header' => Mage::helper('dropship')->__('Drop Ship Status'),
|
133 |
+
'align' =>'left',
|
134 |
+
'width' => '80px',
|
135 |
+
'index' => 'amosoft_item_status',
|
136 |
+
'type' => 'options',
|
137 |
+
'options' => $this->prepareOptionValue()
|
138 |
+
));
|
139 |
+
|
140 |
+
$this->addColumn('status', array(
|
141 |
+
'header' => Mage::helper('dropship')->__('Order Status'),
|
142 |
+
'align' =>'left',
|
143 |
+
'width' => '80px',
|
144 |
+
'index' => 'status',
|
145 |
+
'type' => 'options',
|
146 |
+
'options' => Mage::getSingleton('sales/order_config')->getStatuses(),
|
147 |
+
));
|
148 |
+
|
149 |
+
$this->addColumn('updated_by', array(
|
150 |
+
'header' => Mage::helper('dropship')->__('Last Updated By'),
|
151 |
+
'align' =>'left',
|
152 |
+
'width' => '80px',
|
153 |
+
'index' => 'updated_by',
|
154 |
+
'type' => 'options',
|
155 |
+
'options' => array(
|
156 |
+
'Pending' => Mage::helper('catalog')->__('Pending'),
|
157 |
+
'User' => Mage::helper('catalog')->__('User'),
|
158 |
+
'Cron' => Mage::helper('catalog')->__('Cron'),
|
159 |
+
'Amosoft' => Mage::helper('catalog')->__('Amosoft'),
|
160 |
+
)
|
161 |
+
));
|
162 |
+
$this->addColumn('updated_at', array(
|
163 |
+
'header' => Mage::helper('dropship')->__('Updated On'),
|
164 |
+
'align' =>'right',
|
165 |
+
'width' => '50px',
|
166 |
+
'type' => 'datetime',
|
167 |
+
'filter_index' => 'amosoftItems.updated_at',
|
168 |
+
'index' => 'updated_at',
|
169 |
+
|
170 |
+
));
|
171 |
+
|
172 |
+
$this->addColumn('view',
|
173 |
+
array(
|
174 |
+
'header' => Mage::helper('sales')->__('Action'),
|
175 |
+
'width' => '50px',
|
176 |
+
'type' => 'action',
|
177 |
+
'renderer' => 'dropship/adminhtml_sourcing_history_renderer_action',
|
178 |
+
'filter' => false,
|
179 |
+
'sortable' => false,
|
180 |
+
'index' => 'stores',
|
181 |
+
'is_system' => true,
|
182 |
+
));
|
183 |
+
|
184 |
+
$this->addColumn('action',
|
185 |
+
array(
|
186 |
+
'header' => Mage::helper('dropship')->__('Edit'),
|
187 |
+
'width' => '100px',
|
188 |
+
'type' => 'textaction',
|
189 |
+
'filter' => false,
|
190 |
+
'sortable' => false,
|
191 |
+
'index' => 'stores',
|
192 |
+
'is_system' => true,
|
193 |
+
'renderer' => 'Amosoft_Dropship_Block_Adminhtml_Widget_Grid_Column_Textaction'
|
194 |
+
));
|
195 |
+
|
196 |
+
|
197 |
+
$this->addExportType('*/*/exportCsv', Mage::helper('dropship')->__('CSV'));
|
198 |
+
$this->addExportType('*/*/exportXml', Mage::helper('dropship')->__('XML'));
|
199 |
+
return parent::_prepareColumns();
|
200 |
+
}
|
201 |
+
|
202 |
+
public function getRowUrl($row)
|
203 |
+
{
|
204 |
+
//return $this->getUrl('*/*/edit', array('amosoft_item_id' => $row->getAmosoftItemId()));
|
205 |
+
}
|
206 |
+
public function getGridUrl()
|
207 |
+
{
|
208 |
+
//return $this->getUrl('*/*/grid', array('_current'=>true));
|
209 |
+
}
|
210 |
+
|
211 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing/History/Renderer/Action.php
ADDED
@@ -0,0 +1,30 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Adminhtml sourcing grid block action item renderer
|
4 |
+
*
|
5 |
+
* @category Amosoft
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
class Amosoft_Dropship_Block_Adminhtml_Sourcing_History_Renderer_Action
|
9 |
+
extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Action
|
10 |
+
{
|
11 |
+
/**
|
12 |
+
* Render grid row
|
13 |
+
*
|
14 |
+
* @param Varien_Object $row
|
15 |
+
* @return string
|
16 |
+
*/
|
17 |
+
public function render(Varien_Object $row)
|
18 |
+
{
|
19 |
+
$actions[] = array(
|
20 |
+
'caption' => Mage::helper('sales')->__('View Order'),
|
21 |
+
'url' => $this->getUrl('adminhtml/sales_order/view', array('order_id' => $row->getItemOrderId())));
|
22 |
+
$actions[] = array(
|
23 |
+
'caption' => Mage::helper('sales')->__('View History'),
|
24 |
+
'url' => $this->getUrl('*/*/viewOrderItemHistory', array('amosoft_item_id' => $row->getItemId())))
|
25 |
+
;
|
26 |
+
|
27 |
+
$this->getColumn()->setActions($actions);
|
28 |
+
return parent::render($row);
|
29 |
+
}
|
30 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing/History/View.php
ADDED
@@ -0,0 +1,47 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Adminhtml quotation view
|
5 |
+
*
|
6 |
+
* @category Amosoft
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*
|
9 |
+
*/
|
10 |
+
class Amosoft_Dropship_Block_Adminhtml_Sourcing_History_View extends Mage_Adminhtml_Block_Widget_Form_Container
|
11 |
+
{
|
12 |
+
|
13 |
+
public function __construct()
|
14 |
+
{
|
15 |
+
$this->_objectId = 'amosoft_item_id';
|
16 |
+
$this->_blockGroup = 'dropship';
|
17 |
+
$this->_controller = 'adminhtml_sourcing_history';
|
18 |
+
$this->_mode = 'view';
|
19 |
+
parent::__construct();
|
20 |
+
$data = array(
|
21 |
+
'label' => 'Back',
|
22 |
+
'onclick' => 'setLocation(\'' . $this->getUrl('*/*/sourcinggrid') . '\')',
|
23 |
+
'class' => 'back'
|
24 |
+
);
|
25 |
+
$this->addButton ('custom_back', $data, 0, 100, 'header');
|
26 |
+
$this->_removeButton('back');
|
27 |
+
$this->_removeButton('reset');
|
28 |
+
$this->_removeButton('save');
|
29 |
+
$this->_removeButton('delete');
|
30 |
+
$this->setId('adminhtml_sourcing_history_view');
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Get Header title
|
35 |
+
*
|
36 |
+
* @return string
|
37 |
+
*/
|
38 |
+
public function getHeaderText()
|
39 |
+
{
|
40 |
+
$itemId = $this->getRequest()->getParam('amosoft_item_id');
|
41 |
+
$orderItems = Mage::getModel('dropship/orderitems')->load($itemId, 'item_id');
|
42 |
+
$orderId = Mage::getModel('sales/order')->load($orderItems->getItemOrderId())->getIncrementId();
|
43 |
+
$createdDate = Mage::helper('core')->formatDate($orderItems->getCreatedAt(), 'medium', true);
|
44 |
+
return Mage::helper('sales')->__('Item Sku %s | Order # %s | %s', $orderItems->getSku(), $orderId, $createdDate);
|
45 |
+
}
|
46 |
+
|
47 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing/History/View/Form.php
ADDED
@@ -0,0 +1,30 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Adminhtml sourcing history view panel
|
4 |
+
*
|
5 |
+
* @category Amosoft
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
|
9 |
+
class Amosoft_Dropship_Block_Adminhtml_Sourcing_History_View_Form extends Mage_Adminhtml_Block_Template
|
10 |
+
{
|
11 |
+
protected function _construct()
|
12 |
+
{
|
13 |
+
parent::_construct();
|
14 |
+
$this->setTemplate('amosoft/item_order_history.phtml');
|
15 |
+
}
|
16 |
+
|
17 |
+
/*
|
18 |
+
* To get the order item status history from serialized to unserialized form
|
19 |
+
*
|
20 |
+
* @return array
|
21 |
+
*/
|
22 |
+
public function getHistory()
|
23 |
+
{
|
24 |
+
$ItemId = Mage::app()->getRequest()->getParam('amosoft_item_id');
|
25 |
+
$itemStatusHistory = Mage::getModel ( 'dropship/orderitems' )->load($ItemId, 'item_id')->getItemStatusHistory();
|
26 |
+
return unserialize($itemStatusHistory);
|
27 |
+
}
|
28 |
+
|
29 |
+
|
30 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Sourcing/History/View/Tabs.php
ADDED
@@ -0,0 +1,30 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Sourcing History view tabs
|
4 |
+
*
|
5 |
+
* @category Amosoft
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
class Amosoft_Dropship_Block_Adminhtml_Sourcing_History_View_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
|
9 |
+
{
|
10 |
+
|
11 |
+
public function __construct()
|
12 |
+
{
|
13 |
+
parent::__construct();
|
14 |
+
$this->setId('adminhtml_sourcing_history_view');
|
15 |
+
$this->setDestElementId('history_view');
|
16 |
+
$this->setTitle(Mage::helper('dropship')->__('Order Item History'));
|
17 |
+
}
|
18 |
+
|
19 |
+
protected function _beforeToHtml()
|
20 |
+
{
|
21 |
+
$this->addTab('form_section', array(
|
22 |
+
'label' => Mage::helper('dropship')->__('Order Item History'),
|
23 |
+
'title' => Mage::helper('dropship')->__('Order Item History'),
|
24 |
+
));
|
25 |
+
|
26 |
+
return parent::_beforeToHtml();
|
27 |
+
}
|
28 |
+
|
29 |
+
|
30 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/System/Config/Crontime.php
ADDED
@@ -0,0 +1,59 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
class Amosoft_Dropship_Block_Adminhtml_System_Config_Crontime extends Mage_Adminhtml_Block_System_Config_Form_Field
|
9 |
+
{
|
10 |
+
public function getName($name)
|
11 |
+
{
|
12 |
+
if (strpos($name, '[]') === false) {
|
13 |
+
$name.= '[]';
|
14 |
+
}
|
15 |
+
return $name;
|
16 |
+
}
|
17 |
+
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
|
18 |
+
{
|
19 |
+
$element->addClass('select');
|
20 |
+
|
21 |
+
$value_hrs = 0;
|
22 |
+
$value_min = 0;
|
23 |
+
|
24 |
+
if( $value = $element->getValue() ) {
|
25 |
+
$values = explode(',', $value);
|
26 |
+
if( is_array($values) && count($values) == 2 ) {
|
27 |
+
$value_hrs = $values[0];
|
28 |
+
$value_min = $values[1];
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
32 |
+
$html = '<input type="hidden" id="' . $element->getHtmlId() . '" />';
|
33 |
+
$html .= '<div style = "float: left;width: 100px;"><select name="'. $this->getName($element->getName()) . '" style="width:auto">'."\n";
|
34 |
+
|
35 |
+
for( $i=-2;$i<24;$i++ ) {
|
36 |
+
$hour = $i;
|
37 |
+
if($i == -1 )
|
38 |
+
$html.= '<option value="'.$hour.'" '. ( ($value_hrs == $i) ? 'selected="selected"' : '' ) .'> Every-Hour </option>';
|
39 |
+
else if($i == -2)
|
40 |
+
$html.= '<option value="-2" selected="selected">Please select</option>';
|
41 |
+
else
|
42 |
+
$html.= '<option value="'.$hour.'" '. ( ($value_hrs == $i) ? 'selected="selected"' : '' ) .'>' . $hour . '</option>';
|
43 |
+
}
|
44 |
+
$html.= '</select>'."\n <p class='note'><span>Hours</span></p> </div>";
|
45 |
+
|
46 |
+
$html.= '<div style = "padding-left:15px;float: left;width: 100px;"><select name="'. $this->getName($element->getName()) . '" style="width:auto">'."\n";
|
47 |
+
|
48 |
+
for( $i=-1;$i<60;$i++ ) {
|
49 |
+
$hour = $i;
|
50 |
+
if($i == -1 )
|
51 |
+
$html.= '<option value="'.$hour.'" '. ( ($value_min == $i) ? 'selected="selected"' : '' ) .'> Every-Min </option>';
|
52 |
+
else
|
53 |
+
$html.= '<option value="'.$hour.'" '. ( ($value_min == $i) ? 'selected="selected"' : '' ) .'>' . $hour . '</option>';
|
54 |
+
}
|
55 |
+
$html.= '</select>'."\n <p class='note'><span>Minutes</span></p></div>";
|
56 |
+
$html.= $element->getAfterElementHtml();
|
57 |
+
return $html;
|
58 |
+
}
|
59 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/System/Config/Fieldset/Hint.php
ADDED
@@ -0,0 +1,44 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
class Amosoft_Dropship_Block_Adminhtml_System_Config_Fieldset_Hint
|
9 |
+
extends Mage_Adminhtml_Block_Abstract
|
10 |
+
implements Varien_Data_Form_Element_Renderer_Interface
|
11 |
+
{
|
12 |
+
protected $_template = 'amosoft/system/config/fieldset/hint.phtml';
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Render fieldset html
|
16 |
+
*
|
17 |
+
* @param Varien_Data_Form_Element_Abstract $element
|
18 |
+
* @return string
|
19 |
+
*/
|
20 |
+
|
21 |
+
|
22 |
+
public function render(Varien_Data_Form_Element_Abstract $element)
|
23 |
+
{
|
24 |
+
|
25 |
+
return $this->toHtml();
|
26 |
+
}
|
27 |
+
|
28 |
+
|
29 |
+
|
30 |
+
public function getStoreList(){
|
31 |
+
|
32 |
+
return Mage::getModel('dropship/system_config_source_store')->toOptionArray();
|
33 |
+
|
34 |
+
}
|
35 |
+
|
36 |
+
|
37 |
+
|
38 |
+
|
39 |
+
|
40 |
+
|
41 |
+
|
42 |
+
|
43 |
+
|
44 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/System/Config/Helplink.php
ADDED
@@ -0,0 +1,18 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Block_Adminhtml_System_Config_Helplink extends Mage_Adminhtml_Block_System_Config_Form_Field
|
10 |
+
{
|
11 |
+
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
|
12 |
+
{
|
13 |
+
$url = Mage::helper('dropship')->getConfigObject('apiconfig/helpurl/link');
|
14 |
+
$html = parent::_getElementHtml($element);
|
15 |
+
$html .= "<a href='{$url}' target='_blank' title='amosoft'>Visit dropship Knowledge Base</a>";
|
16 |
+
return $html;
|
17 |
+
}
|
18 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/System/Config/Singuplink.php
ADDED
@@ -0,0 +1,18 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Block_Adminhtml_System_Config_Singuplink extends Mage_Adminhtml_Block_System_Config_Form_Field
|
10 |
+
{
|
11 |
+
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
|
12 |
+
{
|
13 |
+
$url = 'https://portal.amosoft.com/';
|
14 |
+
$html = parent::_getElementHtml($element);
|
15 |
+
$html .= "<a href='{$url}' target='_blank' title='amosoft'>Sign up here</a>";
|
16 |
+
return $html;
|
17 |
+
}
|
18 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/System/Config/Submitbutton.php
ADDED
@@ -0,0 +1,25 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
class Amosoft_Dropship_Block_Adminhtml_System_Config_Submitbutton
|
9 |
+
extends Mage_Adminhtml_Block_System_Config_Form_Field
|
10 |
+
{
|
11 |
+
/*
|
12 |
+
* Set template
|
13 |
+
*/
|
14 |
+
protected function _construct()
|
15 |
+
{
|
16 |
+
parent::_construct();
|
17 |
+
}
|
18 |
+
|
19 |
+
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
|
20 |
+
{
|
21 |
+
$element->setReadonly('readonly');
|
22 |
+
return parent::_getElementHtml($element);
|
23 |
+
}
|
24 |
+
|
25 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/System/Config/Time.php
ADDED
@@ -0,0 +1,76 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
class Amosoft_Dropship_Block_Adminhtml_System_Config_Time extends Mage_Adminhtml_Block_System_Config_Form_Field
|
9 |
+
{
|
10 |
+
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
|
11 |
+
{
|
12 |
+
$html = '';
|
13 |
+
if(strstr($element->getName(),'schedule_backorder') ){
|
14 |
+
$selectedHourValue = Mage::getStoreConfig('amosoft_sourcing/cron_settings/schedule_backorder_hour');
|
15 |
+
$selectedMinValue = Mage::getStoreConfig('amosoft_sourcing/cron_settings/schedule_backorder_min');
|
16 |
+
$idHour = $element->getHtmlId().'_hour';
|
17 |
+
$nameHour = str_replace("schedule_backorder","schedule_backorder_hour",$element->getName());
|
18 |
+
$idMin = $element->getHtmlId().'_min';
|
19 |
+
$nameMin = str_replace("schedule_backorder","schedule_backorder_min",$element->getName());
|
20 |
+
}else {
|
21 |
+
$selectedHourValue = Mage::getStoreConfig('amosoft_sourcing/cron_settings/schedule_sourcing_hour');
|
22 |
+
$selectedMinValue = Mage::getStoreConfig('amosoft_sourcing/cron_settings/schedule_sourcing_min');
|
23 |
+
$idHour = $element->getHtmlId().'_hour';
|
24 |
+
$nameHour = str_replace("schedule_sourcing","schedule_sourcing_hour",$element->getName());
|
25 |
+
$idMin = $element->getHtmlId().'_min';
|
26 |
+
$nameMin = str_replace("schedule_sourcing","schedule_sourcing_min",$element->getName());
|
27 |
+
|
28 |
+
}
|
29 |
+
|
30 |
+
$html .= '<div style="float:left;width:100px"><select onchange = "onChangeHour'.$idHour.'(this.value)" style="width:109px" id="'.$idHour.'" name="'.$nameHour.'" class=" select">';
|
31 |
+
for( $i=0;$i<=24;$i++ ) {
|
32 |
+
$isSelected = ($selectedHourValue == $i) ? 'selected="selected"':'';
|
33 |
+
$html .= "<option value='{$i}'{$isSelected}>{$i}</option>";
|
34 |
+
}
|
35 |
+
|
36 |
+
$html .= '</select>';
|
37 |
+
$html .= '<p class="note"><span>Hours.</span></p></div>';
|
38 |
+
//$html .= ' ';
|
39 |
+
$html .= '<div style="float:right;width:100px"><select style="width:109px" id="'.$idMin.'" name="'.$nameMin.'" class=" select">';
|
40 |
+
|
41 |
+
$j = 0;
|
42 |
+
for( $i=10;$i<=60;$i++ ) {
|
43 |
+
|
44 |
+
if($i >= $j+10 ){
|
45 |
+
$isSelected = ($selectedMinValue == $i) ? 'selected="selected"':'';
|
46 |
+
$html .= "<option value='{$i}'{$isSelected}>{$i}</option>";
|
47 |
+
$j = $j+10;
|
48 |
+
}
|
49 |
+
}
|
50 |
+
|
51 |
+
$html .= '</select>';
|
52 |
+
$html .= '<p class="note"><span>Minutes.</span></p></div>';
|
53 |
+
$html .= '<script type="text/javascript">//<![CDATA[
|
54 |
+
function onChangeHour'.$idHour.'(value){
|
55 |
+
|
56 |
+
var x = document.getElementById("'.$idMin.'");
|
57 |
+
if(value > 0){
|
58 |
+
var options = $$("select#'.$idMin.' option");
|
59 |
+
var len = options.length;
|
60 |
+
for (var i = 0; i < len; i++) {
|
61 |
+
if(options[i].value == 0)
|
62 |
+
return;
|
63 |
+
}
|
64 |
+
var option = document.createElement("option");
|
65 |
+
option.text = "0";
|
66 |
+
option.value = "0";
|
67 |
+
x.add(option,0);
|
68 |
+
}else
|
69 |
+
{
|
70 |
+
//x.remove(0);
|
71 |
+
}
|
72 |
+
}
|
73 |
+
//]]></script>';
|
74 |
+
return $html;
|
75 |
+
}
|
76 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Upload.php
ADDED
@@ -0,0 +1,110 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Block_Adminhtml_Upload extends Mage_Adminhtml_Block_Widget_Form_Container
|
10 |
+
{
|
11 |
+
protected $_headerText = 'Upload Vendor Product';
|
12 |
+
protected $_isProductSetupMode = false;
|
13 |
+
public function __construct()
|
14 |
+
{
|
15 |
+
$this->addButton('download_sample_csv',array(
|
16 |
+
'label' => 'Download Sample Csv',
|
17 |
+
'onclick' => 'downloadSampleCsv()',
|
18 |
+
'class' => 'save amosoft-button',
|
19 |
+
));
|
20 |
+
$this->addButton('history',array(
|
21 |
+
'label' => 'History',
|
22 |
+
'onclick' => 'setLocation(\'' . $this->getUrl('*/adminhtml_upload/vendorsuploadhistory') .'\')',
|
23 |
+
'class' => 'save amosoft-button',
|
24 |
+
));
|
25 |
+
parent::__construct();
|
26 |
+
|
27 |
+
$this->removeButton('back')
|
28 |
+
->removeButton('reset')
|
29 |
+
->_updateButton('save', 'label', $this->__('Upload'))
|
30 |
+
->_updateButton('save', 'id', 'upload_button');
|
31 |
+
$this->_formScripts[] = "
|
32 |
+
function uploadVendorProductStep(){
|
33 |
+
var activeRankers = ".$this->getActiveRankers()."
|
34 |
+
var url;
|
35 |
+
var selectBox = $('vendor');
|
36 |
+
if(selectBox.selectedIndex <= 0 ){
|
37 |
+
alert('please select a Vendor');
|
38 |
+
return;
|
39 |
+
}
|
40 |
+
var r = confirm('Are you sure you want to setup this supplier for all Magento Products?');
|
41 |
+
if (r == true) {
|
42 |
+
if(activeRankers.indexOf(selectBox.value) == -1)
|
43 |
+
{
|
44 |
+
alert('supplier is Inactive - Cannot Setup Vendor on All Products');
|
45 |
+
return;
|
46 |
+
}
|
47 |
+
url = '". $this->getSetupUrl() ."amosoft_vendor_code/'+selectBox.value;
|
48 |
+
//alert(url);
|
49 |
+
window.open(url);
|
50 |
+
$('vendor_product_setup').addClassName('disabled');
|
51 |
+
$('vendor_product_setup').disable();
|
52 |
+
} else {
|
53 |
+
return;
|
54 |
+
}
|
55 |
+
}";
|
56 |
+
//->_updateButton('save', 'onclick', 'editForm.postToFrame();');
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Internal constructor
|
61 |
+
*
|
62 |
+
* @return void
|
63 |
+
*/
|
64 |
+
protected function _construct()
|
65 |
+
{
|
66 |
+
parent::_construct();
|
67 |
+
$this->_blockGroup = 'dropship';
|
68 |
+
$this->_controller = 'adminhtml_upload';
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* set header text
|
73 |
+
*
|
74 |
+
* @return string
|
75 |
+
*/
|
76 |
+
public function setHeaderText($header)
|
77 |
+
{
|
78 |
+
return $this->_headerText = $header ;
|
79 |
+
}
|
80 |
+
public function setProductSetupMode($bool = false)
|
81 |
+
{
|
82 |
+
$this->_isProductSetupMode = $bool;
|
83 |
+
}
|
84 |
+
public function getProductSetupMode()
|
85 |
+
{
|
86 |
+
return $this->_isProductSetupMode;
|
87 |
+
}
|
88 |
+
public function getFormHtml()
|
89 |
+
{
|
90 |
+
$this->getChild('form')->setData('action', $this->getSaveUrl());
|
91 |
+
$this->getChild('form')->setData('productsetupmode', $this->_isProductSetupMode);
|
92 |
+
$this->getChild('form')->setData('legendtext', $this->_headerText);
|
93 |
+
return $this->getChildHtml('form');
|
94 |
+
}
|
95 |
+
protected function getActiveRankers()
|
96 |
+
{
|
97 |
+
$rankersArray = array();
|
98 |
+
$collection = Mage::getModel('dropship/ranking')->getCollection()->addFieldToFilter('is_dropship','yes');
|
99 |
+
if($collection->count() > 0){
|
100 |
+
foreach($collection as $data){
|
101 |
+
$rankersArray[] = $data->getAmosoftVendorCode();
|
102 |
+
}
|
103 |
+
}
|
104 |
+
return Mage::helper('core')->jsonEncode($rankersArray);
|
105 |
+
}
|
106 |
+
protected function getSetupUrl()
|
107 |
+
{
|
108 |
+
return $this->getUrl('*/adminhtml_upload/run');
|
109 |
+
}
|
110 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Upload/Bulkassign.php
ADDED
@@ -0,0 +1,182 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
|
9 |
+
class Amosoft_Dropship_Block_Adminhtml_Upload_Bulkassign extends Mage_Adminhtml_Block_Abstract
|
10 |
+
{
|
11 |
+
/**
|
12 |
+
* Flag for batch model
|
13 |
+
* @var boolean
|
14 |
+
*/
|
15 |
+
protected $_batchModelPrepared = false;
|
16 |
+
/**
|
17 |
+
* Batch model instance
|
18 |
+
* @var Mage_Dataflow_Model_Batch
|
19 |
+
*/
|
20 |
+
protected $_batchModel = null;
|
21 |
+
/**
|
22 |
+
* Preparing batch model (initialization)
|
23 |
+
* @return Mage_Adminhtml_Block_System_Convert_Profile_Run
|
24 |
+
*/
|
25 |
+
|
26 |
+
protected function _construct()
|
27 |
+
{
|
28 |
+
parent::_construct();
|
29 |
+
Mage::getSingleton('adminhtml/session')->setTerminateExecution(false);
|
30 |
+
|
31 |
+
|
32 |
+
}
|
33 |
+
protected function _prepareBatchModel()
|
34 |
+
{
|
35 |
+
if ($this->_batchModelPrepared) {
|
36 |
+
return $this;
|
37 |
+
}
|
38 |
+
$this->setShowFinished(true);
|
39 |
+
$batchModel = Mage::getModel('dropship/uploadvendor')->prepareBulkassignmentCollection($this->getBulkVendorCode());
|
40 |
+
if (count($batchModel) > 0) {
|
41 |
+
|
42 |
+
$numberOfRecords = 100;
|
43 |
+
$this->setShowFinished(false);
|
44 |
+
$importIds = $batchModel;
|
45 |
+
$this->setBatchItemsCount(count($batchModel));
|
46 |
+
$this->setBatchConfig(
|
47 |
+
array(
|
48 |
+
'styles' => array(
|
49 |
+
'error' => array(
|
50 |
+
'icon' => Mage::getDesign()->getSkinUrl('images/error_msg_icon.gif'),
|
51 |
+
'bg' => '#FDD'
|
52 |
+
),
|
53 |
+
'message' => array(
|
54 |
+
'icon' => Mage::getDesign()->getSkinUrl('images/fam_bullet_success.gif'),
|
55 |
+
'bg' => '#DDF'
|
56 |
+
),
|
57 |
+
'loader' => Mage::getDesign()->getSkinUrl('images/ajax-loader.gif')
|
58 |
+
),
|
59 |
+
'template' => '<li style="#{style}" id="#{id}">'
|
60 |
+
. '<img id="#{id}_img" src="#{image}" class="v-middle" style="margin-right:5px"/>'
|
61 |
+
. '<span id="#{id}_status" class="text">#{text}</span>'
|
62 |
+
. '</li>',
|
63 |
+
'text' => $this->__('Processed <strong>%s%% %s/%d</strong> records', '#{percent}', '#{updated}', $this->getBatchItemsCount()),
|
64 |
+
'successText' => $this->__('Imported <strong>%s</strong> records', '#{updated}')
|
65 |
+
)
|
66 |
+
);
|
67 |
+
$jsonIds = array_chunk($importIds, $numberOfRecords);
|
68 |
+
$importData = array();
|
69 |
+
foreach ($jsonIds as $part => $ids) {
|
70 |
+
$importData[] = array(
|
71 |
+
'vendor_code' => $this->getBulkVendorCode(),
|
72 |
+
'rows[]' => $ids
|
73 |
+
);
|
74 |
+
}
|
75 |
+
$this->setImportData($importData);
|
76 |
+
|
77 |
+
}
|
78 |
+
$this->_batchModelPrepared = true;
|
79 |
+
return count($batchModel);
|
80 |
+
}
|
81 |
+
/**
|
82 |
+
* Return a batch model instance
|
83 |
+
* @return Mage_Dataflow_Model_Batch
|
84 |
+
*/
|
85 |
+
protected function _getBatchModel()
|
86 |
+
{
|
87 |
+
return $this->_batchModel;
|
88 |
+
}
|
89 |
+
/**
|
90 |
+
* Return a batch model config JSON
|
91 |
+
* @return string
|
92 |
+
*/
|
93 |
+
public function getBatchConfigJson()
|
94 |
+
{
|
95 |
+
return Mage::helper('core')->jsonEncode(
|
96 |
+
$this->getBatchConfig()
|
97 |
+
);
|
98 |
+
}
|
99 |
+
/**
|
100 |
+
* Encoding to JSON
|
101 |
+
* @param string $source
|
102 |
+
* @return string JSON
|
103 |
+
*/
|
104 |
+
public function jsonEncode($source)
|
105 |
+
{
|
106 |
+
return Mage::helper('core')->jsonEncode($source);
|
107 |
+
}
|
108 |
+
/**
|
109 |
+
* Get a profile
|
110 |
+
* @return object
|
111 |
+
*/
|
112 |
+
public function getBulkVendorCode()
|
113 |
+
{
|
114 |
+
return Mage::registry('bulk_vendor_Code');
|
115 |
+
}
|
116 |
+
/**
|
117 |
+
* Generating form key
|
118 |
+
* @return string
|
119 |
+
*/
|
120 |
+
public function getFormKey()
|
121 |
+
{
|
122 |
+
return Mage::getSingleton('core/session')->getFormKey();
|
123 |
+
}
|
124 |
+
/**
|
125 |
+
* Return batch model and initialize it if need
|
126 |
+
* @return Mage_Dataflow_Model_Batch
|
127 |
+
*/
|
128 |
+
public function getBatchModel()
|
129 |
+
{
|
130 |
+
return $this->_prepareBatchModel();
|
131 |
+
}
|
132 |
+
/**
|
133 |
+
* Generating exceptions data
|
134 |
+
* @return array
|
135 |
+
*/
|
136 |
+
public function getExceptions()
|
137 |
+
{
|
138 |
+
if (!is_null(parent::getExceptions()))
|
139 |
+
return parent::getExceptions();
|
140 |
+
$exceptions = array();
|
141 |
+
$this->getProfile()->run();
|
142 |
+
foreach ($this->getProfile()->getExceptions() as $e) {
|
143 |
+
switch ($e->getLevel()) {
|
144 |
+
case Varien_Convert_Exception::FATAL:
|
145 |
+
$img = 'error_msg_icon.gif';
|
146 |
+
$liStyle = 'background-color:#FBB; ';
|
147 |
+
break;
|
148 |
+
case Varien_Convert_Exception::ERROR:
|
149 |
+
$img = 'error_msg_icon.gif';
|
150 |
+
$liStyle = 'background-color:#FDD; ';
|
151 |
+
break;
|
152 |
+
case Varien_Convert_Exception::WARNING:
|
153 |
+
$img = 'fam_bullet_error.gif';
|
154 |
+
$liStyle = 'background-color:#FFD; ';
|
155 |
+
break;
|
156 |
+
case Varien_Convert_Exception::NOTICE:
|
157 |
+
$img = 'fam_bullet_success.gif';
|
158 |
+
$liStyle = 'background-color:#DDF; ';
|
159 |
+
break;
|
160 |
+
}
|
161 |
+
$exceptions[] = array(
|
162 |
+
"style" => $liStyle,
|
163 |
+
"src" => Mage::getDesign()->getSkinUrl('images/'.$img),
|
164 |
+
"message" => $e->getMessage(),
|
165 |
+
"position" => $e->getPosition()
|
166 |
+
);
|
167 |
+
}
|
168 |
+
parent::setExceptions($exceptions);
|
169 |
+
return $exceptions;
|
170 |
+
}
|
171 |
+
|
172 |
+
|
173 |
+
|
174 |
+
protected function isManualUploadRunning(){
|
175 |
+
|
176 |
+
$result = false;
|
177 |
+
if(Mage::helper('dropship')->isProcessRunning('manual_upload')){
|
178 |
+
$result = true;
|
179 |
+
}
|
180 |
+
return $result;
|
181 |
+
}
|
182 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Upload/Edit/Button.php
ADDED
@@ -0,0 +1,22 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
class Amosoft_Dropship_Block_Adminhtml_Upload_Edit_Button extends Varien_Data_Form_Element_Abstract {
|
9 |
+
|
10 |
+
protected $_element;
|
11 |
+
|
12 |
+
public function getElementHtml()
|
13 |
+
{
|
14 |
+
$enable = ($this->getDisabled()) ? 'disabled' : "";
|
15 |
+
$required = ($this->getRequired()) ? 'required-entry' : "";
|
16 |
+
|
17 |
+
$html = '<button id="'.$this->getId().'" title="'.$this->getTitle().'" type="button" class="scalable save '.$required.' '.$enable.'" onclick="'.$this->getOnclick().'" '.$enable.'><span><span><span>'.$this->getValue().'</span></span></span></button>';
|
18 |
+
$html .= '<div id="email-list"></div>';
|
19 |
+
return $html;
|
20 |
+
|
21 |
+
}
|
22 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Upload/Edit/Form.php
ADDED
@@ -0,0 +1,63 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Block_Adminhtml_Upload_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
|
10 |
+
{
|
11 |
+
/**
|
12 |
+
* Add fieldset
|
13 |
+
*
|
14 |
+
* @return Mage_ImportExport_Block_Adminhtml_Import_Edit_Form
|
15 |
+
*/
|
16 |
+
protected function _prepareForm()
|
17 |
+
{
|
18 |
+
$isProductSetupMode = $this->getProductsetupmode();
|
19 |
+
$form = new Varien_Data_Form(array(
|
20 |
+
'id' => 'edit_form',
|
21 |
+
'action' => ($isProductSetupMode) ? $this->getUrl('*/adminhtml_upload/uploadFile') : $this->getUrl('*/*/uploadFile'),
|
22 |
+
'method' => 'post',
|
23 |
+
'enctype' => 'multipart/form-data'
|
24 |
+
));
|
25 |
+
$legend = ($isProductSetupMode) ? $this->getLegendtext() : 'Import Settings';
|
26 |
+
$fieldset = $form->addFieldset('base_fieldset', array('legend' => Mage::helper('importexport')->__($legend)));
|
27 |
+
$isProcessContinue = Mage::helper('dropship')->isProcessRunning('bulk_assign');
|
28 |
+
$fieldset->addField('productsetupmode', 'hidden', array(
|
29 |
+
'name' => 'productsetupmode',
|
30 |
+
'value' => $isProductSetupMode
|
31 |
+
));
|
32 |
+
//var_dump($isProcessContinue);
|
33 |
+
$fieldset->addField('vendor', 'select', array(
|
34 |
+
'name' => 'vendor',
|
35 |
+
'title' => Mage::helper('importexport')->__('Vendor'),
|
36 |
+
'label' => Mage::helper('importexport')->__('Vendor'),
|
37 |
+
'required' => true,
|
38 |
+
'values' => Mage::getModel('dropship/system_config_source_vendorlist')->getAllVendor()
|
39 |
+
));
|
40 |
+
if($isProductSetupMode){
|
41 |
+
$fieldset->addType('custombutton', 'Amosoft_Dropship_Block_Adminhtml_Upload_Edit_Button');
|
42 |
+
$fieldset->addField('vendor_product_setup', 'custombutton', array(
|
43 |
+
'name' => 'vendor_product_setup',
|
44 |
+
'title' => Mage::helper('importexport')->__('Setup Vendor on all Products'),
|
45 |
+
'required' => false,
|
46 |
+
'disabled' => ($isProcessContinue) ? true : false,
|
47 |
+
'value' => 'Setup Vendor on all Products',
|
48 |
+
'onclick' => 'uploadVendorProductStep()'
|
49 |
+
));
|
50 |
+
}
|
51 |
+
$fieldset->addField(Mage_ImportExport_Model_Import::FIELD_NAME_SOURCE_FILE, 'file', array(
|
52 |
+
'name' => Mage_ImportExport_Model_Import::FIELD_NAME_SOURCE_FILE,
|
53 |
+
'label' => Mage::helper('importexport')->__('Select File to Import'),
|
54 |
+
'title' => Mage::helper('importexport')->__('Select File to Import'),
|
55 |
+
'required' => true
|
56 |
+
));
|
57 |
+
|
58 |
+
$form->setUseContainer(true);
|
59 |
+
$this->setForm($form);
|
60 |
+
|
61 |
+
return parent::_prepareForm();
|
62 |
+
}
|
63 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Vendorproductuploadhistory.php
ADDED
@@ -0,0 +1,142 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Block_Adminhtml_Vendorproductuploadhistory extends Mage_Adminhtml_Block_Widget_Grid_Container
|
10 |
+
{
|
11 |
+
|
12 |
+
protected $_message = array(
|
13 |
+
'row_magento_sku'=>'Missing Data at Row(s) for Magento Sku row_num',
|
14 |
+
'row_vendor_sku'=>'Missing Data at Row(s) for Vendor Sku row_num',
|
15 |
+
'row_qty'=>'Bad Data for Qty at Row(s) row_num',
|
16 |
+
'row_cost'=>'Bad Data for Cost at Row(s) row_num',
|
17 |
+
'empty_file'=>'Sorry,we cant find the record to update inventory',
|
18 |
+
'inventory_update_error'=>'Error in updating magento product inventory, magento_sku',
|
19 |
+
'magento_sku_exists'=>'magento product sku not exist magento_sku',
|
20 |
+
'inventory_add_error'=>'Error in adding magento product inventory, magento_sku',
|
21 |
+
'combination_notexist'=>'Vendor Sku vendor_sku & Supplier code vendor_code combination does not exist',
|
22 |
+
'already_assigned'=>'Vendor sku vendor_sku is already been assigned for this vendor',
|
23 |
+
'duplicate_vendor_sku'=>'Vendor sku vendor_sku is duplicate in Magento Sku magento_sku for this supplier',
|
24 |
+
'combination_exist'=> 'Vendor sku vendor_sku or Supplier code vendor_code combination already present for Magento Sku magento_sku',
|
25 |
+
'data_notchnage'=> 'Cost & Qty for Vendor Sku vendor_sku & Supplier code vendor_code not changed',
|
26 |
+
'amosoft_upc_notexist'=> 'UPC attribute missing vendor_sku',
|
27 |
+
'amosoft_upc_multiple'=> 'Multiple Match found for UPC vendor_sku',
|
28 |
+
'amosoft_mnp_notexist'=> 'MNP attribute missing vendor_sku',
|
29 |
+
'amosoft_mnp_multiple'=> 'Multiple Match found for MNP vendor_sku',
|
30 |
+
'sku_multiple'=> 'Multiple Match found for SKU vendor_sku',
|
31 |
+
'attribute_notexist'=> 'Attribute assigned for Supplier code vendor_code does not exist for Vendor sku vendor_sku'
|
32 |
+
);
|
33 |
+
protected $_replace = array('magento_sku','vendor_sku','vendor_code');
|
34 |
+
public function __construct()
|
35 |
+
{
|
36 |
+
$backButtonUrl = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl('*/*/');
|
37 |
+
$this->_controller = 'adminhtml_ranking';
|
38 |
+
$this->_blockGroup = 'dropship';
|
39 |
+
$this->_headerText = Mage::helper('dropship')->__('Vendor Product Upload Log');
|
40 |
+
$this->__addBackButton = Mage::helper('dropship')->__('Back');
|
41 |
+
$this->addButton('back',array(
|
42 |
+
'label' => 'Back',
|
43 |
+
'onclick' => 'setLocation(\'' . $backButtonUrl .'\')',
|
44 |
+
'class' => 'back',
|
45 |
+
)
|
46 |
+
);
|
47 |
+
|
48 |
+
parent::__construct();
|
49 |
+
$this->removeButton('add');
|
50 |
+
|
51 |
+
}
|
52 |
+
|
53 |
+
public function getMessageArray(){
|
54 |
+
return $this->_message;
|
55 |
+
}
|
56 |
+
|
57 |
+
public function getReplaceValue(){
|
58 |
+
return $this->_replace;
|
59 |
+
}
|
60 |
+
public function getLogCollection(){
|
61 |
+
|
62 |
+
$conn = Mage::getModel('dropship/uploadvendor')->getDatabaseConnection();
|
63 |
+
$tableVendorImportLog = Mage::getSingleton ( 'core/resource' )->getTableName ( 'dropship/vendor_import_log' );
|
64 |
+
$select = $conn->select()->from($tableVendorImportLog)->order('created_at DESC');
|
65 |
+
$stmt = $conn->query($select);
|
66 |
+
$rows = $stmt->fetchAll();
|
67 |
+
return $rows;
|
68 |
+
}
|
69 |
+
|
70 |
+
public function getLogDescriptionCollection($error_id){
|
71 |
+
$conn = Mage::getModel('dropship/uploadvendor')->getDatabaseConnection();
|
72 |
+
$tableVendorImportLog = Mage::getSingleton ( 'core/resource' )->getTableName ( 'dropship/vendor_import_log_desc' );
|
73 |
+
$select = $conn->select()->from($tableVendorImportLog)->where('error_id ='.$error_id);
|
74 |
+
$stmt = $conn->query($select);
|
75 |
+
$rows = $stmt->fetchAll();
|
76 |
+
return $rows;
|
77 |
+
}
|
78 |
+
|
79 |
+
public function parseDescription($data,$vendorCode){
|
80 |
+
|
81 |
+
$decodedata = $this->prepareRowData($data);
|
82 |
+
if(!is_array($decodedata) || empty($decodedata))
|
83 |
+
return empty($decodedata) ? implode('',$decodedata) : $decodedata;
|
84 |
+
$htmlStart = '<ul>';
|
85 |
+
$htmlEnd = '</ul>';
|
86 |
+
foreach($decodedata as $data){
|
87 |
+
$msg = $this->_message[$data['error_type']];
|
88 |
+
|
89 |
+
if(is_array($data['value']) && !empty($data['value'])){
|
90 |
+
|
91 |
+
$htmlStart .= $this->genrateHtml($data['value'],$msg,$vendorCode);
|
92 |
+
}else{
|
93 |
+
$htmlStart .= '<li>'.str_replace('row_num',$data['value'],$msg).'</li>';
|
94 |
+
}
|
95 |
+
}
|
96 |
+
return $htmlStart.$htmlEnd;
|
97 |
+
}
|
98 |
+
|
99 |
+
public function genrateHtml($value,$msg,$vendorCode){
|
100 |
+
|
101 |
+
$string = $msg;
|
102 |
+
$value['vendor_code'] = $vendorCode;
|
103 |
+
foreach($this->_replace as $val){
|
104 |
+
|
105 |
+
if(strstr($string,$val))
|
106 |
+
$string = str_replace($val,$value[$val],$string);
|
107 |
+
}
|
108 |
+
|
109 |
+
return '<li>'.$string.'</li>';
|
110 |
+
}
|
111 |
+
|
112 |
+
public function prepareRowData($data)
|
113 |
+
{
|
114 |
+
$decodedata = array();
|
115 |
+
$dataTemp = array();
|
116 |
+
if(is_numeric($data))
|
117 |
+
{
|
118 |
+
$rowData = $this->getLogDescriptionCollection($data);
|
119 |
+
if(count($rowData) > 0)
|
120 |
+
{
|
121 |
+
foreach($rowData as $eachRow)
|
122 |
+
{
|
123 |
+
$decodedata[] = array_merge($dataTemp, $this->getDecodedJson($eachRow['description']));
|
124 |
+
}
|
125 |
+
}
|
126 |
+
}else
|
127 |
+
{
|
128 |
+
$decodedata = $this->getDecodedJson($data);
|
129 |
+
}
|
130 |
+
return $decodedata;
|
131 |
+
}
|
132 |
+
protected function getDecodedJson($data)
|
133 |
+
{
|
134 |
+
if(empty($data) || !Mage::helper('dropship')->isJson($data)){
|
135 |
+
return $data;
|
136 |
+
}
|
137 |
+
$data = trim($data,'"');
|
138 |
+
$data = trim($data,'\'');
|
139 |
+
$decodedata = Mage::helper('core')->jsonDecode($data);
|
140 |
+
return $decodedata;
|
141 |
+
}
|
142 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Widget/Grid/Column/Nameaction.php
ADDED
@@ -0,0 +1,29 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Block_Adminhtml_Widget_Grid_Column_Nameaction extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Action
|
11 |
+
{
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Renders column
|
15 |
+
*
|
16 |
+
* @param Varien_Object $row
|
17 |
+
* @return string
|
18 |
+
*/
|
19 |
+
public function render(Varien_Object $row)
|
20 |
+
{
|
21 |
+
$sku = $row->getData('product_sku');
|
22 |
+
$productObject = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
|
23 |
+
if ($productObject)
|
24 |
+
$out = $productObject->getName();
|
25 |
+
else
|
26 |
+
$out = '';
|
27 |
+
return $out;
|
28 |
+
}
|
29 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Widget/Grid/Column/Orderaction.php
ADDED
@@ -0,0 +1,27 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
class Amosoft_Dropship_Block_Adminhtml_Widget_Grid_Column_Orderaction extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Action
|
9 |
+
{
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Renders column
|
13 |
+
*
|
14 |
+
* @param Varien_Object $row
|
15 |
+
* @return string
|
16 |
+
*/
|
17 |
+
public function render(Varien_Object $row)
|
18 |
+
{
|
19 |
+
$incrementId = $row->getData($this->getColumn()->getIndex());
|
20 |
+
$order = Mage::getModel('sales/order')->load($incrementId, 'increment_id');
|
21 |
+
if ($order)
|
22 |
+
$out = '<a target="_blank" rel="external" href="'.Mage::helper('adminhtml')->getUrl('adminhtml/sales_order/view', array('order_id' => $order->getId())).'">'.$incrementId.'</a>';
|
23 |
+
else
|
24 |
+
$out = $incrementId;
|
25 |
+
return $out;
|
26 |
+
}
|
27 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Widget/Grid/Column/Skuaction.php
ADDED
@@ -0,0 +1,34 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Block_Adminhtml_Widget_Grid_Column_Skuaction extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Action
|
11 |
+
{
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Renders column
|
15 |
+
*
|
16 |
+
* @param Varien_Object $row
|
17 |
+
* @return string
|
18 |
+
*/
|
19 |
+
public function render(Varien_Object $row)
|
20 |
+
{
|
21 |
+
|
22 |
+
if($row->getData('product_sku'))
|
23 |
+
{
|
24 |
+
$label = ($this->getColumn()->getIndex() == 'amosoft_vendor_sku') ? $row->getData('amosoft_vendor_sku'):$row->getData('product_sku');
|
25 |
+
}
|
26 |
+
else
|
27 |
+
{ $productid = Mage::getModel('catalog/product')->getIdBySku(trim($row->getData('sku')));
|
28 |
+
$vendorScreenUrl = ($this->getColumn()->getIndex() == 'amosoft_vendor_sku') ? 'back/edit/tab/product_info_tabs_vendor_tab':'';
|
29 |
+
$labeltxt = ($this->getColumn()->getIndex() == 'amosoft_vendor_sku') ? $row->getData('amosoft_vendor_sku'):$row->getData('sku');
|
30 |
+
$label = '<a href="'.$this->getUrl('adminhtml/catalog_product/edit',array('id'=>$productid)).$vendorScreenUrl.'" target="_blank"><strong>'.$labeltxt.'</strong></a>';
|
31 |
+
}
|
32 |
+
return $label;
|
33 |
+
}
|
34 |
+
}
|
app/code/local/Amosoft/Dropship/Block/Adminhtml/Widget/Grid/Column/Textaction.php
ADDED
@@ -0,0 +1,38 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
class Amosoft_Dropship_Block_Adminhtml_Widget_Grid_Column_Textaction extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Action
|
9 |
+
{
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Renders column
|
13 |
+
*
|
14 |
+
* @param Varien_Object $row
|
15 |
+
* @return string
|
16 |
+
*/
|
17 |
+
public function render(Varien_Object $row)
|
18 |
+
{
|
19 |
+
|
20 |
+
$actions[] = array(
|
21 |
+
'caption' => Mage::helper('sales')->__('Edit'),
|
22 |
+
'url' => $this->getUrl('*/*/edit', array('amosoft_item_id' => $row->getAmosoftItemId(), 'qty'=> (int)$row->getQtyOrdered())))
|
23 |
+
;
|
24 |
+
if ( empty($actions) || !is_array($actions) || !in_array($row->getAmosoftItemStatus(),array('Backorder'))) {
|
25 |
+
return ' ';
|
26 |
+
}
|
27 |
+
$out="";
|
28 |
+
if(!$this->getColumn()->getNoLink()) {
|
29 |
+
foreach ($actions as $action) {
|
30 |
+
if ( is_array($action) ) {
|
31 |
+
$out .= " ".$this->_toLinkHtml($action, $row);
|
32 |
+
}
|
33 |
+
}
|
34 |
+
}
|
35 |
+
return $out;
|
36 |
+
|
37 |
+
}
|
38 |
+
}
|
app/code/local/Amosoft/Dropship/Helper/Data.php
ADDED
@@ -0,0 +1,488 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Helper_Data extends Mage_Core_Helper_Abstract
|
11 |
+
{
|
12 |
+
|
13 |
+
const AMOSOFT_ITEM_STATUS_TRANSMITTING = 'Transmitting';
|
14 |
+
const AMOSOFT_ITEM_STATUS_SOURCING = 'Sourcing';
|
15 |
+
const AMOSOFT_ITEM_STATUS_REPROCESS = 'Reprocess';
|
16 |
+
const AMOSOFT_ITEM_STATUS_BACKORDER = 'Backorder';
|
17 |
+
const AMOSOFT_ITEM_STATUS_SENT_TO_SUPPLIER = 'Sent to Supplier';
|
18 |
+
const AMOSOFT_ITEM_STATUS_CANCELLED = 'Cancelled';
|
19 |
+
const AMOSOFT_ITEM_STATUS_NO_DROPSHIP = 'No Dropship';
|
20 |
+
const AMOSOFT_ITEM_STATUS_COMPLETED = 'Completed';
|
21 |
+
const AMOSOFT_PRODUCT_LINK_UPC = 'UPC';
|
22 |
+
const AMOSOFT_PRODUCT_LINK_MNP = 'Manufacturer Part Number';
|
23 |
+
const AMOSOFT_PRODUCT_LINK_SKU = 'Magento Sku';
|
24 |
+
const AMOSOFT_PRODUCT_LINK_NONE = 'None';
|
25 |
+
const AMOSOFT_PRODUCT_LINK_CODE_UPC = 'amosoft_upc';
|
26 |
+
const AMOSOFT_PRODUCT_LINK_CODE_MNP = 'amosoft_mnp';
|
27 |
+
const AMOSOFT_PRODUCT_LINK_CODE_SKU = 'sku';
|
28 |
+
protected $_maxtime = 60; // time in minutes
|
29 |
+
protected $_shipping_cost;
|
30 |
+
|
31 |
+
public function getConfigObject($nodeName = null)
|
32 |
+
{
|
33 |
+
return trim(Mage::getConfig()->getNode($nodeName)->__toString());
|
34 |
+
}
|
35 |
+
|
36 |
+
public function getItemStatuses()
|
37 |
+
{
|
38 |
+
return array('Sourcing','Reprocess','Backorder','Transmitting','Sent to Supplier','Cancelled','No Dropship','Completed');
|
39 |
+
}
|
40 |
+
|
41 |
+
public function getIsQtyDecimal($product_sku,$inventory)
|
42 |
+
{
|
43 |
+
if($product_sku){
|
44 |
+
$is_qty_decimal = $this->checkIsQtyDecimal($product_sku);
|
45 |
+
if($is_qty_decimal == 1)
|
46 |
+
{
|
47 |
+
$inventory = $inventory;
|
48 |
+
}
|
49 |
+
else
|
50 |
+
{
|
51 |
+
$inventory = floor($inventory);
|
52 |
+
}
|
53 |
+
|
54 |
+
}
|
55 |
+
return $inventory;
|
56 |
+
}
|
57 |
+
|
58 |
+
public function checkIsQtyDecimal($product_sku){
|
59 |
+
|
60 |
+
$is_qty_decimal = 0;
|
61 |
+
$product_collection = Mage::getResourceModel('catalog/product_collection');
|
62 |
+
$product_collection->getSelect()->join(Mage::getConfig()->getTablePrefix().'cataloginventory_stock_item', 'e.entity_id ='.Mage::getConfig()->getTablePrefix().'cataloginventory_stock_item.product_id');
|
63 |
+
$product_collection->getSelect()->where('e.sku = ' ."'" .$product_sku."'");
|
64 |
+
$product_collection_count = count($product_collection);
|
65 |
+
if($product_collection_count > 0)
|
66 |
+
{
|
67 |
+
$is_qty_decimal = $product_collection->getFirstItem ()->getData('is_qty_decimal');
|
68 |
+
|
69 |
+
}
|
70 |
+
|
71 |
+
return $is_qty_decimal;
|
72 |
+
}
|
73 |
+
|
74 |
+
public function getDatabaseConnection() {
|
75 |
+
return Mage::getSingleton ( 'core/resource' );
|
76 |
+
}
|
77 |
+
|
78 |
+
public function getTableName($name)
|
79 |
+
{
|
80 |
+
return $this->getDatabaseConnection()->getTableName ( $name );
|
81 |
+
}
|
82 |
+
|
83 |
+
public function isProcessRunning($type){
|
84 |
+
|
85 |
+
$isProcessRunning = false;
|
86 |
+
if($this->selectTmpTableData($type))
|
87 |
+
{
|
88 |
+
if(!$this->isProcessHault($type))
|
89 |
+
{
|
90 |
+
$isProcessRunning = true;
|
91 |
+
}
|
92 |
+
}
|
93 |
+
|
94 |
+
return $isProcessRunning;
|
95 |
+
}
|
96 |
+
|
97 |
+
public function startProcess($type){
|
98 |
+
|
99 |
+
if(!$this->selectTmpTableData($type))
|
100 |
+
{
|
101 |
+
$this->insertTmpTableData($type);
|
102 |
+
}
|
103 |
+
return;
|
104 |
+
}
|
105 |
+
|
106 |
+
|
107 |
+
public function finishProcess($type){
|
108 |
+
$this->deleteTmpTableData($type);
|
109 |
+
}
|
110 |
+
|
111 |
+
protected function insertTmpTableData($type){
|
112 |
+
$write = $this->getDatabaseConnection()->getConnection ( 'core_write' );
|
113 |
+
$updatedAt = Mage::getModel('core/date')->gmtDate();
|
114 |
+
$createAt = Mage::getModel('core/date')->gmtDate();
|
115 |
+
$tmpTableName = $this->getTableName ( 'dropship/tmpdata' );
|
116 |
+
$insert = 'insert into '.$tmpTableName.' (tmpdata,created_at,updated_at) values("'.$type.'","'.$createAt.'","'.$updatedAt.'")';
|
117 |
+
$write->beginTransaction ();
|
118 |
+
$write->query($insert);
|
119 |
+
try {
|
120 |
+
$write->commit();
|
121 |
+
} catch ( Exception $e ) {
|
122 |
+
$write->rollBack ();
|
123 |
+
}
|
124 |
+
|
125 |
+
}
|
126 |
+
|
127 |
+
protected function updateTmpTableData($type){
|
128 |
+
|
129 |
+
$write = $this->getDatabaseConnection()->getConnection ( 'core_write' );
|
130 |
+
$updatedAt = Mage::getModel('core/date')->gmtDate();
|
131 |
+
$tmpTableName = $this->getTableName ( 'dropship/tmpdata' );
|
132 |
+
$update = 'update '.$tmpTableName.' set updated_at = '.$updatedAt.' where tmpdata = "'.$type.'"' ;
|
133 |
+
$write->beginTransaction ();
|
134 |
+
$write->query($update);
|
135 |
+
try {
|
136 |
+
$write->commit();
|
137 |
+
} catch ( Exception $e ) {
|
138 |
+
$write->rollBack ();
|
139 |
+
}
|
140 |
+
}
|
141 |
+
|
142 |
+
protected function deleteTmpTableData($type){
|
143 |
+
|
144 |
+
$write = $this->getDatabaseConnection()->getConnection ( 'core_write' );
|
145 |
+
$tmpTableName = $this->getTableName ( 'dropship/tmpdata' );
|
146 |
+
$delete = 'delete from '.$tmpTableName.' where tmpdata = "'.$type.'"' ;
|
147 |
+
$write->beginTransaction ();
|
148 |
+
$write->query($delete);
|
149 |
+
try {
|
150 |
+
$write->commit();
|
151 |
+
|
152 |
+
} catch ( Exception $e ) {
|
153 |
+
$write->rollBack ();
|
154 |
+
}
|
155 |
+
}
|
156 |
+
|
157 |
+
public function selectTmpTableData($type){
|
158 |
+
|
159 |
+
$read = $this->getDatabaseConnection()->getConnection ( 'core_read' );
|
160 |
+
$tmpTableName = $this->getTableName ( 'dropship/tmpdata' );
|
161 |
+
$select = 'Select * from '.$tmpTableName.' where tmpdata = "'.$type.'" ORDER BY id DESC limit 1';
|
162 |
+
$result = $read->fetchAll($select);
|
163 |
+
|
164 |
+
if(count($result) >= 1)
|
165 |
+
$this->_lastUpdateTime = $result[0]['updated_at'];
|
166 |
+
return count($result) <= 0 ? false : true;
|
167 |
+
}
|
168 |
+
|
169 |
+
protected function isProcessHault($type){
|
170 |
+
$now = strtotime(Mage::getModel('core/date')->date('Y-m-d H:i:s'));
|
171 |
+
$lastupdate = Mage::getModel('core/date')->timestamp(strtotime($this->_lastUpdateTime));
|
172 |
+
|
173 |
+
$isProcessHault = true;
|
174 |
+
$timePassed = ($now - $lastupdate)/60;
|
175 |
+
|
176 |
+
if($timePassed <= $this->_maxtime){
|
177 |
+
|
178 |
+
$isProcessHault = false;
|
179 |
+
}else{
|
180 |
+
|
181 |
+
$this->finishProcess($type);
|
182 |
+
}
|
183 |
+
return $isProcessHault;
|
184 |
+
}
|
185 |
+
|
186 |
+
/*
|
187 |
+
*
|
188 |
+
* $state 0,1,2 // 0= start without sepration text,1=Start logging section sepration,2=end logging section sepration
|
189 |
+
*
|
190 |
+
*
|
191 |
+
* */
|
192 |
+
public function genrateLog($state,$startMessage = null,$endMessage =null,$message = null){
|
193 |
+
if($state == 1){
|
194 |
+
Mage::log('******'.$startMessage.'******', null, 'amosoft_debug.log');
|
195 |
+
}
|
196 |
+
if($state == 0 && !empty($startMessage) ){
|
197 |
+
Mage::log('******'.$startMessage.'******', null, 'amosoft_debug.log');
|
198 |
+
}
|
199 |
+
if(!empty($message)){
|
200 |
+
Mage::log($message, null, 'amosoft_debug.log');
|
201 |
+
}
|
202 |
+
if($state == 2){
|
203 |
+
Mage::log('******'.$endMessage.'******', null, 'amosoft_debug.log');
|
204 |
+
}
|
205 |
+
if($state == 0 && !empty($endMessage) ){
|
206 |
+
Mage::log('******'.$endMessage.'******', null, 'amosoft_debug.log');
|
207 |
+
}
|
208 |
+
}
|
209 |
+
|
210 |
+
protected function getLogCollection($params){
|
211 |
+
$conn = Mage::getModel('dropship/uploadvendor')->getDatabaseConnection();
|
212 |
+
$tableVendorImportLog = Mage::getSingleton ( 'core/resource' )->getTableName ( 'dropship/vendor_import_log' );
|
213 |
+
$select = $conn->select()->from($tableVendorImportLog)
|
214 |
+
->where("created_at=?", $params['vdate']);
|
215 |
+
$result = $conn->query($select);
|
216 |
+
$rows = $result->fetch();
|
217 |
+
return $rows;
|
218 |
+
}
|
219 |
+
|
220 |
+
/**
|
221 |
+
* Returns indexes of the fetched array as headers for CSV
|
222 |
+
*
|
223 |
+
* @return array
|
224 |
+
*/
|
225 |
+
protected function _getCsvHeaders()
|
226 |
+
{
|
227 |
+
$headers = array('Supplier Code','Supplier','Magento Sku','vendor_sku','cost','inventory','Failure Reason') ;
|
228 |
+
return $headers;
|
229 |
+
}
|
230 |
+
|
231 |
+
/**
|
232 |
+
* Generates CSV file with error's list according to the collection in the $this->_list
|
233 |
+
* @return array
|
234 |
+
*/
|
235 |
+
public function generateErrorList($params,$isFtp = false)
|
236 |
+
{
|
237 |
+
$ftpCollection = (!$isFtp) ? $this->getLogCollection($params) : $params;
|
238 |
+
//$ftpError = explode('<li>', $this->_list['ftp_error_desc']);
|
239 |
+
if (!empty($ftpCollection)) {
|
240 |
+
if (count($ftpCollection) > 0) {
|
241 |
+
if($ftpCollection['failure'] > 3000){
|
242 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('dropship')->__('Data size is too big for export'));
|
243 |
+
return array('error' => true);
|
244 |
+
}
|
245 |
+
$io = new Varien_Io_File();
|
246 |
+
$path = Mage::getBaseDir('var') . DS . 'export' . DS;
|
247 |
+
$name = md5(microtime());
|
248 |
+
$file = $path . DS . $name . '.csv';
|
249 |
+
$io->setAllowCreateFolders(true);
|
250 |
+
$io->open(array('path' => $path));
|
251 |
+
$io->streamOpen($file, 'w+');
|
252 |
+
$io->streamLock(true);
|
253 |
+
$io->streamWriteCsv($this->_getCsvHeaders());
|
254 |
+
$rowData = (!is_null($ftpCollection['ftp_error_desc'])) ? $ftpCollection['ftp_error_desc'] : $ftpCollection['error_id'];
|
255 |
+
$prepareValue = $this->prepareExportVaues($rowData, $ftpCollection['amosoft_vendor_code']);
|
256 |
+
if(is_array($prepareValue)){
|
257 |
+
foreach($prepareValue as $value){
|
258 |
+
$csv[] = $ftpCollection['amosoft_vendor_code'];
|
259 |
+
$csv[] = $this->getSupplierName($ftpCollection['amosoft_vendor_code']);
|
260 |
+
$csv[] = $value['magento_sku'];
|
261 |
+
$csv[] = $value['vendor_sku'];
|
262 |
+
$csv[] = $value['cost'];
|
263 |
+
$csv[] = $value['qty'];
|
264 |
+
$csv[] = $value['reason'];
|
265 |
+
$io->streamWriteCsv($csv);
|
266 |
+
unset($csv);
|
267 |
+
}
|
268 |
+
}else
|
269 |
+
{
|
270 |
+
$csv[] = $ftpCollection['amosoft_vendor_code'];
|
271 |
+
$csv[] = $this->getSupplierName($ftpCollection['amosoft_vendor_code']);
|
272 |
+
$csv[] = '';
|
273 |
+
$csv[] = '';
|
274 |
+
$csv[] ='';
|
275 |
+
$csv[] = '';
|
276 |
+
$csv[] = $ftpCollection['ftp_error_desc'];
|
277 |
+
$io->streamWriteCsv($csv);
|
278 |
+
unset($csv);
|
279 |
+
}
|
280 |
+
}
|
281 |
+
return array(
|
282 |
+
'type' => 'filename',
|
283 |
+
'value' => $file,
|
284 |
+
'rm' => true,
|
285 |
+
'error'=> false
|
286 |
+
);
|
287 |
+
}
|
288 |
+
}
|
289 |
+
public function prepareExportVaues($description,$vendorCode){
|
290 |
+
$csvData = array();
|
291 |
+
$decodedata = Mage::app()->getLayout()->createBlock('dropship/adminhtml_vendorproductuploadhistory')->prepareRowData($description);
|
292 |
+
if(!is_array($decodedata) || empty($decodedata))
|
293 |
+
return empty($decodedata) ? implode('',$decodedata) : $decodedata;
|
294 |
+
foreach($decodedata as $data){
|
295 |
+
$msgArray = Mage::app()->getLayout()->createBlock('dropship/adminhtml_vendorproductuploadhistory')->getMessageArray();
|
296 |
+
$msg = $msgArray[$data['error_type']];
|
297 |
+
if(is_array($data['value']) && !empty($data['value'])){
|
298 |
+
$csvData[] = array('magento_sku'=>$data['value']['magento_sku'],'vendor_sku'=>$data['value']['vendor_sku'],'cost'=>$data['value']['cost'],'qty'=>$data['value']['qty'],'reason'=> $this->genrateHtml($data['value'],$msg,$vendorCode));
|
299 |
+
}else{
|
300 |
+
$csvData[] = array('magento_sku'=>'','vendor_sku'=>'','cost'=>'','qty'=>'','reason'=> (strstr($msg,'row_num')) ? str_replace('row_num',$data['value'],$msg) : str_replace('empty_file',$data['value'],$msg) );
|
301 |
+
}
|
302 |
+
}
|
303 |
+
return $csvData;
|
304 |
+
}
|
305 |
+
public function genrateHtml($value,$msg,$vendorCode){
|
306 |
+
$replace = Mage::app()->getLayout()->createBlock('dropship/adminhtml_vendorproductuploadhistory')->getReplaceValue();
|
307 |
+
$string = $msg;
|
308 |
+
$value['vendor_code'] = $vendorCode;
|
309 |
+
foreach($replace as $val){
|
310 |
+
if(strstr($string,$val))
|
311 |
+
$string = str_replace($val,$value[$val],$string);
|
312 |
+
}
|
313 |
+
return $string;
|
314 |
+
}
|
315 |
+
|
316 |
+
/**
|
317 |
+
* Item status for orders
|
318 |
+
*
|
319 |
+
* @return array
|
320 |
+
*/
|
321 |
+
public function getAmosoftOrderItemStatus()
|
322 |
+
{
|
323 |
+
return array('Reprocess', 'Backorder', 'Transmitting', 'Sent to Supplier', 'No Dropship');
|
324 |
+
|
325 |
+
}
|
326 |
+
|
327 |
+
/*
|
328 |
+
* Get serialised data for order item history
|
329 |
+
* @param object $orderItemInstance, string $itemStatus, string $orderStatus
|
330 |
+
* @return string
|
331 |
+
*/
|
332 |
+
public function getSerialisedData($orderItemInstance, $itemStatus, $orderStatus )
|
333 |
+
{
|
334 |
+
if($orderItemInstance->getItemStatusHistory()){
|
335 |
+
$existingValues = unserialize($orderItemInstance->getItemStatusHistory());
|
336 |
+
$data = array('date'=>now(), 'item_status'=>$itemStatus, 'order_status'=>$orderStatus);
|
337 |
+
array_push($existingValues,$data);
|
338 |
+
$serializeData = serialize($existingValues);
|
339 |
+
}else{
|
340 |
+
$data = array(0=>array('date'=>now(), 'item_status'=>$itemStatus, 'order_status'=>$orderStatus));
|
341 |
+
$serializeData = serialize($data);
|
342 |
+
}
|
343 |
+
return $serializeData;
|
344 |
+
}
|
345 |
+
|
346 |
+
public function sendMail($templateObject,$email,$templateId,$attachment = null){
|
347 |
+
|
348 |
+
$result = false;
|
349 |
+
|
350 |
+
if(empty($templateId) || empty($email))
|
351 |
+
return $result;
|
352 |
+
$mailTemplate = Mage::getModel('core/email_template');
|
353 |
+
if($attachment)
|
354 |
+
{
|
355 |
+
$content = file_get_contents($attachment);
|
356 |
+
//$content = str_replace('></',">\n</",$content);
|
357 |
+
// this is for to set the file format
|
358 |
+
$at = new Zend_Mime_Part($content);
|
359 |
+
$at->type = 'application/csv'; // if u have PDF then it would like -> 'application/pdf'
|
360 |
+
$at->disposition = Zend_Mime::DISPOSITION_INLINE;
|
361 |
+
$at->encoding = Zend_Mime::ENCODING_8BIT;
|
362 |
+
$at->filename = 'outdated_productlist'.date('ymdHis').'.csv';
|
363 |
+
$mailTemplate->getMail()->addAttachment($at);
|
364 |
+
//$emailTemplate->_mail->addAttachment($at);
|
365 |
+
}
|
366 |
+
/* @var $mailTemplate Mage_Core_Model_Email_Template */
|
367 |
+
$mailTemplate->setDesignConfig(array('area' => 'backend'));
|
368 |
+
if($templateObject->getBcc())
|
369 |
+
{
|
370 |
+
$mailTemplate->addBcc($templateObject->getBcc());
|
371 |
+
}
|
372 |
+
//$mailTemplate->setTemplateSubject($subject);
|
373 |
+
$name = explode('@',$email);
|
374 |
+
$mailTemplate->sendTransactional(
|
375 |
+
$templateId,
|
376 |
+
'general',
|
377 |
+
$email,
|
378 |
+
$name[0],
|
379 |
+
array('templatevar' => $templateObject)
|
380 |
+
);
|
381 |
+
(!$mailTemplate->getSentSuccess()) ? $result = false : $result = true;
|
382 |
+
return $result;
|
383 |
+
}
|
384 |
+
|
385 |
+
/**
|
386 |
+
* Turn on read uncommitted mode
|
387 |
+
*/
|
388 |
+
public function turnOnReadUncommittedMode()
|
389 |
+
{
|
390 |
+
$this->getDatabaseConnection()->getConnection('read')->query("SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED");
|
391 |
+
}
|
392 |
+
/**
|
393 |
+
* Turn on read committed mode
|
394 |
+
*/
|
395 |
+
public function turnOnReadCommittedMode()
|
396 |
+
{
|
397 |
+
$this->getDatabaseConnection()->getConnection('read')->query("SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED");
|
398 |
+
}
|
399 |
+
public function isJson($data){
|
400 |
+
$result = false;
|
401 |
+
$data = trim($data,'"');
|
402 |
+
$data = trim($data,'\'');
|
403 |
+
$data = stripslashes($data);
|
404 |
+
$decodedata = json_decode($data);
|
405 |
+
$result = (json_last_error() == JSON_ERROR_NONE) ? true : false;
|
406 |
+
return $result;
|
407 |
+
}
|
408 |
+
public function getSupplierName($vendorCode){
|
409 |
+
$vendorRankModel = Mage::getSingleton('dropship/ranking')->load($vendorCode,'amosoft_vendor_code');
|
410 |
+
return $vendorRankModel->getAmosoftVendorName();
|
411 |
+
}
|
412 |
+
|
413 |
+
public function getVendorShippingCost($product){
|
414 |
+
|
415 |
+
$productSku = $product->getSku();
|
416 |
+
//echo $productSku; exit;
|
417 |
+
$itemId = $product->getItemId();
|
418 |
+
$isDefaultVendor = false;
|
419 |
+
$vendorCode = '';
|
420 |
+
$inventoryStock = '';
|
421 |
+
$defaultVendor = (Mage::getStoreConfig('amosoft_sourcing/rank/defaultbackorder') == 'none') ? '' : Mage::getStoreConfig('amosoft_sourcing/rank/defaultbackorder');
|
422 |
+
$orderItemInstance = Mage::getModel( 'dropship/orderitems' );
|
423 |
+
$orderItemInstance->load( $itemId, 'item_id' );
|
424 |
+
$collectionVendor = $orderItemInstance->prepareOrderItemData($product);
|
425 |
+
$arrDefaultVendorDetails = array();
|
426 |
+
$vendorCost = 0;
|
427 |
+
|
428 |
+
if ($collectionVendor->count() > 0) {
|
429 |
+
if($collectionVendor->count() >= 1){
|
430 |
+
foreach ($collectionVendor as $vendorData) {
|
431 |
+
//assign default vendor details
|
432 |
+
if(!empty($defaultVendor) && $vendorData->getAmosoftVendorCode() == $defaultVendor )
|
433 |
+
{
|
434 |
+
$arrDefaultVendorDetails = array('amosoft_vendor_code'=>$vendorData->getAmosoftVendorCode(),'stock'=>$vendorData->getStock(),'cost'=>$vendorData->getCost(),'shipping_cost'=>$vendorData->getShippingCost(),'amosoft_vendor_sku'=>$vendorData->getAmosoftVendorSku(),'product_sku'=>$vendorData->getProductSku());
|
435 |
+
}
|
436 |
+
//if item is in backordered
|
437 |
+
if($vendorData->getStock() < $qtyInvoiced ){
|
438 |
+
$arrVendorDetail[] = array('amosoft_vendor_code'=>$vendorData->getAmosoftVendorCode(),'stock'=>$vendorData->getStock(),'cost'=>$vendorData->getCost(),'amosoft_vendor_sku'=>$vendorData->getAmosoftVendorSku(),'product_sku'=>$vendorData->getProductSku());
|
439 |
+
$vendorCode = $arrVendorDetail[0]['amosoft_vendor_code'];
|
440 |
+
$inventoryStock = $arrVendorDetail[0]['stock'];
|
441 |
+
$vendorCost = $arrVendorDetail[0]['cost'];
|
442 |
+
$vendorShippingCost = $arrVendorDetail[0]['shipping_cost'];
|
443 |
+
$vendorSku = $arrVendorDetail[0]['amosoft_vendor_sku'];
|
444 |
+
$productSku = $arrVendorDetail[0]['product_sku'];
|
445 |
+
$arrVendorAvailable[] = $vendorData->getAmosoftVendorCode();
|
446 |
+
$isDefaultVendor = true;
|
447 |
+
}else{
|
448 |
+
$vendorCode = $vendorData->getAmosoftVendorCode();
|
449 |
+
$inventoryStock = $vendorData->getStock();
|
450 |
+
$vendorCost = $vendorData->getCost();
|
451 |
+
$vendorShippingCost = $vendorData->getShippingCost();
|
452 |
+
//echo $vendorShippingCost; exit;
|
453 |
+
$vendorSku = $vendorData->getAmosoftVendorSku();
|
454 |
+
$productSku = $vendorData->getProductSku();
|
455 |
+
$arrVendorAvailable[] = $vendorData->getAmosoftVendorCode();
|
456 |
+
$isDefaultVendor = false;
|
457 |
+
break;
|
458 |
+
}
|
459 |
+
}
|
460 |
+
$arrVendorAvailable[] = $vendorData->getAmosoftVendorCode();
|
461 |
+
}else {
|
462 |
+
$arrFirstVendor = $collectionVendor->getFirstItem()->getData();
|
463 |
+
$vendorCode = $arrFirstVendor['amosoft_vendor_code'];
|
464 |
+
$inventoryStock = $arrFirstVendor['stock'];
|
465 |
+
$vendorShippingCost = $arrFirstVendor['shipping_cost'];
|
466 |
+
$vendorCost = $arrFirstVendor['cost'];
|
467 |
+
$vendorSku = $arrFirstVendor['amosoft_vendor_sku'];
|
468 |
+
$productSku = $arrFirstVendor['product_sku'];
|
469 |
+
if($inventoryStock < $qtyInvoiced)
|
470 |
+
$isDefaultVendor = true;
|
471 |
+
else
|
472 |
+
$isDefaultVendor = false;
|
473 |
+
|
474 |
+
$arrVendorAvailable[] = $arrFirstVendor['amosoft_vendor_code'];
|
475 |
+
}
|
476 |
+
return $vendorShippingCost;
|
477 |
+
}
|
478 |
+
}
|
479 |
+
|
480 |
+
public function setCustomShipping($_shipping_cost){
|
481 |
+
$this->_shipping_cost = $_shipping_cost;
|
482 |
+
//return $this->_shipping_cost;
|
483 |
+
}
|
484 |
+
|
485 |
+
public function getCustomShipping(){
|
486 |
+
return $this->_shipping_cost;
|
487 |
+
}
|
488 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Amosoft.php
ADDED
@@ -0,0 +1,233 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
|
9 |
+
class Amosoft_Dropship_Model_Amosoft {
|
10 |
+
|
11 |
+
/* Create API role */
|
12 |
+
|
13 |
+
public function createApiRoleAndUser($fieldsetData) {
|
14 |
+
|
15 |
+
$role = Mage::getModel('api/roles');
|
16 |
+
$roleName = 'amosoft';
|
17 |
+
$parentId = '';
|
18 |
+
$roleType = 'G';
|
19 |
+
$definedRole = Mage::helper('dropship')->getConfigObject('apiconfig/soap_role');
|
20 |
+
$ruleNodes = (!empty($definedRole)) ? explode(',',$definedRole) : array('all');
|
21 |
+
|
22 |
+
if (!is_array($fieldsetData)) {
|
23 |
+
return false;
|
24 |
+
}
|
25 |
+
$role->load($roleName, 'role_name');
|
26 |
+
//$ruleNodes = array('all');
|
27 |
+
//$ruleNodes = $definedRole;
|
28 |
+
try {
|
29 |
+
$role = $role->setName($roleName)
|
30 |
+
->setPid($parentId)
|
31 |
+
->setRoleType($roleType)
|
32 |
+
->save();
|
33 |
+
|
34 |
+
Mage::getModel("api/rules")->setRoleId($role->getId())
|
35 |
+
->setResources($ruleNodes)
|
36 |
+
->saveRel();
|
37 |
+
} catch (Exception $e) {
|
38 |
+
return false;
|
39 |
+
}
|
40 |
+
$password = '';
|
41 |
+
$userExist = $this->_userExists($fieldsetData['api_user_name'],$fieldsetData['email']);
|
42 |
+
$userId = '';
|
43 |
+
if (is_array($userExist)) {
|
44 |
+
$modelData = Mage::getModel('api/user')->load($userExist[1]);
|
45 |
+
$userId = $modelData->getUserId();
|
46 |
+
}else
|
47 |
+
{
|
48 |
+
$modelData = Mage::getModel('api/user');
|
49 |
+
}
|
50 |
+
$modelData->setData(array(
|
51 |
+
'user_id'=> $userId,
|
52 |
+
'username' => $fieldsetData['api_user_name'],
|
53 |
+
'firstname' => 'amosoft',
|
54 |
+
'lastname' => 'amosoft',
|
55 |
+
'email' => $fieldsetData['email'],
|
56 |
+
'api_key' => $password,
|
57 |
+
'api_key_confirmation' => $password,
|
58 |
+
'is_active' => 1,
|
59 |
+
'user_roles' => '',
|
60 |
+
'assigned_user_role' => '',
|
61 |
+
'role_name' => '',
|
62 |
+
'roles' => array($role->getId()) // your created custom role
|
63 |
+
));
|
64 |
+
|
65 |
+
try {
|
66 |
+
|
67 |
+
Mage::register('api_password', $modelData->getApiKey());
|
68 |
+
$modelData->save();
|
69 |
+
$modelData->setRoleIds(array($role->getId())) // your created custom role
|
70 |
+
->setRoleUserId($modelData->getUserId())
|
71 |
+
->saveRelations();
|
72 |
+
}
|
73 |
+
|
74 |
+
catch (Exception $e) {
|
75 |
+
return false;
|
76 |
+
}
|
77 |
+
return array('password'=>$modelData->getApiKey(),'user_id'=>$modelData->getUserId());
|
78 |
+
}
|
79 |
+
|
80 |
+
protected function _userExists($username,$email)
|
81 |
+
{
|
82 |
+
$resource = Mage::getSingleton('core/resource');
|
83 |
+
$usersTable = $resource->getTableName('api/user');
|
84 |
+
$adapter = $resource->getConnection('core_read');
|
85 |
+
$condition = array(
|
86 |
+
$adapter->quoteInto("{$usersTable}.username = ?", $username),
|
87 |
+
$adapter->quoteInto("{$usersTable}.email = ?", $email),
|
88 |
+
);
|
89 |
+
$select = $adapter->select()
|
90 |
+
->from($usersTable)
|
91 |
+
->where(implode(' OR ', $condition))
|
92 |
+
->where($usersTable.'.user_id != ?', '');
|
93 |
+
$result = $adapter->fetchRow($select);
|
94 |
+
if(is_array($result) && count($result) > 0 )
|
95 |
+
{
|
96 |
+
return array(true,(int)$result['user_id']);
|
97 |
+
}else
|
98 |
+
{
|
99 |
+
return false;
|
100 |
+
}
|
101 |
+
|
102 |
+
}
|
103 |
+
|
104 |
+
protected function _generatePassword($length = 8) {
|
105 |
+
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
106 |
+
$count = mb_strlen($chars);
|
107 |
+
|
108 |
+
for ($i = 0, $result = ''; $i < $length; $i++) {
|
109 |
+
$index = rand(0, $count - 1);
|
110 |
+
$result .= mb_substr($chars, $index, 1);
|
111 |
+
}
|
112 |
+
|
113 |
+
return $result;
|
114 |
+
}
|
115 |
+
|
116 |
+
|
117 |
+
|
118 |
+
public function checkAndCreateOrderStatus($fieldsetData) {
|
119 |
+
if (!is_array($fieldsetData) && empty($fieldsetData)) {
|
120 |
+
return false;
|
121 |
+
}
|
122 |
+
$statuses = $fieldsetData;
|
123 |
+
$state = 'processing';
|
124 |
+
$isDefault = '0';
|
125 |
+
foreach ($statuses as $status => $label) {
|
126 |
+
$this->assignStatus($status, $label, $state, $isDefault);
|
127 |
+
}
|
128 |
+
return true;
|
129 |
+
}
|
130 |
+
|
131 |
+
protected function assignStatus($status, $label, $state, $isDefault){
|
132 |
+
$statusModel = Mage::getModel('sales/order_status')->load($status);
|
133 |
+
if (!$statusModel->getStatus()) {
|
134 |
+
$statusModel->setData(array('status' => $status, 'label' => $label))->setStatus($status);
|
135 |
+
try {
|
136 |
+
$statusModel->save();
|
137 |
+
$statusModel->assignState($state, $isDefault);
|
138 |
+
|
139 |
+
}catch (Mage_Core_Exception $e) {
|
140 |
+
return false;
|
141 |
+
}
|
142 |
+
}
|
143 |
+
}
|
144 |
+
|
145 |
+
|
146 |
+
public function updateOrderState($fieldsetData) {
|
147 |
+
$state = 'processing';
|
148 |
+
$isDefault = '0';
|
149 |
+
$statusModel = Mage::getModel('sales/order_status')->load('amosoft_ready_to_source');
|
150 |
+
try {
|
151 |
+
$statusModel->unassignState('new');
|
152 |
+
$statusModel->assignState($state, $isDefault);
|
153 |
+
|
154 |
+
}catch (Mage_Core_Exception $e) {
|
155 |
+
return false;
|
156 |
+
}
|
157 |
+
return true;
|
158 |
+
}
|
159 |
+
|
160 |
+
public function send($attachment = null,$fieldsetData) {
|
161 |
+
try {
|
162 |
+
$fieldsetData['isnewreg'] = true;
|
163 |
+
$version = Mage::helper('dropship')->getConfigObject('default/amosoft_integration/integration/ds360_version');
|
164 |
+
$fieldsetData['subject'] = 'New DropShip Package Extension version '.$version.' was installed';
|
165 |
+
$postObject = new Varien_Object();
|
166 |
+
$postObject->setData($fieldsetData);
|
167 |
+
$templateId = 'amosoft_email_email_template';
|
168 |
+
$email = Mage::helper('dropship')->getConfigObject('apiconfig/email/toaddress');
|
169 |
+
$isMailSent = Mage::helper('dropship')->sendMail($postObject,$email,$templateId);
|
170 |
+
if (!$isMailSent) {
|
171 |
+
Mage::helper('dropship')->genrateLog(0,'Installation notification started','Installation notification ended','Module installation notifiaction mail sending failed');
|
172 |
+
}
|
173 |
+
Mage::getSingleton('adminhtml/session')->unsNotification();
|
174 |
+
return true;
|
175 |
+
} catch (Exception $e) {
|
176 |
+
return false;//$e->getMassage();
|
177 |
+
}
|
178 |
+
}
|
179 |
+
|
180 |
+
public function prepareNotification($object,$orderId){
|
181 |
+
if($object == null || $orderId == null)
|
182 |
+
return;
|
183 |
+
$collection = $object->getCollection();
|
184 |
+
if($collection->getSize() == 0 )
|
185 |
+
$this->saveNotificationValue($orderId,'amosoft/setup_notification/order');
|
186 |
+
}
|
187 |
+
public function saveNotificationValue($value = null,$path){
|
188 |
+
$data = array(
|
189 |
+
'scope' => 'default',
|
190 |
+
'scope_id' => '0',
|
191 |
+
'path' => $path,
|
192 |
+
'value' => $value,
|
193 |
+
);
|
194 |
+
try{
|
195 |
+
Mage::getModel('core/config_data')->load($data['path'],'path');
|
196 |
+
Mage::getModel('core/config_data')->setData($data)->save();
|
197 |
+
}catch(Exception $e){
|
198 |
+
return false;
|
199 |
+
}
|
200 |
+
}
|
201 |
+
|
202 |
+
public function setupNotification()
|
203 |
+
{
|
204 |
+
$order = Mage::getStoreConfig('amosoft/setup_notification/order');
|
205 |
+
|
206 |
+
if($order)
|
207 |
+
{
|
208 |
+
$inventory = Mage::getModel('dropship/orderitems')->getCollection()->addFieldToFilter('item_order_id',$order)->addFieldToFilter('amosoft_item_status','Transmitting');
|
209 |
+
if($inventory->getSize() > 0){
|
210 |
+
|
211 |
+
try {
|
212 |
+
$fieldsetData['order'] = Mage::getModel('sales/order')->load($order);
|
213 |
+
$fieldsetData['subject'] = 'DropShip Order has been Placed on Magento';
|
214 |
+
$postObject = new Varien_Object();
|
215 |
+
$postObject->setData($fieldsetData);
|
216 |
+
$templateId = 'amosoft_order_notification';
|
217 |
+
$email = Mage::helper('dropship')->getConfigObject('apiconfig/email/toaddress');
|
218 |
+
$isMailSent = Mage::helper('dropship')->sendMail($postObject,$email,$templateId);
|
219 |
+
if (!$isMailSent) {
|
220 |
+
Mage::helper('dropship')->genrateLog(0,'Order notification started','Order notification ended','First order goes to transmitting successfully email sending failed');
|
221 |
+
}
|
222 |
+
$this->saveNotificationValue(null,'amosoft/setup_notification/order');
|
223 |
+
return true;
|
224 |
+
} catch (Exception $e) {
|
225 |
+
return false;//$e->getMassage();
|
226 |
+
}
|
227 |
+
|
228 |
+
}
|
229 |
+
|
230 |
+
}
|
231 |
+
}
|
232 |
+
|
233 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Api2/Createroleandrule.php
ADDED
@@ -0,0 +1,248 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
class Amosoft_Dropship_Model_Api2_Createroleandrule
|
9 |
+
{
|
10 |
+
|
11 |
+
public function initiliazeRest(){
|
12 |
+
|
13 |
+
$restRoleId = $this->createRoleRest();
|
14 |
+
$this->createAttributeAttributeRest();
|
15 |
+
$arrConsumer = $this->createOauthuser();
|
16 |
+
$adminUserId = $this->createAdminUserAndRole();
|
17 |
+
$resourceModel = Mage::getResourceModel('api2/acl_global_role');
|
18 |
+
try{
|
19 |
+
$resourceModel->saveAdminToRoleRelation($adminUserId, $restRoleId);
|
20 |
+
}catch(Exception $e)
|
21 |
+
{
|
22 |
+
echo $e->getMessage();
|
23 |
+
}
|
24 |
+
|
25 |
+
$restOauthAuthorization = $this->restOauthAuthorization(array('consumer_id'=>$arrConsumer['consumer_id'],'admin_id'=>$adminUserId));
|
26 |
+
$result = array_merge($arrConsumer,$restOauthAuthorization);
|
27 |
+
return $result;
|
28 |
+
|
29 |
+
}
|
30 |
+
|
31 |
+
protected function restOauthAuthorization($oauthRequest)
|
32 |
+
{
|
33 |
+
$helper = Mage::helper('oauth');
|
34 |
+
|
35 |
+
$oauthRequest['type']= 'access';
|
36 |
+
$oauthRequest['token']= $helper->generateToken();
|
37 |
+
$oauthRequest['secret']= $helper->generateTokenSecret();
|
38 |
+
$oauthRequest['verifier']= $helper->generateVerifier();
|
39 |
+
$oauthRequest['revoked']= 0;
|
40 |
+
$oauthRequest['authorized']= 1;
|
41 |
+
$oauthRequest['callback_url']= Mage::getBaseUrl();
|
42 |
+
|
43 |
+
$token = Mage::getModel('oauth/token')->load($oauthRequest['consumer_id'],'consumer_id');
|
44 |
+
|
45 |
+
if(!$token->getEntityId())
|
46 |
+
$token->addData($oauthRequest);
|
47 |
+
|
48 |
+
try {
|
49 |
+
|
50 |
+
$token->save();
|
51 |
+
|
52 |
+
} catch (Exception $e) {
|
53 |
+
echo $e->getMessage();
|
54 |
+
}
|
55 |
+
return array('token'=>$token->getToken(),'secret'=>$token->getSecret());
|
56 |
+
}
|
57 |
+
|
58 |
+
protected function createRoleRest(){
|
59 |
+
|
60 |
+
$role = Mage::getModel ( 'api2/acl_global_role' );
|
61 |
+
$roleName = 'amosoft';
|
62 |
+
$ruleAsString = '__root__,group-amosoft,group-product_import,resource-import,privilege-import-create,group-inventory_import,resource-inventory_import,privilege-inventory_import-create';
|
63 |
+
Mage::app ()->getRequest ()->setParam ( 'resource', $ruleAsString );
|
64 |
+
|
65 |
+
$role->load ( $roleName, 'role_name' );
|
66 |
+
|
67 |
+
try {
|
68 |
+
$role->setRoleName ( $roleName )->save ();
|
69 |
+
$rule = Mage::getModel ( 'api2/acl_global_rule' );
|
70 |
+
if ($role->getId ()) {
|
71 |
+
$collection = $rule->getCollection ();
|
72 |
+
$collection->addFilterByRoleId ( $role->getId () );
|
73 |
+
foreach ( $collection as $model ) {
|
74 |
+
$model->delete ();
|
75 |
+
}
|
76 |
+
}
|
77 |
+
$ruleTree = Mage::getModel ( 'api2/acl_global_rule_tree', array (
|
78 |
+
'type' => Mage_Api2_Model_Acl_Global_Rule_Tree::TYPE_PRIVILEGE
|
79 |
+
) );
|
80 |
+
$resources = $ruleTree->getPostResources ();
|
81 |
+
$id = $role->getId ();
|
82 |
+
foreach ( $resources as $resourceId => $privileges ) {
|
83 |
+
foreach ( $privileges as $privilege => $allow ) {
|
84 |
+
if (! $allow) {
|
85 |
+
continue;
|
86 |
+
}
|
87 |
+
|
88 |
+
$rule->setId ( null )->isObjectNew ( true );
|
89 |
+
|
90 |
+
$rule->setRoleId ( $id )->setResourceId ( $resourceId )->setPrivilege ( $privilege )->save ();
|
91 |
+
}
|
92 |
+
}
|
93 |
+
} catch ( Exception $e ) {
|
94 |
+
echo $e->getMessage ();
|
95 |
+
}
|
96 |
+
|
97 |
+
return $id;
|
98 |
+
}
|
99 |
+
|
100 |
+
|
101 |
+
protected function createAttributeAttributeRest(){
|
102 |
+
|
103 |
+
$attributeRule = '__root__,group-amosoft,group-product_import,resource-import,operation-import-write,attribute-import-write-productdata,group-inventory_import,resource-inventory_import,operation-inventory_import-write,attribute-inventory_import-write-vendordata';
|
104 |
+
$type = 'admin';
|
105 |
+
Mage::app()->getRequest()->setParam('resource',$attributeRule);
|
106 |
+
try {
|
107 |
+
|
108 |
+
$ruleTree = Mage::getModel(
|
109 |
+
'api2/acl_global_rule_tree',
|
110 |
+
array('type' => Mage_Api2_Model_Acl_Global_Rule_Tree::TYPE_ATTRIBUTE)
|
111 |
+
);
|
112 |
+
|
113 |
+
|
114 |
+
$attribute = Mage::getModel('api2/acl_filter_attribute');
|
115 |
+
|
116 |
+
|
117 |
+
$collection = $attribute->getCollection();
|
118 |
+
$collection->addFilterByUserType($type);
|
119 |
+
|
120 |
+
/** @var $model Mage_Api2_Model_Acl_Filter_Attribute */
|
121 |
+
foreach ($collection as $model) {
|
122 |
+
$model->delete();
|
123 |
+
}
|
124 |
+
|
125 |
+
foreach ($ruleTree->getPostResources() as $resourceId => $operations) {
|
126 |
+
if (Mage_Api2_Model_Acl_Global_Rule::RESOURCE_ALL === $resourceId) {
|
127 |
+
$attribute->setUserType($type)
|
128 |
+
->setResourceId($resourceId)
|
129 |
+
->save();
|
130 |
+
} else {
|
131 |
+
foreach ($operations as $operation => $attributes) {
|
132 |
+
$attribute->setId(null)
|
133 |
+
->isObjectNew(true);
|
134 |
+
|
135 |
+
$attribute->setUserType($type)
|
136 |
+
->setResourceId($resourceId)
|
137 |
+
->setOperation($operation)
|
138 |
+
->setAllowedAttributes(implode(',', array_keys($attributes)))
|
139 |
+
->save();
|
140 |
+
}
|
141 |
+
}
|
142 |
+
}
|
143 |
+
} catch (Exception $e) {
|
144 |
+
$e->getMessage();
|
145 |
+
}
|
146 |
+
|
147 |
+
}
|
148 |
+
|
149 |
+
protected function createOauthuser(){
|
150 |
+
|
151 |
+
$model = Mage::getModel('oauth/consumer');
|
152 |
+
$helper = Mage::helper('oauth');
|
153 |
+
$data = array(
|
154 |
+
|
155 |
+
'name'=>'amosoft',
|
156 |
+
'key'=> $helper->generateConsumerKey(),
|
157 |
+
'secret'=> $helper->generateConsumerSecret(),
|
158 |
+
) ;
|
159 |
+
$model->load($data['name'],'name');
|
160 |
+
try {
|
161 |
+
if(!$model->getId()){
|
162 |
+
$model->addData($data);
|
163 |
+
$model->save();
|
164 |
+
}
|
165 |
+
}catch (Exception $e) {
|
166 |
+
echo $e->getMessage();
|
167 |
+
exit;
|
168 |
+
}
|
169 |
+
|
170 |
+
return array('consumer_id' => $model->getId(),'consumer_key'=>$model->getKey(),'consumer_secret'=>$model->getSecret());
|
171 |
+
}
|
172 |
+
|
173 |
+
protected function createAdminUserAndRole(){
|
174 |
+
|
175 |
+
$resource = '__root__,admin/amosoft,admin/dropship/integration,admin/dropship/order_sourcing,admin/dropship/vendor_ranking,admin/dropship/inventory,admin/dropship/suppliers';
|
176 |
+
$roleName = 'amosoftds';
|
177 |
+
|
178 |
+
$role = Mage::getModel('admin/roles');
|
179 |
+
$username = 'amosoftds';
|
180 |
+
$email = Mage::helper('dropship')->getConfigObject('apiconfig/email/toaddress');
|
181 |
+
$user = Mage::getModel('admin/user');
|
182 |
+
$user->loadByUsername($username);
|
183 |
+
if(!$user->getId()){
|
184 |
+
$user->setData(array(
|
185 |
+
'username' => $username,
|
186 |
+
'firstname' => 'amosoft',
|
187 |
+
'lastname' => 'amosoft',
|
188 |
+
'email' => $email.'.'.rand(1,99),
|
189 |
+
'password' =>'amosoft@123',
|
190 |
+
'is_active' => 1
|
191 |
+
));
|
192 |
+
|
193 |
+
try {
|
194 |
+
|
195 |
+
$user->save();
|
196 |
+
|
197 |
+
} catch (Exception $e) {
|
198 |
+
echo $e->getMessage();
|
199 |
+
exit;
|
200 |
+
}
|
201 |
+
}
|
202 |
+
|
203 |
+
$role->load($roleName,'role_name');
|
204 |
+
//Assign Role Id
|
205 |
+
try {
|
206 |
+
|
207 |
+
$role->setName($roleName)
|
208 |
+
->setPid(0)
|
209 |
+
->setRoleType('G')
|
210 |
+
->setGwsIsAll(1)
|
211 |
+
->setGwsWebsites(NULL)
|
212 |
+
->setGwsStoreGroups(NULL);
|
213 |
+
|
214 |
+
$role->save();
|
215 |
+
|
216 |
+
Mage::getModel("admin/rules")
|
217 |
+
->setRoleId($role->getId())
|
218 |
+
->setResources($resource)
|
219 |
+
->saveRel();
|
220 |
+
|
221 |
+
$this->_addUserToRole($user->getId(), $role->getId());
|
222 |
+
|
223 |
+
|
224 |
+
} catch (Exception $e) {
|
225 |
+
echo $e->getMessage();
|
226 |
+
exit;
|
227 |
+
}
|
228 |
+
return $user->getId();
|
229 |
+
}
|
230 |
+
|
231 |
+
protected function userExists($user)
|
232 |
+
{
|
233 |
+
$result = Mage::getResourceModel('admin/user')->userExists($user);
|
234 |
+
return (is_array($result) && count($result) > 0) ? true : false;
|
235 |
+
}
|
236 |
+
protected function _addUserToRole($userId, $roleId)
|
237 |
+
{
|
238 |
+
$user = Mage::getModel("admin/user")->load($userId);
|
239 |
+
$user->setRoleId($roleId)->setUserId($userId);
|
240 |
+
|
241 |
+
if( $user->roleUserExists() === true ) {
|
242 |
+
return false;
|
243 |
+
} else {
|
244 |
+
$user->add();
|
245 |
+
return true;
|
246 |
+
}
|
247 |
+
}
|
248 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Api2/Inventory.php
ADDED
@@ -0,0 +1,19 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Model_Api2_Inventory extends Mage_Api2_Model_Resource
|
10 |
+
{
|
11 |
+
public function getAvailableAttributes($userType, $operation)
|
12 |
+
{
|
13 |
+
return array (
|
14 |
+
'vendordata' => 'vendordata'
|
15 |
+
);
|
16 |
+
|
17 |
+
}
|
18 |
+
|
19 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Api2/Inventory/Rest.php
ADDED
@@ -0,0 +1,53 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
|
8 |
+
*/
|
9 |
+
abstract class Amosoft_Dropship_Model_Api2_Inventory_Rest extends Amosoft_Dropship_Model_Api2_Inventory
|
10 |
+
{
|
11 |
+
/**
|
12 |
+
* Current loaded product
|
13 |
+
*
|
14 |
+
* @var Mage_Catalog_Model_Product
|
15 |
+
*/
|
16 |
+
protected $_product;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Retrieve product data
|
20 |
+
*
|
21 |
+
* @return array
|
22 |
+
*/
|
23 |
+
protected function _retrieve()
|
24 |
+
{
|
25 |
+
$product = $this->_getProduct();
|
26 |
+
|
27 |
+
$this->_prepareProductForResponse($product);
|
28 |
+
return $product->getData();
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Product create only available for admin
|
33 |
+
*
|
34 |
+
* @param array $data
|
35 |
+
*/
|
36 |
+
protected function _create(array $data)
|
37 |
+
{
|
38 |
+
$this->_critical(self::RESOURCE_METHOD_NOT_ALLOWED);
|
39 |
+
}
|
40 |
+
/**
|
41 |
+
* Product create only available for admin
|
42 |
+
*
|
43 |
+
* @param array $data
|
44 |
+
*/
|
45 |
+
protected function _multicreate(array $data)
|
46 |
+
{
|
47 |
+
|
48 |
+
//return array('name'=>'shashank');
|
49 |
+
//$this->_critical(self::RESOURCE_METHOD_NOT_ALLOWED);
|
50 |
+
}
|
51 |
+
|
52 |
+
|
53 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Api2/Inventory/Rest/Admin/V1.php
ADDED
@@ -0,0 +1,37 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Model_Api2_Inventory_Rest_Admin_V1 extends Amosoft_Dropship_Model_Api2_Inventory_Rest
|
10 |
+
{
|
11 |
+
protected function _create(array $data)
|
12 |
+
{
|
13 |
+
if(Mage::helper('dropship')->isProcessRunning('bulk_assign')){
|
14 |
+
$message = 'Bulk product setup is currently running hence cannot run REST import';
|
15 |
+
echo $message;
|
16 |
+
//Mage::log($message, null, 'amosoft_log_report.log');
|
17 |
+
die;
|
18 |
+
}
|
19 |
+
$requestData = array_chunk($data['vendordata'], 1, true);
|
20 |
+
try {
|
21 |
+
foreach($requestData as $chunkData)
|
22 |
+
{
|
23 |
+
$processedData['vendordata'] = $chunkData;
|
24 |
+
$result[] = Mage::getModel('dropship/inventory')->prepareInventoryTable($processedData);
|
25 |
+
}
|
26 |
+
|
27 |
+
foreach($result as $row){
|
28 |
+
foreach($row as $vendor=>$msg){
|
29 |
+
echo $msg.' '.$vendor.'<br>';
|
30 |
+
}
|
31 |
+
}
|
32 |
+
die();
|
33 |
+
} catch (Exception $e) {
|
34 |
+
die($e->getMessage());
|
35 |
+
}
|
36 |
+
}
|
37 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Api2/Inventory/Rest/Customer/V1.php
ADDED
@@ -0,0 +1,65 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
|
8 |
+
*/
|
9 |
+
class Mage_Catalog_Model_Api2_Product_Rest_Customer_V1 extends Mage_Catalog_Model_Api2_Product_Rest
|
10 |
+
{
|
11 |
+
/**
|
12 |
+
* Current logged in customer
|
13 |
+
*
|
14 |
+
* @var Mage_Customer_Model_Customer
|
15 |
+
*/
|
16 |
+
protected $_customer;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Get customer group
|
20 |
+
*
|
21 |
+
* @return int
|
22 |
+
*/
|
23 |
+
protected function _getCustomerGroupId()
|
24 |
+
{
|
25 |
+
return $this->_getCustomer()->getGroupId();
|
26 |
+
}
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Define product price with or without taxes
|
30 |
+
*
|
31 |
+
* @param float $price
|
32 |
+
* @param bool $withTax
|
33 |
+
* @return float
|
34 |
+
*/
|
35 |
+
protected function _applyTaxToPrice($price, $withTax = true)
|
36 |
+
{
|
37 |
+
$customer = $this->_getCustomer();
|
38 |
+
/** @var $session Mage_Customer_Model_Session */
|
39 |
+
$session = Mage::getSingleton('customer/session');
|
40 |
+
$session->setCustomerId($customer->getId());
|
41 |
+
$price = $this->_getPrice($price, $withTax, $customer->getPrimaryShippingAddress(),
|
42 |
+
$customer->getPrimaryBillingAddress(), $customer->getTaxClassId());
|
43 |
+
$session->setCustomerId(null);
|
44 |
+
|
45 |
+
return $price;
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Retrieve current customer
|
50 |
+
*
|
51 |
+
* @return Mage_Customer_Model_Customer
|
52 |
+
*/
|
53 |
+
protected function _getCustomer()
|
54 |
+
{
|
55 |
+
if (is_null($this->_customer)) {
|
56 |
+
/** @var $customer Mage_Customer_Model_Customer */
|
57 |
+
$customer = Mage::getModel('customer/customer')->load($this->getApiUser()->getUserId());
|
58 |
+
if (!$customer->getId()) {
|
59 |
+
$this->_critical('Customer not found.', Mage_Api2_Model_Server::HTTP_INTERNAL_ERROR);
|
60 |
+
}
|
61 |
+
$this->_customer = $customer;
|
62 |
+
}
|
63 |
+
return $this->_customer;
|
64 |
+
}
|
65 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Api2/Inventory/Rest/Guest/V1.php
ADDED
@@ -0,0 +1,12 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
|
9 |
+
class Amosoft_Dropship_Model_Api2_Inventory_Rest_Guest_V1 extends Amosoft_Dropship_Model_Api2_Inventory_Rest
|
10 |
+
{
|
11 |
+
|
12 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Api2/Product.php
ADDED
@@ -0,0 +1,18 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Model_Api2_Product extends Mage_Api2_Model_Resource
|
10 |
+
{
|
11 |
+
public function getAvailableAttributes($userType, $operation)
|
12 |
+
{
|
13 |
+
return array (
|
14 |
+
'productdata' => 'productdata'
|
15 |
+
);
|
16 |
+
}
|
17 |
+
|
18 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Api2/Product/Rest.php
ADDED
@@ -0,0 +1,53 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
|
8 |
+
*/
|
9 |
+
abstract class Amosoft_Dropship_Model_Api2_Product_Rest extends Amosoft_Dropship_Model_Api2_Product
|
10 |
+
{
|
11 |
+
/**
|
12 |
+
* Current loaded product
|
13 |
+
*
|
14 |
+
* @var Mage_Catalog_Model_Product
|
15 |
+
*/
|
16 |
+
protected $_product;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Retrieve product data
|
20 |
+
*
|
21 |
+
* @return array
|
22 |
+
*/
|
23 |
+
protected function _retrieve()
|
24 |
+
{
|
25 |
+
$product = $this->_getProduct();
|
26 |
+
|
27 |
+
$this->_prepareProductForResponse($product);
|
28 |
+
return $product->getData();
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Product create only available for admin
|
33 |
+
*
|
34 |
+
* @param array $data
|
35 |
+
*/
|
36 |
+
protected function _create(array $data)
|
37 |
+
{
|
38 |
+
$this->_critical(self::RESOURCE_METHOD_NOT_ALLOWED);
|
39 |
+
}
|
40 |
+
/**
|
41 |
+
* Product create only available for admin
|
42 |
+
*
|
43 |
+
* @param array $data
|
44 |
+
*/
|
45 |
+
protected function _multicreate(array $data)
|
46 |
+
{
|
47 |
+
|
48 |
+
//return array('name'=>'shashank');
|
49 |
+
//$this->_critical(self::RESOURCE_METHOD_NOT_ALLOWED);
|
50 |
+
}
|
51 |
+
|
52 |
+
|
53 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Api2/Product/Rest/Admin/V1.php
ADDED
@@ -0,0 +1,44 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Model_Api2_Product_Rest_Admin_V1 extends Amosoft_Dropship_Model_Api2_Product_Rest
|
10 |
+
{
|
11 |
+
protected function _create(array $data)
|
12 |
+
{
|
13 |
+
//request data parse in to chunks
|
14 |
+
$requestData = array_chunk($data['productdata'], 1, true);
|
15 |
+
try {
|
16 |
+
$time_start = now();
|
17 |
+
foreach($requestData as $chunkData)
|
18 |
+
{
|
19 |
+
$processedData['productdata'] = $chunkData;
|
20 |
+
$result[] = Mage::getModel('dropship/productimport')->_init()->processData($processedData);
|
21 |
+
}
|
22 |
+
$time_end = now();
|
23 |
+
echo 'Start Time = '.$time_start;
|
24 |
+
echo '<hr>';
|
25 |
+
echo 'End Time = '.$time_end;
|
26 |
+
echo '<hr>';
|
27 |
+
}catch (Exception $e) {
|
28 |
+
echo $e->getMessage();
|
29 |
+
}catch (Mage_Core_Exception $e) {
|
30 |
+
$this->_critical($e->getMessage(), Mage_Api2_Model_Server::HTTP_INTERNAL_ERROR);
|
31 |
+
} catch (Exception $e) {
|
32 |
+
$this->_critical(self::RESOURCE_UNKNOWN_ERROR);
|
33 |
+
}
|
34 |
+
foreach($result as $row){
|
35 |
+
foreach($row as $vendor=>$msg){
|
36 |
+
echo '<br>'.$vendor.' ';
|
37 |
+
foreach($msg as $err){
|
38 |
+
echo $err;
|
39 |
+
}
|
40 |
+
}
|
41 |
+
}
|
42 |
+
die();
|
43 |
+
}
|
44 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Api2/Product/Rest/Customer/V1.php
ADDED
@@ -0,0 +1,65 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
|
8 |
+
*/
|
9 |
+
class Mage_Catalog_Model_Api2_Product_Rest_Customer_V1 extends Mage_Catalog_Model_Api2_Product_Rest
|
10 |
+
{
|
11 |
+
/**
|
12 |
+
* Current logged in customer
|
13 |
+
*
|
14 |
+
* @var Mage_Customer_Model_Customer
|
15 |
+
*/
|
16 |
+
protected $_customer;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Get customer group
|
20 |
+
*
|
21 |
+
* @return int
|
22 |
+
*/
|
23 |
+
protected function _getCustomerGroupId()
|
24 |
+
{
|
25 |
+
return $this->_getCustomer()->getGroupId();
|
26 |
+
}
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Define product price with or without taxes
|
30 |
+
*
|
31 |
+
* @param float $price
|
32 |
+
* @param bool $withTax
|
33 |
+
* @return float
|
34 |
+
*/
|
35 |
+
protected function _applyTaxToPrice($price, $withTax = true)
|
36 |
+
{
|
37 |
+
$customer = $this->_getCustomer();
|
38 |
+
/** @var $session Mage_Customer_Model_Session */
|
39 |
+
$session = Mage::getSingleton('customer/session');
|
40 |
+
$session->setCustomerId($customer->getId());
|
41 |
+
$price = $this->_getPrice($price, $withTax, $customer->getPrimaryShippingAddress(),
|
42 |
+
$customer->getPrimaryBillingAddress(), $customer->getTaxClassId());
|
43 |
+
$session->setCustomerId(null);
|
44 |
+
|
45 |
+
return $price;
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Retrieve current customer
|
50 |
+
*
|
51 |
+
* @return Mage_Customer_Model_Customer
|
52 |
+
*/
|
53 |
+
protected function _getCustomer()
|
54 |
+
{
|
55 |
+
if (is_null($this->_customer)) {
|
56 |
+
/** @var $customer Mage_Customer_Model_Customer */
|
57 |
+
$customer = Mage::getModel('customer/customer')->load($this->getApiUser()->getUserId());
|
58 |
+
if (!$customer->getId()) {
|
59 |
+
$this->_critical('Customer not found.', Mage_Api2_Model_Server::HTTP_INTERNAL_ERROR);
|
60 |
+
}
|
61 |
+
$this->_customer = $customer;
|
62 |
+
}
|
63 |
+
return $this->_customer;
|
64 |
+
}
|
65 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Api2/Product/Rest/Guest/V1.php
ADDED
@@ -0,0 +1,12 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
|
9 |
+
class Amosoft_Dropship_Model_Api2_Product_Rest_Guest_V1 extends Amosoft_Dropship_Model_Api2_Product_Rest
|
10 |
+
{
|
11 |
+
|
12 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Carrier/Flatrateperproduct.php
ADDED
@@ -0,0 +1,65 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright (c) 2013 www.magebuzz.com
|
4 |
+
*/
|
5 |
+
class Amosoft_Dropship_Model_Carrier_Flatrateperproduct
|
6 |
+
extends Mage_Shipping_Model_Carrier_Abstract
|
7 |
+
implements Mage_Shipping_Model_Carrier_Interface {
|
8 |
+
protected $_code = 'suppliershippingcostperproduct';
|
9 |
+
public function collectRates(Mage_Shipping_Model_Rate_Request $request)
|
10 |
+
{
|
11 |
+
$itemStatusComplete = Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_TRANSMITTING;
|
12 |
+
$itemStatusBackorder = Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_BACKORDER;
|
13 |
+
$itemStatusNoDropShip = Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_NO_DROPSHIP;
|
14 |
+
|
15 |
+
if (!$this->getConfigFlag('active')) {
|
16 |
+
return false;
|
17 |
+
}
|
18 |
+
$shippingPrice =0;
|
19 |
+
if ($request->getAllItems()) {
|
20 |
+
foreach ($request->getAllItems() as $item) {
|
21 |
+
|
22 |
+
$product = Mage::getModel('catalog/product')->load($item->getProductId());
|
23 |
+
//print_r($product->getData()); exit;
|
24 |
+
if($product->getTypeId()=='configurable' || $product->getTypeId()=='bundle') {
|
25 |
+
continue;
|
26 |
+
}
|
27 |
+
|
28 |
+
$shipCost = Mage::helper('dropship')->getVendorShippingCost($item);
|
29 |
+
//print_r($shipCost); exit;
|
30 |
+
if($shipCost==null || $shipCost==0){
|
31 |
+
$shippingPrice += $item->getQty() * $this->getConfigData('price');
|
32 |
+
}
|
33 |
+
else{
|
34 |
+
$shippingPrice += $item->getQty() * $shipCost;
|
35 |
+
}
|
36 |
+
}
|
37 |
+
}
|
38 |
+
$result = Mage::getModel('shipping/rate_result');
|
39 |
+
if ($shippingPrice !== false) {
|
40 |
+
$method = Mage::getModel('shipping/rate_result_method');
|
41 |
+
$method->setCarrier('suppliershippingcostperproduct');
|
42 |
+
$method->setCarrierTitle($this->getConfigData('title'));
|
43 |
+
$method->setMethod('suppliershippingcostperproduct');
|
44 |
+
$method->setMethodTitle($this->getConfigData('name'));
|
45 |
+
$method->setPrice($shippingPrice);
|
46 |
+
$method->setCost($shippingPrice);
|
47 |
+
$result->append($method);
|
48 |
+
}
|
49 |
+
return $result;
|
50 |
+
}
|
51 |
+
public function getAllowedMethods()
|
52 |
+
{
|
53 |
+
return array('suppliershippingcostperproduct'=>$this->getConfigData('name'));
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
|
58 |
+
|
59 |
+
|
60 |
+
|
61 |
+
|
62 |
+
|
63 |
+
|
64 |
+
|
65 |
+
|
app/code/local/Amosoft/Dropship/Model/Csvparser.php
ADDED
@@ -0,0 +1,265 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
|
9 |
+
class Amosoft_Dropship_Model_Csvparser
|
10 |
+
{
|
11 |
+
|
12 |
+
protected $dbConnection;
|
13 |
+
protected $tableName;
|
14 |
+
protected $vendorObject;
|
15 |
+
protected $chunksize = 50;
|
16 |
+
//protected $chnagedValue = array();
|
17 |
+
protected $ftpCSVFormat = array('vendor_code','vendor_sku','qty','cost');
|
18 |
+
protected $manualCSVFormat = array('vendor_sku','qty','cost');
|
19 |
+
protected $productSetupCSVFormat = array('magento_sku','vendor_sku');
|
20 |
+
protected $_exportHeaders = array('Vendor Code','Vendor','Magento Sku','Vendor Sku','Cost','Inventory','Last Sync Date');
|
21 |
+
protected $_indexVendorSku = 0;
|
22 |
+
protected $_indexStock = 1;
|
23 |
+
protected $_indexPrice = 2;
|
24 |
+
|
25 |
+
public function __construct(){
|
26 |
+
|
27 |
+
$this->dbConnection = Mage::helper('dropship')->getDatabaseConnection();
|
28 |
+
$this->tableName = Mage::helper('dropship')->getTableName('dropship/csvtmpdata');
|
29 |
+
$this->vendorObject = Mage::getModel('dropship/inventory');
|
30 |
+
}
|
31 |
+
|
32 |
+
// check is csv for manual or ftp other csv will not process data
|
33 |
+
protected function isProcessRequired($header)
|
34 |
+
{
|
35 |
+
$result = true;
|
36 |
+
if($header[0] == 'vendor_code')
|
37 |
+
{
|
38 |
+
$diffArray=array_diff($this->ftpCSVFormat,$header);
|
39 |
+
$result = (count($diffArray) == 0);
|
40 |
+
}else
|
41 |
+
{
|
42 |
+
$diffArray=array_diff($this->manualCSVFormat,$header);
|
43 |
+
$result = (count($diffArray) == 0);
|
44 |
+
}
|
45 |
+
//var_dump($result);
|
46 |
+
//die;
|
47 |
+
return $result;
|
48 |
+
}
|
49 |
+
|
50 |
+
protected function checkFtpHeader($header)
|
51 |
+
{
|
52 |
+
if(count($header) == 4 )
|
53 |
+
{
|
54 |
+
$this->_indexVendorSku = 1;
|
55 |
+
$this->_indexStock = 2;
|
56 |
+
$this->_indexPrice = 3;
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
public function getChangedValue($csvData,$vendorCode){
|
61 |
+
|
62 |
+
$parsedData = array();
|
63 |
+
if(count($csvData) <= 1 || !$this->isProcessRequired($csvData[0]))
|
64 |
+
{
|
65 |
+
return $csvData;
|
66 |
+
}
|
67 |
+
$this->emptyTable();
|
68 |
+
$this->checkFtpHeader($csvData[0]);
|
69 |
+
$insertQuery = $this->insertMultiple($csvData,$vendorCode);
|
70 |
+
if($insertQuery/*$this->executeStm($insertQuery)*/){
|
71 |
+
$parsedData = $this->prepareCsvjoin($csvData[0]);
|
72 |
+
//array_unshift($parsedData,$csvData[0]);
|
73 |
+
}
|
74 |
+
else{
|
75 |
+
$parsedData = $csvData;
|
76 |
+
}
|
77 |
+
return $parsedData;
|
78 |
+
}
|
79 |
+
|
80 |
+
protected function insertMultiple($csvData,$vendorCode){
|
81 |
+
$connection = $this->dbConnection->getConnection ( 'core_write' );
|
82 |
+
$csvArray = array();
|
83 |
+
$chunkCsvData = array_chunk($csvData,$this->chunksize);
|
84 |
+
foreach($chunkCsvData as $value)
|
85 |
+
{
|
86 |
+
foreach ($value as $key=>$data)
|
87 |
+
{
|
88 |
+
if($key == 0)
|
89 |
+
continue;
|
90 |
+
$csvArray[] = array('vendor_code'=>$vendorCode,'csv_vendor_sku'=>trim($data [$this->_indexVendorSku]),'csv_stock'=>$data [$this->_indexStock],'csv_price'=>$data [$this->_indexPrice]);
|
91 |
+
}
|
92 |
+
try {
|
93 |
+
$connection->insertOnDuplicate($this->tableName,$csvArray,array('csv_vendor_sku','csv_stock','csv_price'));
|
94 |
+
} catch (Exception $e) {
|
95 |
+
Mage::log($e->getTrace(),null,'amosoft_debug.log');
|
96 |
+
return false;
|
97 |
+
}
|
98 |
+
$csvArray = array();
|
99 |
+
}
|
100 |
+
return true;
|
101 |
+
}
|
102 |
+
|
103 |
+
protected function executeStm($query){
|
104 |
+
|
105 |
+
$write = $this->dbConnection->getConnection ( 'core_write' );
|
106 |
+
$write->beginTransaction ();
|
107 |
+
$write->query($query);
|
108 |
+
try {
|
109 |
+
$write->commit ();
|
110 |
+
return true;
|
111 |
+
} catch ( Exception $e ) {
|
112 |
+
$write->rollBack ();
|
113 |
+
Mage::log($e->getMessage(), null, 'vendor_inventory_import_error.log');
|
114 |
+
return false;
|
115 |
+
}
|
116 |
+
|
117 |
+
}
|
118 |
+
|
119 |
+
protected function prepareCsvjoin($header){
|
120 |
+
$chnagedValue =array();
|
121 |
+
$chnagedValue[] = $header;
|
122 |
+
$collection = $this->vendorObject->getCollection()->addFieldToSelect(array('amosoft_vendor_code','amosoft_vendor_sku','stock','cost'));
|
123 |
+
$collection->getSelect()->join(array('inventory'=>$this->tableName),
|
124 |
+
'inventory.vendor_code = main_table.amosoft_vendor_code and inventory.csv_vendor_sku = main_table.amosoft_vendor_sku')->where('inventory.csv_stock != main_table.stock or inventory.csv_price != main_table.cost');
|
125 |
+
|
126 |
+
if($collection->getSize() > 0 ){
|
127 |
+
|
128 |
+
foreach($collection as $data){
|
129 |
+
$query = 'UPDATE '.$this->tableName.' set is_processed = 1 where csv_vendor_sku = "'.$data->getCsvVendorSku().'" and vendor_code = "'.$data->getAmosoftVendorCode().'"';
|
130 |
+
$chnagedValue[$data->getRowId()] = array($data->getCsvVendorSku(),$data->getCsvStock(),$data->getCsvPrice());
|
131 |
+
$this->executeStm($query);
|
132 |
+
}
|
133 |
+
}
|
134 |
+
return $chnagedValue;
|
135 |
+
}
|
136 |
+
|
137 |
+
public function emptyTable()
|
138 |
+
{
|
139 |
+
$write = $this->dbConnection->getConnection ( 'core_write' );
|
140 |
+
$query = 'TRUNCATE TABLE '.$this->tableName;
|
141 |
+
try {
|
142 |
+
$write->query($query);
|
143 |
+
} catch ( Exception $e ) {
|
144 |
+
|
145 |
+
Mage::log($e->getMessage(), null, 'vendor_inventory_import_error.log');
|
146 |
+
return false;
|
147 |
+
}
|
148 |
+
|
149 |
+
}
|
150 |
+
public function getCsvFile($itemObject)
|
151 |
+
{
|
152 |
+
$io = new Varien_Io_File();
|
153 |
+
$path = Mage::getBaseDir('var') . DS . 'export' . DS;
|
154 |
+
$name = md5(microtime());
|
155 |
+
$file = $path . DS . $name . '.csv';
|
156 |
+
$io->setAllowCreateFolders(true);
|
157 |
+
$io->open(array('path' => $path));
|
158 |
+
$io->streamOpen($file, 'w+');
|
159 |
+
$io->streamLock(true);
|
160 |
+
$io->streamWriteCsv($this->_exportHeaders);
|
161 |
+
$this->_exportCsvItem($itemObject,$io);
|
162 |
+
$io->streamUnlock();
|
163 |
+
$io->streamClose();
|
164 |
+
return array(
|
165 |
+
'type' => 'filename',
|
166 |
+
'value' => $file,
|
167 |
+
'rm' => true // can delete file after use
|
168 |
+
);
|
169 |
+
}
|
170 |
+
protected function _exportCsvItem($itemObject, Varien_Io_File $adapter)
|
171 |
+
{
|
172 |
+
$row = array();
|
173 |
+
foreach ($itemObject as $item) {
|
174 |
+
$row[] = $item->getAmosoftVendorCode();
|
175 |
+
$row[] = $item->getAmosoftVendorName();
|
176 |
+
$row[] = $item->getProductSku();
|
177 |
+
$row[] = $item->getAmosoftVendorSku();
|
178 |
+
$row[] = $item->getCost();
|
179 |
+
$row[] = $item->getStock();
|
180 |
+
$row[] = $this->formatDate($item->getUpdatedAt());
|
181 |
+
$adapter->streamWriteCsv($row);
|
182 |
+
unset($row);
|
183 |
+
}
|
184 |
+
}
|
185 |
+
public function formatDate($date){
|
186 |
+
$format = Mage::app()->getLocale()->getDateTimeFormat(
|
187 |
+
Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM
|
188 |
+
);
|
189 |
+
$date = Mage::app()->getLocale()
|
190 |
+
->date($date, Varien_Date::DATETIME_INTERNAL_FORMAT)->toString($format);
|
191 |
+
return $date;
|
192 |
+
}
|
193 |
+
public function generateManualCsvRow($csvData,$isProductSetupMode,$amosoft_vendor_code)
|
194 |
+
{
|
195 |
+
$records = array();
|
196 |
+
foreach($csvData as $row => $csvRowData)
|
197 |
+
{
|
198 |
+
if($row == 0)
|
199 |
+
continue;
|
200 |
+
if(!$isProductSetupMode)
|
201 |
+
{
|
202 |
+
(count($csvRowData) <= 3) ? array_unshift($csvRowData, "") : $csvRowData;
|
203 |
+
if(is_numeric($csvRowData[2])){
|
204 |
+
/* LBN - 935 change */
|
205 |
+
$magento_sku = Mage::getModel('dropship/uploadvendor')->getMagentoSku($amosoft_vendor_code, trim($csvRowData[1]));
|
206 |
+
$csvqty = (!empty($magento_sku)) ? Mage::helper('dropship')->getIsQtyDecimal($magento_sku,$csvRowData[2]) : $csvRowData[2];;
|
207 |
+
}
|
208 |
+
else
|
209 |
+
{
|
210 |
+
$csvqty = $csvRowData[2];
|
211 |
+
}
|
212 |
+
}
|
213 |
+
if(!$isProductSetupMode)
|
214 |
+
$records[$row] = array('vendor_sku'=>trim($csvRowData[1]),'qty'=>$csvqty ,'cost'=>$csvRowData[3],'amosoft_vendor_code'=>$amosoft_vendor_code);
|
215 |
+
else
|
216 |
+
$records[$row] = array('magento_sku'=>trim($csvRowData[0]),'vendor_sku'=>trim($csvRowData[1]),'qty'=>0 ,'cost'=>0,'amosoft_vendor_code'=>$amosoft_vendor_code);
|
217 |
+
}
|
218 |
+
return $records;
|
219 |
+
}
|
220 |
+
public function generateFtpCsvRow($csvData,$vendorCode)
|
221 |
+
{
|
222 |
+
$records = array();
|
223 |
+
foreach($csvData as $row => $csvRowData)
|
224 |
+
{
|
225 |
+
if($row == 0)
|
226 |
+
continue;
|
227 |
+
|
228 |
+
(count($csvRowData) <= 3) ? array_unshift($csvRowData, "") : $csvRowData;
|
229 |
+
if(is_numeric($csvRowData[2]) || $csvRowData[2] > 0){
|
230 |
+
|
231 |
+
$magento_sku = Mage::getModel('dropship/uploadvendor')->getMagentoSku($vendorCode, trim($csvRowData[1]));
|
232 |
+
(! empty ( $magento_sku )) ? $qty = Mage::helper ( 'dropship' )->getIsQtyDecimal ( $magento_sku, $csvRowData [2] ) : $qty = $csvRowData [2];
|
233 |
+
|
234 |
+
}else{
|
235 |
+
$qty = $csvRowData[2];
|
236 |
+
}
|
237 |
+
$records[$row] = array('amosoft_vendor_code'=>$vendorCode,'vendor_sku'=>trim($csvRowData[1]),'qty'=>$qty ,'cost'=>$csvRowData[3]);
|
238 |
+
}
|
239 |
+
return $records;
|
240 |
+
}
|
241 |
+
public function isCsvFileEmpty()
|
242 |
+
{
|
243 |
+
return (count($this->getCsvRows()) > 0) ? false : true;
|
244 |
+
}
|
245 |
+
protected function getCsvRows()
|
246 |
+
{
|
247 |
+
$rows = array();
|
248 |
+
$conn = $this->dbConnection->getConnection ( 'core_read' );
|
249 |
+
$select = $conn->select()->from($this->tableName)->where('is_processed = 0');
|
250 |
+
$stmt = $conn->query($select);
|
251 |
+
$rows = $stmt->fetchAll();
|
252 |
+
return $rows;
|
253 |
+
}
|
254 |
+
public function getUnprocessedCsvRows($vendorCode,$isFtp){
|
255 |
+
$records = array();
|
256 |
+
$rows = $this->getCsvRows();
|
257 |
+
if(count($rows) > 0 ){
|
258 |
+
foreach($rows as $row){
|
259 |
+
$records[$row['row_id']] = array('amosoft_vendor_code'=>$vendorCode,'vendor_sku'=>trim($row['csv_vendor_sku']),'qty'=>$row['csv_stock'] ,'cost'=>$row['csv_price']);
|
260 |
+
}
|
261 |
+
}
|
262 |
+
return $records;
|
263 |
+
}
|
264 |
+
}
|
265 |
+
|
app/code/local/Amosoft/Dropship/Model/Inventory.php
ADDED
@@ -0,0 +1,468 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Inventory extends Mage_Core_Model_Abstract
|
11 |
+
{
|
12 |
+
protected $_productInventoryAdd = 0;
|
13 |
+
protected $_productInventorySubtract = 0;
|
14 |
+
protected $_productInventoryUpdate = 0;
|
15 |
+
protected $_stockBeforeQtyDecimalCheck = '';
|
16 |
+
protected $_iserror = true;
|
17 |
+
protected $_errorMsg = '';
|
18 |
+
protected function _construct()
|
19 |
+
{
|
20 |
+
$this->_init("dropship/inventory");
|
21 |
+
}
|
22 |
+
|
23 |
+
public function prepareInventoryTable($restReqest)
|
24 |
+
{
|
25 |
+
$result = $this->prepareData($restReqest);
|
26 |
+
$this->updateProductStock();
|
27 |
+
return $result;
|
28 |
+
}
|
29 |
+
|
30 |
+
protected function updateProductStock()
|
31 |
+
{
|
32 |
+
$dataCollection = Mage::getModel('dropship/inventory')->getCollection();
|
33 |
+
$stockData = array();
|
34 |
+
if($dataCollection->count() < 0){
|
35 |
+
return;
|
36 |
+
}
|
37 |
+
foreach($dataCollection as $stock){
|
38 |
+
if(array_key_exists($stock->getProductSku(),$stockData)){
|
39 |
+
|
40 |
+
$stockData[$stock->getProductSku()] = $stockData[$stock->getProductSku()] + $stock->getStock();
|
41 |
+
}else{
|
42 |
+
$stockData[$stock->getProductSku()] = $stock->getStock();
|
43 |
+
}
|
44 |
+
|
45 |
+
}
|
46 |
+
if(empty($stockData)){
|
47 |
+
return;
|
48 |
+
}
|
49 |
+
foreach ($stockData as $sku=>$qty) {
|
50 |
+
$this->saveStockData($sku, $qty);
|
51 |
+
}
|
52 |
+
}
|
53 |
+
|
54 |
+
protected function saveStockData($sku, $qty)
|
55 |
+
{
|
56 |
+
$productId = Mage::getModel('catalog/product')->getIdBySku($sku);
|
57 |
+
if($productId){
|
58 |
+
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
|
59 |
+
if (!$stockItem->getId()) {
|
60 |
+
$stockItem->setData('product_id', $productId);
|
61 |
+
$stockItem->setData('stock_id', 1);
|
62 |
+
}
|
63 |
+
if ($stockItem->getQty() != $qty) {
|
64 |
+
$stockItem->setData('qty', $qty);
|
65 |
+
$stockItem->setData('is_in_stock', $qty ? 1 : 0);
|
66 |
+
try {
|
67 |
+
$stockItem->save();
|
68 |
+
} catch (Exception $e) {
|
69 |
+
Mage::helper('dropship')->genrateLog(0,'mgento inventory update started','mgento inventory update ended','Section :Error In Setting/update magento inventory: '.$e->getMessage().' sku : '.$sku);
|
70 |
+
echo $e->getMessage();
|
71 |
+
}
|
72 |
+
}
|
73 |
+
}
|
74 |
+
}
|
75 |
+
|
76 |
+
|
77 |
+
protected function prepareData($restReqest)
|
78 |
+
{
|
79 |
+
$result = array();
|
80 |
+
$buffer = trim(Mage::getStoreConfig('amosoft_sourcing/inventory/buffer'));
|
81 |
+
$vendorModel = Mage::getModel('dropship/ranking')->getCollection();
|
82 |
+
foreach ($restReqest as $value) {
|
83 |
+
foreach ($value as $key=>$val) {
|
84 |
+
$result[$val['amosoft_vendor_code']] = $this->saveAmosoftInventory($val, $buffer);
|
85 |
+
}
|
86 |
+
}
|
87 |
+
return $result;
|
88 |
+
}
|
89 |
+
|
90 |
+
protected function validateRowData($val)
|
91 |
+
{
|
92 |
+
if(empty($val['product_sku']) && empty($val['amosoft_vendor_sku'])){
|
93 |
+
$this->_errorMsg = 'Please provide the Vendor SKU or Product SKU details';
|
94 |
+
$this->_iserror = false;
|
95 |
+
}elseif(empty($val['amosoft_vendor_code'])){
|
96 |
+
$this->_errorMsg = 'Error In Importing "amosoft_vendor_code" Cannot Be Empty';
|
97 |
+
$this->_iserror = false;
|
98 |
+
}
|
99 |
+
return $this->_iserror;
|
100 |
+
}
|
101 |
+
|
102 |
+
protected function updateStock($val,$buffer)
|
103 |
+
{
|
104 |
+
if(!empty($buffer))
|
105 |
+
($buffer > $val['stock']) ? $val['stock'] = 0 : $val['stock'] = $val['stock'] - $buffer;
|
106 |
+
return $val['stock'];
|
107 |
+
}
|
108 |
+
|
109 |
+
|
110 |
+
protected function _prepareCollection($val)
|
111 |
+
{
|
112 |
+
$dataCollection = Mage::getModel('dropship/inventory');
|
113 |
+
$collection = null;
|
114 |
+
$amosoft_vendor_sku = $val['amosoft_vendor_sku'];
|
115 |
+
if($amosoft_vendor_sku != ''){
|
116 |
+
$collection = $dataCollection->getCollection()->addFieldToFilter('amosoft_vendor_code',$val['amosoft_vendor_code'])->addFieldToFilter('amosoft_vendor_sku',$amosoft_vendor_sku);
|
117 |
+
if($collection->getSize() == 0 && $val['product_sku'] != ''){
|
118 |
+
if(!(Mage::getModel('catalog/product')->getIdBySku($val['product_sku']))){
|
119 |
+
$this->_errorMsg = 'Can not import Vendor inventory for non-existing product';
|
120 |
+
return $collection;
|
121 |
+
}
|
122 |
+
$collection = $dataCollection->getCollection()->addFieldToFilter('amosoft_vendor_code',$val['amosoft_vendor_code'])->addFieldToFilter('product_sku',$val['product_sku']);
|
123 |
+
}
|
124 |
+
}
|
125 |
+
else{
|
126 |
+
if($val['product_sku'] != ''){
|
127 |
+
if(!(Mage::getModel('catalog/product')->getIdBySku($val['product_sku']))){
|
128 |
+
$this->_errorMsg = 'Can not import Vendor inventory for non-existing product';
|
129 |
+
return $collection;
|
130 |
+
}
|
131 |
+
$collection = $dataCollection->getCollection()->addFieldToFilter('amosoft_vendor_code',$val['amosoft_vendor_code'])->addFieldToFilter('product_sku',$val['product_sku']);
|
132 |
+
} else{
|
133 |
+
$this->_errorMsg = 'Can not import Vendor inventory for blank product sku';
|
134 |
+
return $collection;
|
135 |
+
}
|
136 |
+
}
|
137 |
+
return $collection;
|
138 |
+
}
|
139 |
+
|
140 |
+
protected function getLogMsg($ignoreData)
|
141 |
+
{
|
142 |
+
if(count($ignoreData)>0){
|
143 |
+
if(in_array('stock', $ignoreData)) {
|
144 |
+
$msg = 'Cost Updated Successfully, Stock Ignored due to invalid data for';
|
145 |
+
$type = 'Cost Updated , Qty Ignored';
|
146 |
+
}
|
147 |
+
if(in_array('cost', $ignoreData)){
|
148 |
+
|
149 |
+
$msg = 'Stock Updated Successfully, Cost Ignored due to invalid data for';
|
150 |
+
$type = 'Qty Updated, Cost Ignored';
|
151 |
+
}
|
152 |
+
if(count($ignoreData)==2){
|
153 |
+
$msg = 'Cost & Stock Update Failed due to invalid data for';
|
154 |
+
$type = 'ignore';
|
155 |
+
}
|
156 |
+
}else{
|
157 |
+
$msg = 'Cost & Stock Updated Successfully for';
|
158 |
+
$type = 'update';
|
159 |
+
}
|
160 |
+
return array('msg'=>$msg,'type'=>$type);
|
161 |
+
}
|
162 |
+
|
163 |
+
/**
|
164 |
+
* This function is used to save Vendor inventory
|
165 |
+
* @param array $val
|
166 |
+
* @return array $msg
|
167 |
+
*/
|
168 |
+
protected function saveAmosoftInventory($rowVal, $buffer)
|
169 |
+
{
|
170 |
+
$val = array_map('trim',$rowVal);
|
171 |
+
$originalStock = $val['stock'];
|
172 |
+
$vendorObject = Mage::getModel('dropship/ranking');
|
173 |
+
$vendorCollection = $vendorObject->load($val['amosoft_vendor_code'],'amosoft_vendor_code');
|
174 |
+
if(!$this->validateRowData($val))
|
175 |
+
{
|
176 |
+
return $this->_errorMsg;
|
177 |
+
}
|
178 |
+
|
179 |
+
$ignoreData = array();
|
180 |
+
(!is_numeric($val['cost']) || $val['cost'] < 0) ? $ignoreData[]= 'cost' : '';
|
181 |
+
(!is_numeric($val['stock']) || $val['stock'] < 0) ? $ignoreData[]= 'stock' : '';
|
182 |
+
(!is_numeric($val['stock']) || $val['stock'] < 0 || $val['stock'] == "") ? $stockFlag = false : $stockFlag = true;
|
183 |
+
(!is_numeric($val['cost']) || $val['cost'] < 0 || $val['cost'] == "") ? $costFlag = false : $costFlag = true;
|
184 |
+
$val['stock'] = $this->updateStock($val,$buffer);
|
185 |
+
$collection = $this->_prepareCollection($val);
|
186 |
+
if(is_null($collection)){
|
187 |
+
return $this->_errorMsg;
|
188 |
+
}
|
189 |
+
$product_sku = $collection->getFirstItem()->getProductSku();
|
190 |
+
/* LBN - 935 change */
|
191 |
+
$val['stock'] = Mage::helper('dropship')->getIsQtyDecimal($product_sku,$val['stock']);
|
192 |
+
if($collection->getSize() >= 2 && empty($val['product_sku']))
|
193 |
+
{
|
194 |
+
return 'Multiple records found. Please provide Product SKU';
|
195 |
+
}
|
196 |
+
if($collection->getSize() > 0){
|
197 |
+
$collection->getFirstItem ()->setUpdatedAt(now());
|
198 |
+
($stockFlag == true) ? $collection->getFirstItem ()->setStock($val['stock']) : '';
|
199 |
+
($costFlag == true) ? $collection->getFirstItem ()->setCost($val['cost']) : '';
|
200 |
+
$arrayUpdate = array('updated_by'=>'system','product_sku'=>$product_sku,'amosoft_vendor_code'=>$val['amosoft_vendor_code'],'cost'=>$val['cost'],'stock'=>$originalStock);
|
201 |
+
$logDetail = $this->getLogMsg($ignoreData);
|
202 |
+
$this->_saveInventoryLog($logDetail['type'],$arrayUpdate);
|
203 |
+
if(count($ignoreData)!=2){
|
204 |
+
$collection->getFirstItem ()->save();
|
205 |
+
$this->_updateVendorList($vendorCollection,$val,false);
|
206 |
+
}
|
207 |
+
return $logDetail['msg'];
|
208 |
+
}else{
|
209 |
+
return 'Vendor Sku "'.$val['amosoft_vendor_sku'].'" and Magento SKU "'.$val['product_sku'].'" combination does not exist for vendor ';
|
210 |
+
}
|
211 |
+
}
|
212 |
+
|
213 |
+
public function saveTabVendorData($request)
|
214 |
+
{
|
215 |
+
$update = isset($request['vendor_update']) ? $request['vendor_update'] : '';
|
216 |
+
$addNew = isset($request['vendor_new']) ? $request['vendor_new'] : '';
|
217 |
+
$sku = isset($request['sku']) ? $request['sku'] : '';
|
218 |
+
$result = true;
|
219 |
+
$error = $this->_validate($request);
|
220 |
+
if($error){
|
221 |
+
return $result = false;
|
222 |
+
}
|
223 |
+
if(!empty($update)){
|
224 |
+
foreach($update as $key => $data){
|
225 |
+
if($data['is_delete'] == 1){
|
226 |
+
$this->_deleteInvendorVendor($key);
|
227 |
+
}else{
|
228 |
+
$result = $this->_updateInventoryVendor($key,$data);
|
229 |
+
}
|
230 |
+
}
|
231 |
+
}
|
232 |
+
if(!empty($addNew)){
|
233 |
+
foreach($addNew as $key => $data){
|
234 |
+
if($data['is_delete'] == 1){
|
235 |
+
continue;
|
236 |
+
}
|
237 |
+
$this->_addNewInventoryVendor($data,$sku);
|
238 |
+
}
|
239 |
+
}
|
240 |
+
$finalStock = 0;
|
241 |
+
$finalStock = $this->_productInventoryAdd + $this->_productInventoryUpdate;
|
242 |
+
return array('inventory'=>$finalStock,'result' => $result);
|
243 |
+
}
|
244 |
+
|
245 |
+
protected function _validate($request)
|
246 |
+
{
|
247 |
+
$arrVendorCode = array();
|
248 |
+
$isUniqueCombination = false;
|
249 |
+
$isEntrySame = false;
|
250 |
+
$isError = true;
|
251 |
+
$errorArr = array();
|
252 |
+
if(!empty($request['vendor_new'])){
|
253 |
+
foreach ($request['vendor_new'] as $key => $data){
|
254 |
+
$arrVendorCode[] = $data['amosoft_vendor_code'];
|
255 |
+
//patch for unique combination keys vendor_code and vendor_sku
|
256 |
+
if($this->checkCodeSkuCombination($data['amosoft_vendor_code'],$data['amosoft_vendor_sku']) > 0 )
|
257 |
+
{
|
258 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('dropship')->__('Duplicate entry found for %s , %s',$data['amosoft_vendor_code'],$data['amosoft_vendor_sku']));
|
259 |
+
$errorArr[] = 'yes';
|
260 |
+
}else{
|
261 |
+
$errorArr[] = 'no';
|
262 |
+
}
|
263 |
+
}
|
264 |
+
$isUnique = (array_unique($arrVendorCode) == $arrVendorCode);
|
265 |
+
$isEntrySame = $isUnique ? false : true;
|
266 |
+
if($isEntrySame)
|
267 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('dropship')->__('Duplicate Vendor Entry'));
|
268 |
+
$isUniqueCombination = in_array('yes',$errorArr);
|
269 |
+
}
|
270 |
+
//patch for unique combination keys vendor_code and vendor_sku
|
271 |
+
(!$isUniqueCombination && !$isEntrySame) ? $isError = false : $isError;
|
272 |
+
return $isError;
|
273 |
+
}
|
274 |
+
|
275 |
+
protected function checkCodeSkuCombination($vendorCode,$vendorSku)
|
276 |
+
{
|
277 |
+
$collection = $this->getCollection()->addFieldTofilter('amosoft_vendor_code',$vendorCode)->addFieldTofilter('amosoft_vendor_sku',$vendorSku);
|
278 |
+
return $collection->count();
|
279 |
+
}
|
280 |
+
|
281 |
+
protected function _addNewInventoryVendor($request,$productSku){
|
282 |
+
$vendorCollection = Mage::getModel('dropship/ranking')->load($request['amosoft_vendor_code'],'amosoft_vendor_code');
|
283 |
+
$request['created_at'] = now();
|
284 |
+
$request['updated_at'] = now();
|
285 |
+
$request['product_sku'] = $productSku;
|
286 |
+
$request['updated_by'] = Mage::getSingleton('admin/session')->getUser()->getUsername();
|
287 |
+
$request['amosoft_vendor_name'] = $vendorCollection->getAmosoftVendorName();
|
288 |
+
$request['amosoft_vendor_sku'] = trim($request['amosoft_vendor_sku']);
|
289 |
+
if(!empty($productSku)){
|
290 |
+
$qty = Mage::helper('dropship')->getIsQtyDecimal($productSku, $request['stock']);
|
291 |
+
}
|
292 |
+
else{
|
293 |
+
$qty = $request['stock'];
|
294 |
+
}
|
295 |
+
$request['stock'] = $this->_updateBuffer($qty);
|
296 |
+
$this->setData($request);
|
297 |
+
try{
|
298 |
+
$this->save();
|
299 |
+
$this->_saveInventoryLog('add',$request);
|
300 |
+
$this->_productInventoryAdd = $this->_productInventoryAdd + $request['stock'];
|
301 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('dropship')->__('%s Added Successfully ',$request['amosoft_vendor_name']));
|
302 |
+
}catch(Exception $e){
|
303 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
304 |
+
}
|
305 |
+
}
|
306 |
+
|
307 |
+
protected function _updateInventoryVendor($id,$request){
|
308 |
+
|
309 |
+
$model = $this->load($id);
|
310 |
+
$vendorCode = $model->getAmosoftVendorCode();
|
311 |
+
$vendorName = $model->getAmosoftVendorName();
|
312 |
+
$DbValues['cost'] = $model->getCost();
|
313 |
+
$DbValues['shipping_cost'] = $model->getShippingCost();
|
314 |
+
$DbValues['stock'] = $model->getStock();
|
315 |
+
$DbValues['amosoft_vendor_sku'] = $model->getAmosoftVendorSku();
|
316 |
+
$productSku = $model->getProductSku();
|
317 |
+
$request['amosoft_vendor_sku'] = trim($request['amosoft_vendor_sku']);
|
318 |
+
$request['shipping_cost'] = trim($request['shipping_cost']);
|
319 |
+
if(!empty($productSku)){
|
320 |
+
$this->_stockBeforeQtyDecimalCheck = $request['stock'];
|
321 |
+
$request['stock'] = Mage::helper('dropship')->getIsQtyDecimal($productSku, $request['stock']);
|
322 |
+
}
|
323 |
+
|
324 |
+
if($DbValues['amosoft_vendor_sku'] != $request['amosoft_vendor_sku']){
|
325 |
+
//patch for unique combination keys vendor_code and vendor_sku
|
326 |
+
if($this->checkCodeSkuCombination($vendorCode,$request['amosoft_vendor_sku']) > 0){
|
327 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('dropship')->__('Duplicate entry found for %s , %s',$vendorCode,$request['amosoft_vendor_sku']));
|
328 |
+
return false;
|
329 |
+
}
|
330 |
+
}
|
331 |
+
if($DbValues['cost'] != $request['cost'] || $DbValues['stock'] != $request['stock'] || $DbValues['amosoft_vendor_sku'] != $request['amosoft_vendor_sku'] || $DbValues['shipping_cost'] != $request['shipping_cost']){
|
332 |
+
if($DbValues['stock'] != $request['stock'])
|
333 |
+
$request['stock'] = $this->_updateBuffer($request['stock'],$DbValues['stock']);
|
334 |
+
$request['updated_at'] = now();
|
335 |
+
$model->addData($request);
|
336 |
+
try{
|
337 |
+
$model->save();
|
338 |
+
$this->_saveInventoryLog('update',array('updated_by'=>Mage::getSingleton('admin/session')->getUser()->getUsername(),'product_sku'=>$model->getProductSku(),'amosoft_vendor_code'=>$model->getAmosoftVendorCode(),'cost'=>$model->getCost(),'stock'=>$model->getStock()));
|
339 |
+
$this->_productInventoryUpdate = $this->_productInventoryUpdate + $request['stock'];
|
340 |
+
|
341 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('dropship')->__('%s Updated Successfully',$vendorName));
|
342 |
+
}catch(Exception $e){
|
343 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
344 |
+
}
|
345 |
+
}else{
|
346 |
+
$this->_productInventoryUpdate = $this->_productInventoryUpdate + $request['stock'];
|
347 |
+
}
|
348 |
+
return true;
|
349 |
+
}
|
350 |
+
|
351 |
+
protected function _deleteInvendorVendor($vendorId){
|
352 |
+
$model = $this->load($vendorId);
|
353 |
+
$vendorCode = $model->getAmosoftVendorCode();
|
354 |
+
$vendorCollection = Mage::getModel('dropship/ranking')->load($vendorCode,'amosoft_vendor_code');
|
355 |
+
$request = array('amosoft_vendor_name'=>$vendorCollection->getAmosoftVendorName(),'updated_by'=>Mage::getSingleton('admin/session')->getUser()->getUsername(),'product_sku'=>$model->getProductSku(),'amosoft_vendor_code'=>$model->getAmosoftVendorCode(),'cost'=>$model->getCost(),'stock'=>$model->getStock(),'updated_at' => now());
|
356 |
+
try{
|
357 |
+
$model->delete();
|
358 |
+
$this->_saveInventoryLog('delete',$request);
|
359 |
+
$this->_productInventorySubtract = $this->_productInventorySubtract + $request['stock'];
|
360 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('dropship')->__('%s Deleted Successfully ',$request['amosoft_vendor_name']));
|
361 |
+
}catch(Exception $e){
|
362 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
363 |
+
}
|
364 |
+
}
|
365 |
+
|
366 |
+
public function _saveInventoryLog($type,$request){
|
367 |
+
$modelLog = Mage::getModel('dropship/inventorylog');
|
368 |
+
$request['activity'] = $type;
|
369 |
+
if($type=='add')
|
370 |
+
$request['created_at'] = now();
|
371 |
+
$request['updated_at'] = now();
|
372 |
+
if(!isset($request['amosoft_vendor_name'])){
|
373 |
+
$vendorRankModel = Mage::getModel('dropship/ranking')->load($request['amosoft_vendor_code'],'amosoft_vendor_code');
|
374 |
+
$request['amosoft_vendor_name'] = $vendorRankModel->getAmosoftVendorName();
|
375 |
+
}
|
376 |
+
$modelLog->setData($request);
|
377 |
+
try{
|
378 |
+
$modelLog->save();
|
379 |
+
}catch(Exception $e){
|
380 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
381 |
+
}
|
382 |
+
}
|
383 |
+
|
384 |
+
protected function _updateVendorList($object,$data = ''){
|
385 |
+
if(!empty($data)){
|
386 |
+
$object->setUpdatedAt(now());
|
387 |
+
$object->setAmosoftVendorType('enhanced');
|
388 |
+
if(!$object->getId()) $object->setIsDropship('no');
|
389 |
+
$object->setAmosoftVendorCode($data['amosoft_vendor_code']);
|
390 |
+
|
391 |
+
}
|
392 |
+
try{
|
393 |
+
$object->save();
|
394 |
+
}catch(Exception $e){
|
395 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
396 |
+
}
|
397 |
+
}
|
398 |
+
|
399 |
+
protected function _updateBuffer($stock,$dbCost = null){
|
400 |
+
$buffer = Mage::getStoreConfig('amosoft_sourcing/inventory/buffer');
|
401 |
+
$finalStock = 0;
|
402 |
+
if(!empty($dbCost) && $this->_stockBeforeQtyDecimalCheck == $dbCost)
|
403 |
+
{
|
404 |
+
return $stock;
|
405 |
+
}
|
406 |
+
if(!empty($buffer)){
|
407 |
+
if($buffer > $stock){
|
408 |
+
$stock = 0;
|
409 |
+
}else{
|
410 |
+
|
411 |
+
$finalStock = $stock - $buffer;
|
412 |
+
}
|
413 |
+
}else{
|
414 |
+
$finalStock = $stock;
|
415 |
+
}
|
416 |
+
return $finalStock;
|
417 |
+
}
|
418 |
+
/* method use to send email notification to amosoft
|
419 |
+
* that first vendor has been added to amosoft_vendor_inventory
|
420 |
+
*/
|
421 |
+
protected function _afterSave()
|
422 |
+
{
|
423 |
+
$colSize = $this->getCollection()->getSize();
|
424 |
+
$notifyVs = Mage::getStoreConfigFlag('amosoft/notification/vendor_setup');
|
425 |
+
if($colSize == 1 && !$notifyVs)
|
426 |
+
{
|
427 |
+
$this->sendVendorNotification();
|
428 |
+
Mage::getModel('dropship/amosoft')->saveNotificationValue(1,'amosoft/notification/vendor_setup');
|
429 |
+
}
|
430 |
+
parent::_afterSave();
|
431 |
+
return;
|
432 |
+
}
|
433 |
+
|
434 |
+
protected function sendVendorNotification(){
|
435 |
+
|
436 |
+
try {
|
437 |
+
$fieldsetData['subject'] = 'DS360 Product Setup completed on Magento';
|
438 |
+
$postObject = new Varien_Object();
|
439 |
+
$postObject->setData($fieldsetData);
|
440 |
+
$templateId = 'amosoft_productsetup_notification';
|
441 |
+
$email = Mage::helper('dropship')->getConfigObject('apiconfig/email/toaddress');
|
442 |
+
$isMailSent = Mage::helper('dropship')->sendMail($postObject,$email,$templateId);
|
443 |
+
if (!$isMailSent) {
|
444 |
+
Mage::helper('dropship')->genrateLog(0,'Order notification started','Order notification ended','First product setup complete successfully but email sending failed');
|
445 |
+
}
|
446 |
+
return true;
|
447 |
+
} catch (Exception $e) {
|
448 |
+
return false;//$e->getMassage();
|
449 |
+
}
|
450 |
+
}
|
451 |
+
public function upDateVendorName($vendor){
|
452 |
+
if(empty($vendor['code']) || empty($vendor['name']))
|
453 |
+
{
|
454 |
+
return;
|
455 |
+
}
|
456 |
+
$table = Mage::getSingleton ( 'core/resource' )->getTableName ( 'dropship/inventory' );
|
457 |
+
$update = 'UPDATE '.$table.' SET amosoft_vendor_name = "'.$vendor['name'].'" WHERE amosoft_vendor_code = "'.$vendor['code'].'"';
|
458 |
+
$conObj = Mage::getSingleton ( 'core/resource' )->getConnection('core_write');
|
459 |
+
$conObj->beginTransaction();
|
460 |
+
$conObj->query($update);
|
461 |
+
try {
|
462 |
+
$conObj->commit ();
|
463 |
+
} catch ( Exception $e ) {
|
464 |
+
$conObj->rollBack ();
|
465 |
+
Mage::getSingleton ( 'adminhtml/session' )->addError($e->getMessage ());
|
466 |
+
}
|
467 |
+
}
|
468 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Inventorylog.php
ADDED
@@ -0,0 +1,17 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Inventorylog extends Mage_Core_Model_Abstract
|
11 |
+
{
|
12 |
+
protected function _construct(){
|
13 |
+
|
14 |
+
$this->_init("dropship/inventorylog");
|
15 |
+
}
|
16 |
+
}
|
17 |
+
|
app/code/local/Amosoft/Dropship/Model/Observer.php
ADDED
@@ -0,0 +1,508 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Model_Observer {
|
10 |
+
|
11 |
+
const CRON_STRING_PATH_SOURCING = 'crontab/jobs/amosoft_dropship/schedule/cron_expr';
|
12 |
+
const CRON_STRING_PATH_BACKORDER = 'crontab/jobs/amosoft_backorder/schedule/cron_expr';
|
13 |
+
const XML_PATH_AMOSOFT_ORDER_BEGIN_SOURCING_STATUS = 'Reprocess';
|
14 |
+
const XML_PATH_AMOSOFT_ORDER_BACKORDERED = 'Backorder';
|
15 |
+
const XML_PATH_AMOSOFT_EMAIL_SHIPMENT = 'amosoft_sourcing/rank/email_shipment';
|
16 |
+
const XML_PATH_INVENTORY_NOTIFICATION_EMAIL = 'amosoft_sourcing/inventory_notification/email';
|
17 |
+
const XML_PATH_INVENTORY_NOTIFICATION_EMAIL_ENABLED = 'amosoft_sourcing/inventory_notification/enabled';
|
18 |
+
const XML_PATH_INVENTORY_NOTIFICATION_DAYS = 'amosoft_sourcing/inventory_notification/days';
|
19 |
+
const XML_PATH_LOGICSOURCING_SOURCING_TYPE = 'amosoft_sourcing/rank/sourcing_type';
|
20 |
+
protected $_orderStatus;
|
21 |
+
protected $_itemData = array();
|
22 |
+
|
23 |
+
public static function getWorkingDir()
|
24 |
+
{
|
25 |
+
return Mage::getBaseDir();
|
26 |
+
}
|
27 |
+
|
28 |
+
|
29 |
+
public function insertProcessOrder($object)
|
30 |
+
{
|
31 |
+
|
32 |
+
$this->_orderStatus = $object->getOrder()->getStatus();
|
33 |
+
foreach ($object->getOrder ()->getAllItems() as $item){
|
34 |
+
if(in_array($item->getProductType(),array('simple','grouped')) ){
|
35 |
+
$started = 0;
|
36 |
+
$ended = 1;
|
37 |
+
$logMsg = 'Item inserted @'.Mage::getSingleton ( 'core/resource' )->getTableName ( 'dropship/orderitems' ). ' sku : '.$item->getSku().','.$object->getOrder()->getIncrementId();
|
38 |
+
Mage::helper('dropship')->genrateLog(++$started,'Order Item Inserted Started',null,$logMsg);
|
39 |
+
$this->getOrderSourcing($item, $object);
|
40 |
+
Mage::helper('dropship')->genrateLog(++$ended,null,'Order Item Inserted Ended',null);
|
41 |
+
}
|
42 |
+
}
|
43 |
+
}
|
44 |
+
|
45 |
+
protected function getOrderSourcing($item, $object){
|
46 |
+
$orderSourcingInstance = Mage::getModel( 'dropship/orderitems' );
|
47 |
+
Mage::getModel('dropship/amosoft')->prepareNotification($orderSourcingInstance,$object->getOrder()->getEntityId());
|
48 |
+
$orderStatus = $object->getOrder()->getStatus();
|
49 |
+
$itemStatusHistory = Mage::helper('dropship')->getSerialisedData($orderSourcingInstance, 'Sourcing', $orderStatus);
|
50 |
+
|
51 |
+
$selected_ship_method = $object->getOrder()->getShippingMethod();
|
52 |
+
if($selected_ship_method == "suppliershippingcostperproduct_suppliershippingcostperproduct"){
|
53 |
+
|
54 |
+
$shipCost = Mage::helper('dropship')->getVendorShippingCost($item);
|
55 |
+
$shippingPrice = $item->getQtyOrdered() * $shipCost;
|
56 |
+
$orderSourcingInstance->setShippingCost( $shippingPrice );
|
57 |
+
}
|
58 |
+
$orderSourcingInstance->setSku( $item->getSku() );
|
59 |
+
$orderSourcingInstance->setItemId( $item->getItemId() );
|
60 |
+
$orderSourcingInstance->setItemOrderId( $object->getOrder()->getEntityId() );
|
61 |
+
$orderSourcingInstance->setAmosoftItemStatus('Sourcing');
|
62 |
+
$orderSourcingInstance->setUpdatedBy('Cron');
|
63 |
+
$orderSourcingInstance->setUpdatedAt(now());
|
64 |
+
$orderSourcingInstance->setItemStatusHistory($itemStatusHistory);
|
65 |
+
try {
|
66 |
+
$orderSourcingInstance->save();
|
67 |
+
} catch ( Execption $e ) {
|
68 |
+
Mage::helper('dropship')->genrateLog(0,null,null,'Section : order item inserted Error: '.$e->getMessage().' sku : '.$item->getSku());
|
69 |
+
echo $e->getMessage();
|
70 |
+
}
|
71 |
+
|
72 |
+
//As item get saved in amosoft_sales_orders_items we run our sourcing logic
|
73 |
+
if(Mage::getStoreConfigFlag(self::XML_PATH_LOGICSOURCING_SOURCING_TYPE)){
|
74 |
+
$this->assignToVendor($item);
|
75 |
+
Mage::getResourceModel('dropship/orderitems')->saveOrderItems($this->_itemData,$object->getOrder());
|
76 |
+
$this->_itemData = array();
|
77 |
+
}
|
78 |
+
}
|
79 |
+
|
80 |
+
public function amosoftSourcing() {
|
81 |
+
$sourcingObj = Mage::getModel('dropship/ordersourcing');
|
82 |
+
if(!Mage::getStoreConfig(self::CRON_STRING_PATH_SOURCING)) {
|
83 |
+
Mage::helper('dropship')->genrateLog(0,'Sourcing started','Sourcing started','Sourcing can not be started as cron time not set');
|
84 |
+
return;
|
85 |
+
}
|
86 |
+
if($sourcingObj->checkRunningStatus('sourcing')){
|
87 |
+
|
88 |
+
Mage::helper('dropship')->genrateLog(0,'Sourcing started','Sourcing started','Sourcing can not be started as process already running');
|
89 |
+
return;
|
90 |
+
}
|
91 |
+
Mage::helper('dropship')->genrateLog(1,'Sourcing Started for '.Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_REPROCESS.' Item status',null,null);
|
92 |
+
$sourcingObj->sourcingStarted(Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_SOURCING);
|
93 |
+
$this->setAmosoftVendorRanking (Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_REPROCESS,true);
|
94 |
+
$this->addCronStatus('amosoft_sourcing/cron_settings/dispaly_sourcing_updated_time', Mage::helper('core')->formatDate(now(), 'medium', true));
|
95 |
+
$sourcingObj->sourcingCompleted(Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_SOURCING);
|
96 |
+
Mage::helper('dropship')->genrateLog(2,null,'Sourcing Ended for ' .Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_REPROCESS.' Item status',null);
|
97 |
+
return;
|
98 |
+
}
|
99 |
+
|
100 |
+
public function amosoftBackorder()
|
101 |
+
{
|
102 |
+
$sourcingObj = Mage::getModel('dropship/ordersourcing');
|
103 |
+
if(!Mage::getStoreConfig(self::CRON_STRING_PATH_BACKORDER)) {
|
104 |
+
Mage::helper('dropship')->genrateLog(0,'Backorder sourcing started','Backorder sourcing ended','Backorder Sourcing can not be started as cron time not set');
|
105 |
+
return;
|
106 |
+
}
|
107 |
+
if($sourcingObj->checkRunningStatus(Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_BACKORDER)){
|
108 |
+
Mage::helper('dropship')->genrateLog(0,'Backorder sourcing started','Backorder sourcing ended','Backorder Sourcing can not be started process already running');
|
109 |
+
return;
|
110 |
+
}
|
111 |
+
Mage::helper('dropship')->genrateLog(1,'Backorder Sourcing Started for '.Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_BACKORDER . ' item status',null,null);
|
112 |
+
$sourcingObj->sourcingStarted(Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_BACKORDER);
|
113 |
+
$this->setAmosoftVendorRanking (Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_BACKORDER);
|
114 |
+
$this->addCronStatus('amosoft_sourcing/cron_settings/display_backorder_updated_time', Mage::helper('core')->formatDate(now(), 'medium', true));
|
115 |
+
$sourcingObj->sourcingCompleted(Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_BACKORDER);
|
116 |
+
Mage::helper('dropship')->genrateLog(1,'Backorder Sourcing Ended for '.Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_BACKORDER .' item status',null,null);
|
117 |
+
return;
|
118 |
+
}
|
119 |
+
|
120 |
+
|
121 |
+
/*
|
122 |
+
* Save last cron status
|
123 |
+
* @param string $statusPath
|
124 |
+
* @param string $status
|
125 |
+
*/
|
126 |
+
protected function addCronStatus($statusPath, $status) {
|
127 |
+
$config = new Mage_Core_Model_Config();
|
128 |
+
$config->saveConfig($statusPath, $status, 'default', 0);
|
129 |
+
return;
|
130 |
+
}
|
131 |
+
|
132 |
+
protected function setAmosoftVendorRanking($crontype,$isCronSourcing = false)
|
133 |
+
{
|
134 |
+
$reprocess = Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_REPROCESS;
|
135 |
+
$OrderInstances = Mage::getModel('dropship/ordersourcing');
|
136 |
+
$collection = $OrderInstances->prepareItemCollection($crontype,$isCronSourcing);
|
137 |
+
if(count($collection) > 0 ){
|
138 |
+
foreach ( $collection as $orderID => $orderCollectionData ) {
|
139 |
+
$orderCollection = Mage::getModel('sales/order')->Load($orderID);
|
140 |
+
//Patch : skip sourcing process if order is deleted
|
141 |
+
if (! $orderCollection->getEntityId ()) {
|
142 |
+
Mage::helper ( 'dropship' )->genrateLog ( 0, null, null, 'Order not exists for => order_id: ' . $orderID . ' hence cannot continue' );
|
143 |
+
continue;
|
144 |
+
}
|
145 |
+
$this->_orderStatus = $orderCollection->getStatus();
|
146 |
+
foreach ($orderCollectionData as $orderData ){
|
147 |
+
Mage::helper('dropship')->genrateLog(0,null,null,'<---->Item Processing Started : '.$orderData->getSku());
|
148 |
+
if ($crontype == Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_REPROCESS) {
|
149 |
+
$assigned = $this->assignToVendor(Mage::getModel('sales/order_item')->Load($orderData->getItemId()));
|
150 |
+
}else
|
151 |
+
{
|
152 |
+
$orderItems = Mage::getModel( 'dropship/orderitems' )->load($orderData->getItemId(), 'item_id');
|
153 |
+
$itemStatusHistory = Mage::helper('dropship')->getSerialisedData($orderItems, $reprocess, $this->_orderStatus);
|
154 |
+
$this->_itemData[$orderData->getItemId()] = array('amosoft_item_status'=>$reprocess,'item_status_history'=>$itemStatusHistory);
|
155 |
+
}
|
156 |
+
Mage::helper('dropship')->genrateLog(0,null,null,'####### Item Processing ended : '.$orderData->getSku());
|
157 |
+
|
158 |
+
}
|
159 |
+
Mage::getResourceModel('dropship/orderitems')->saveOrderItems($this->_itemData,$orderCollection,$crontype);
|
160 |
+
$this->_itemData = array();
|
161 |
+
}
|
162 |
+
}else {
|
163 |
+
Mage::helper('dropship')->genrateLog(0,null,null,'Order collection is empty for => Cron_type: '.$crontype.' hence cannot continue');
|
164 |
+
return;
|
165 |
+
}
|
166 |
+
}
|
167 |
+
protected function assignToVendor($item) {
|
168 |
+
$productSku = $item->getSku();
|
169 |
+
$itemStatusComplete = Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_TRANSMITTING;
|
170 |
+
$itemStatusBackorder = Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_BACKORDER;
|
171 |
+
$itemStatusNoDropShip = Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_NO_DROPSHIP;
|
172 |
+
$qtyInvoiced = $item->getQtyOrdered();
|
173 |
+
$itemId = $item->getItemId();
|
174 |
+
$isDefaultVendor = false;
|
175 |
+
$vendorCode = '';
|
176 |
+
$inventoryStock = '';
|
177 |
+
$defaultVendor = (Mage::getStoreConfig('amosoft_sourcing/rank/defaultbackorder') == 'none') ? '' : Mage::getStoreConfig('amosoft_sourcing/rank/defaultbackorder');
|
178 |
+
$orderItemInstance = Mage::getModel( 'dropship/orderitems' );
|
179 |
+
$orderItemInstance->load( $itemId, 'item_id' );
|
180 |
+
$collectionVendor = $orderItemInstance->prepareOrderItemData($item);
|
181 |
+
$arrDefaultVendorDetails = array();
|
182 |
+
$vendorCost = 0;
|
183 |
+
|
184 |
+
if ($collectionVendor->count() > 0) {
|
185 |
+
if($collectionVendor->count() >= 1){
|
186 |
+
foreach ($collectionVendor as $vendorData) {
|
187 |
+
//assign default vendor details
|
188 |
+
if(!empty($defaultVendor) && $vendorData->getAmosoftVendorCode() == $defaultVendor )
|
189 |
+
{
|
190 |
+
$arrDefaultVendorDetails = array('amosoft_vendor_code'=>$vendorData->getAmosoftVendorCode(),'stock'=>$vendorData->getStock(),'cost'=>$vendorData->getCost(),'amosoft_vendor_sku'=>$vendorData->getAmosoftVendorSku(),'product_sku'=>$vendorData->getProductSku());
|
191 |
+
}
|
192 |
+
//if item is in backordered
|
193 |
+
if($vendorData->getStock() < $qtyInvoiced ){
|
194 |
+
$arrVendorDetail[] = array('amosoft_vendor_code'=>$vendorData->getAmosoftVendorCode(),'stock'=>$vendorData->getStock(),'cost'=>$vendorData->getCost(),'amosoft_vendor_sku'=>$vendorData->getAmosoftVendorSku(),'product_sku'=>$vendorData->getProductSku());
|
195 |
+
$vendorCode = $arrVendorDetail[0]['amosoft_vendor_code'];
|
196 |
+
$inventoryStock = $arrVendorDetail[0]['stock'];
|
197 |
+
$vendorCost = $arrVendorDetail[0]['cost'];
|
198 |
+
$vendorSku = $arrVendorDetail[0]['amosoft_vendor_sku'];
|
199 |
+
$productSku = $arrVendorDetail[0]['product_sku'];
|
200 |
+
$arrVendorAvailable[] = $vendorData->getAmosoftVendorCode();
|
201 |
+
$isDefaultVendor = true;
|
202 |
+
}else{
|
203 |
+
$vendorCode = $vendorData->getAmosoftVendorCode();
|
204 |
+
$inventoryStock = $vendorData->getStock();
|
205 |
+
$vendorCost = $vendorData->getCost();
|
206 |
+
$vendorSku = $vendorData->getAmosoftVendorSku();
|
207 |
+
$productSku = $vendorData->getProductSku();
|
208 |
+
$arrVendorAvailable[] = $vendorData->getAmosoftVendorCode();
|
209 |
+
$isDefaultVendor = false;
|
210 |
+
break;
|
211 |
+
}
|
212 |
+
}
|
213 |
+
$arrVendorAvailable[] = $vendorData->getAmosoftVendorCode();
|
214 |
+
}else {
|
215 |
+
$arrFirstVendor = $collectionVendor->getFirstItem()->getData();
|
216 |
+
$vendorCode = $arrFirstVendor ['amosoft_vendor_code'];
|
217 |
+
$inventoryStock = $arrFirstVendor ['stock'];
|
218 |
+
$vendorCost = $arrFirstVendor ['cost'];
|
219 |
+
$vendorSku = $arrFirstVendor ['amosoft_vendor_sku'];
|
220 |
+
$productSku = $arrFirstVendor ['product_sku'];
|
221 |
+
if($inventoryStock < $qtyInvoiced)
|
222 |
+
$isDefaultVendor = true;
|
223 |
+
else
|
224 |
+
$isDefaultVendor = false;
|
225 |
+
|
226 |
+
$arrVendorAvailable[] = $arrFirstVendor ['amosoft_vendor_code'];
|
227 |
+
}
|
228 |
+
}
|
229 |
+
|
230 |
+
if(!empty($vendorCode)){
|
231 |
+
if ($vendorCode && $inventoryStock >= $qtyInvoiced) {
|
232 |
+
$itemStatusHistory = Mage::helper('dropship')->getSerialisedData($orderItemInstance, $itemStatusComplete, $this->_orderStatus);
|
233 |
+
Mage::helper('dropship')->genrateLog(0,null,null,'@@@@@@@@ Sourcing Details==> stock('.$inventoryStock.') >= qtyinvoiced('.$qtyInvoiced.'),vendor_code ->'.$vendorCode.', item-status->'.$itemStatusComplete);
|
234 |
+
Mage::getModel('dropship/amosoft')->setupNotification();
|
235 |
+
$this->_itemData [$item->getItemId()] = array (
|
236 |
+
'updateInventory' => true,
|
237 |
+
'qtyInvoiced' =>$qtyInvoiced,
|
238 |
+
'updated_at' => now(),
|
239 |
+
'sku' => $item->getSku(),
|
240 |
+
'updated_by' => 'Cron',
|
241 |
+
'amosoft_item_status' => $itemStatusComplete,
|
242 |
+
'amosoft_vendor_code' => $vendorCode,
|
243 |
+
'vendor_cost' => $vendorCost * $qtyInvoiced,
|
244 |
+
'amosoft_vendor_sku' => $vendorSku,
|
245 |
+
'item_status_history' => $itemStatusHistory
|
246 |
+
);
|
247 |
+
return $itemStatusComplete;
|
248 |
+
}
|
249 |
+
if ($isDefaultVendor && $inventoryStock <= $qtyInvoiced && !empty($defaultVendor) && in_array($defaultVendor,$arrVendorAvailable)) {
|
250 |
+
$itemStatusHistory = Mage::helper('dropship')->getSerialisedData($orderItemInstance, $itemStatusComplete, $this->_orderStatus);
|
251 |
+
Mage::helper('dropship')->genrateLog(0,null,null,'@@@@@@@@ Sourcing Details Default vendor set ==>stock('.$inventoryStock.') >= qtyinvoiced('.$qtyInvoiced.'),vendor_code ->'.$vendorCode.', item-status->Transmitting');
|
252 |
+
$this->_itemData [$item->getItemId()] = array (
|
253 |
+
'updateInventory' => false,
|
254 |
+
'updated_at' => now(),
|
255 |
+
'sku' => $item->getSku(),
|
256 |
+
'updated_by' => 'Cron',
|
257 |
+
'amosoft_item_status' => $itemStatusComplete,
|
258 |
+
'amosoft_vendor_code' => $defaultVendor,
|
259 |
+
'vendor_cost' => $arrDefaultVendorDetails ['cost'] * $qtyInvoiced,
|
260 |
+
'amosoft_vendor_sku' => $arrDefaultVendorDetails ['amosoft_vendor_sku'],
|
261 |
+
'item_status_history' => $itemStatusHistory
|
262 |
+
);
|
263 |
+
return $itemStatusComplete;
|
264 |
+
}
|
265 |
+
if ($vendorCode && $inventoryStock <= $qtyInvoiced) {
|
266 |
+
$itemStatusHistory =Mage::helper('dropship')->getSerialisedData($orderItemInstance, $itemStatusBackorder, $this->_orderStatus);
|
267 |
+
Mage::helper('dropship')->genrateLog(0,null,null,'@@@@@@@@ Sourcing Details==>stock('.$inventoryStock.') <= qtyinvoiced('.$qtyInvoiced.'),vendor_code ->'.$vendorCode.', item-status->'.$itemStatusBackorder);
|
268 |
+
$this->_itemData [$item->getItemId()] = array (
|
269 |
+
'updateInventory' => false,
|
270 |
+
'updated_at' => now(),
|
271 |
+
'sku' => $item->getSku(),
|
272 |
+
'updated_by' => 'Cron',
|
273 |
+
'amosoft_item_status' => $itemStatusBackorder,
|
274 |
+
'amosoft_vendor_code' => $vendorCode,
|
275 |
+
'vendor_cost' => $vendorCost * $qtyInvoiced,
|
276 |
+
'amosoft_vendor_sku' => $vendorSku,
|
277 |
+
'item_status_history' => $itemStatusHistory
|
278 |
+
);
|
279 |
+
return $itemStatusBackorder;
|
280 |
+
}
|
281 |
+
}else{
|
282 |
+
$itemStatusHistory = Mage::helper('dropship')->getSerialisedData($orderItemInstance,$itemStatusNoDropShip, $this->_orderStatus);
|
283 |
+
Mage::helper('dropship')->genrateLog(0,null,null,'@@@@@@@@ Sourcing Details==> No vendor Set ,vendor_code ->'.$vendorCode.', item-status->No Dropship');
|
284 |
+
$this->_itemData [$item->getItemId()] = array (
|
285 |
+
'updateInventory' => false,
|
286 |
+
'updated_at' => now(),
|
287 |
+
'sku' => $item->getSku(),
|
288 |
+
'updated_by' => 'Cron',
|
289 |
+
'amosoft_item_status' => $itemStatusNoDropShip,
|
290 |
+
'amosoft_vendor_code' => $vendorCode,
|
291 |
+
'vendor_cost' => $vendorCost * $qtyInvoiced,
|
292 |
+
'amosoft_vendor_sku' => '',
|
293 |
+
'item_status_history' => $itemStatusHistory
|
294 |
+
);
|
295 |
+
return $itemStatusNoDropShip;
|
296 |
+
}
|
297 |
+
}
|
298 |
+
|
299 |
+
/**
|
300 |
+
* Flag to stop observer executing more than once
|
301 |
+
*
|
302 |
+
* @var static bool
|
303 |
+
*/
|
304 |
+
//static protected $_singletonFlag = false;
|
305 |
+
|
306 |
+
/**
|
307 |
+
* This method will run when the product is saved from the Magento Admin
|
308 |
+
* Use this function to update the product model, process the
|
309 |
+
* data or anything you like
|
310 |
+
*
|
311 |
+
* @param Varien_Event_Observer $observer
|
312 |
+
*/
|
313 |
+
|
314 |
+
public function saveProductTabData(Varien_Event_Observer $observer)
|
315 |
+
{
|
316 |
+
$product = $observer->getEvent()->getProduct();
|
317 |
+
if(!empty($product['vendor_update']) || !empty($product['vendor_new'])){
|
318 |
+
try {
|
319 |
+
/**
|
320 |
+
* Perform any actions you want here
|
321 |
+
*
|
322 |
+
*/
|
323 |
+
$customFieldValue = $this->_getRequest()->getPost('product');
|
324 |
+
$result = Mage::getModel('dropship/inventory')->saveTabVendorData($customFieldValue);
|
325 |
+
|
326 |
+
/**
|
327 |
+
* Uncomment the line below to save the product
|
328 |
+
*
|
329 |
+
*/
|
330 |
+
//if(!$result)
|
331 |
+
//Mage::getSingleton('adminhtml/session')->addError(Mage::helper('dropship')->__('Vendor Data Cannot be saved'));
|
332 |
+
|
333 |
+
//$product->save();
|
334 |
+
|
335 |
+
|
336 |
+
$this->_inventoryUpdate($result,$customFieldValue['sku']);
|
337 |
+
}
|
338 |
+
catch (Exception $e) {
|
339 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
340 |
+
}
|
341 |
+
}
|
342 |
+
return;
|
343 |
+
}
|
344 |
+
|
345 |
+
protected function _inventoryUpdate($result,$sku)
|
346 |
+
{
|
347 |
+
if(!$result['result']){
|
348 |
+
return;
|
349 |
+
}
|
350 |
+
|
351 |
+
$finalStock = $result['inventory'];
|
352 |
+
$finalStock = Mage::helper('dropship')->getIsQtyDecimal($sku, $finalStock);
|
353 |
+
$conn = Mage::getSingleton ( 'core/resource' )->getConnection ( 'core_write' );
|
354 |
+
|
355 |
+
$tableNameStatus = Mage::getSingleton ( 'core/resource' )->getTableName ( 'cataloginventory/stock_status' );
|
356 |
+
$tableNameItem = Mage::getSingleton ( 'core/resource' )->getTableName ( 'cataloginventory/stock_item' );
|
357 |
+
$tableNameItemIdx = Mage::getSingleton ( 'core/resource' )->getTableName ( 'cataloginventory/stock_status_indexer_idx' );
|
358 |
+
|
359 |
+
$stockStatus = $finalStock ? 1 : 0;
|
360 |
+
$productId = Mage::getModel('catalog/product')->getIdBySku($sku);
|
361 |
+
if($productId){
|
362 |
+
$updateStatus = 'update '.$tableNameStatus.' SET qty = '.$finalStock.',stock_status = '.$stockStatus.' where product_id = '.$productId;
|
363 |
+
$updateItem = 'update '.$tableNameItem.' SET qty = '.$finalStock.',is_in_stock = '.$stockStatus.' where product_id = '.$productId;
|
364 |
+
$updateItemIdx = 'update '.$tableNameItemIdx.' SET qty = '.$finalStock.',stock_status = '.$stockStatus.' where product_id = '.$productId;
|
365 |
+
$conn->beginTransaction ();
|
366 |
+
$conn->query ($updateStatus);
|
367 |
+
$conn->query ($updateItem);
|
368 |
+
$conn->query ($updateItemIdx);
|
369 |
+
try {
|
370 |
+
$conn->commit ();
|
371 |
+
} catch ( Exception $e ) {
|
372 |
+
$conn->rollBack ();
|
373 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
374 |
+
}
|
375 |
+
}
|
376 |
+
}
|
377 |
+
|
378 |
+
/**
|
379 |
+
* Retrieve the product model
|
380 |
+
*
|
381 |
+
* @return Mage_Catalog_Model_Product $product
|
382 |
+
*/
|
383 |
+
public function getProduct()
|
384 |
+
{
|
385 |
+
return Mage::registry('product');
|
386 |
+
}
|
387 |
+
|
388 |
+
/**
|
389 |
+
* Shortcut to getRequest
|
390 |
+
*
|
391 |
+
*/
|
392 |
+
protected function _getRequest()
|
393 |
+
{
|
394 |
+
return Mage::app()->getRequest();
|
395 |
+
}
|
396 |
+
|
397 |
+
public function preDispatch(Varien_Event_Observer $observer)
|
398 |
+
{
|
399 |
+
return;
|
400 |
+
}
|
401 |
+
|
402 |
+
protected function _isValidForShipmentEmail($shipment)
|
403 |
+
{
|
404 |
+
// send shipment email only when email shipment is enabled from module
|
405 |
+
if(Mage::getStoreConfig(self::XML_PATH_AMOSOFT_EMAIL_SHIPMENT)){
|
406 |
+
$trackingNumbers = array();
|
407 |
+
foreach ($shipment->getAllTracks() as $track) {
|
408 |
+
$trackingNumbers[] = $track->getNumber();
|
409 |
+
};
|
410 |
+
// send shipment email only when carrier tracking info is added
|
411 |
+
if (count($trackingNumbers) > 0) {
|
412 |
+
$lastValueOfArray = end($trackingNumbers);
|
413 |
+
$lastValueOfArray = trim($lastValueOfArray);
|
414 |
+
if(!empty($lastValueOfArray))
|
415 |
+
return true;
|
416 |
+
else
|
417 |
+
return false;
|
418 |
+
} else {
|
419 |
+
return false;
|
420 |
+
}
|
421 |
+
}
|
422 |
+
}
|
423 |
+
|
424 |
+
public function salesOrderShipmentSaveBefore(Varien_Event_Observer $observer)
|
425 |
+
{
|
426 |
+
if(!Mage::getStoreConfig(self::XML_PATH_AMOSOFT_EMAIL_SHIPMENT)){
|
427 |
+
return $this;
|
428 |
+
}
|
429 |
+
if (Mage::registry('salesOrderShipmentSaveBeforeTriggered')) {
|
430 |
+
return $this;
|
431 |
+
}
|
432 |
+
/* @var $shipment Mage_Sales_Model_Order_Shipment */
|
433 |
+
$shipment = $observer->getEvent()->getShipment();
|
434 |
+
if ($shipment) {
|
435 |
+
if ($this->_isValidForShipmentEmail($shipment)) {
|
436 |
+
$shipment->setEmailSent(true);
|
437 |
+
Mage::register('salesOrderShipmentSaveBeforeTriggered', true);
|
438 |
+
}
|
439 |
+
}
|
440 |
+
return $this;
|
441 |
+
}
|
442 |
+
|
443 |
+
public function salesOrderShipmentSaveAfter(Varien_Event_Observer $observer)
|
444 |
+
{
|
445 |
+
if(!Mage::getStoreConfig(self::XML_PATH_AMOSOFT_EMAIL_SHIPMENT)){
|
446 |
+
return $this;
|
447 |
+
}
|
448 |
+
if (Mage::registry('salesOrderShipmentSaveAfterTriggered')) {
|
449 |
+
return $this;
|
450 |
+
}
|
451 |
+
|
452 |
+
/* @var $shipment Mage_Sales_Model_Order_Shipment */
|
453 |
+
$shipment = $observer->getEvent()->getShipment();
|
454 |
+
if ($shipment) {
|
455 |
+
if ($this->_isValidForShipmentEmail($shipment)) {
|
456 |
+
$shipment->sendEmail();
|
457 |
+
Mage::register('salesOrderShipmentSaveAfterTriggered', true);
|
458 |
+
}
|
459 |
+
}
|
460 |
+
return $this;
|
461 |
+
}
|
462 |
+
|
463 |
+
/*
|
464 |
+
* This function is used to delete the sku from vendor inventory
|
465 |
+
* when the same sku is deleted from catalog product
|
466 |
+
*/
|
467 |
+
public function catalogProductDeleteAfter(Varien_Event_Observer $observer)
|
468 |
+
{
|
469 |
+
$deletedProductSku = $observer->getEvent()->getProduct()->getSku();
|
470 |
+
$orderItem = Mage::getModel ('dropship/inventory')->getCollection()->addFieldToFilter('product_sku', $deletedProductSku);
|
471 |
+
if($orderItem->getSize() > 0){
|
472 |
+
foreach($orderItem as $data){
|
473 |
+
try {
|
474 |
+
Mage::getModel ('dropship/inventory')->load($data->getId())->delete();
|
475 |
+
} catch (Exception $e) {
|
476 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
477 |
+
}
|
478 |
+
}
|
479 |
+
}
|
480 |
+
return $this;
|
481 |
+
}
|
482 |
+
//@function : notify cutomer for oudated product inventory through email,initiated by cron
|
483 |
+
public function notifyForProductUpdateInventory(){
|
484 |
+
if (!Mage::getStoreConfigFlag (self::XML_PATH_INVENTORY_NOTIFICATION_EMAIL_ENABLED) || !Mage::getStoreConfigFlag (self::XML_PATH_INVENTORY_NOTIFICATION_DAYS) || !Mage::getStoreConfigFlag (self::XML_PATH_INVENTORY_NOTIFICATION_EMAIL)) {
|
485 |
+
return $this;
|
486 |
+
}
|
487 |
+
$itemObject;
|
488 |
+
$fileInfo = array();
|
489 |
+
$ioAdapter = new Varien_Io_File();
|
490 |
+
$open_monitor_from = Date('Y-m-d h:i:s', strtotime('-'.Mage::getStoreConfig(self::XML_PATH_INVENTORY_NOTIFICATION_DAYS).' day'));
|
491 |
+
$open_monitor_to = Mage::getModel('core/date')->gmtDate();
|
492 |
+
$itemObject = Mage::getModel('dropship/inventory')->getCollection()->addFieldTofilter('updated_at', array('from' => $open_monitor_from,'to' => $open_monitor_to));
|
493 |
+
if($itemObject->getSize() <= 0){
|
494 |
+
Mage::log('cannot send outdated product inventory email collection is empty for form :'.$open_monitor_from.' to :'.$open_monitor_to, null, 'notification_error.log');
|
495 |
+
return $this;
|
496 |
+
}
|
497 |
+
$fileInfo = Mage::getModel('dropship/csvparser')->getCsvFile($itemObject);
|
498 |
+
$mailData['days'] = Mage::getStoreConfig(self::XML_PATH_INVENTORY_NOTIFICATION_DAYS);
|
499 |
+
$mailData['subject'] = 'dropship list of outdated product inventory';
|
500 |
+
$postObject = new Varien_Object();
|
501 |
+
$postObject->setData($mailData);
|
502 |
+
$email = trim(Mage::getStoreConfig(self::XML_PATH_INVENTORY_NOTIFICATION_EMAIL));
|
503 |
+
$templateId = 'amosoft_outdated_product_inventory';
|
504 |
+
$isMailSent = Mage::helper('dropship')->sendMail($postObject,$email,$templateId,$fileInfo['value']);
|
505 |
+
$ioAdapter->rm($fileInfo['value']);
|
506 |
+
return $this;
|
507 |
+
}
|
508 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Order/Api.php
ADDED
@@ -0,0 +1,312 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Order API rewrite to add three Amosoft fields in salesOrderItemEntity Array of salesorderinfo api
|
4 |
+
* and to update Amosoft item status
|
5 |
+
* @category Amosoft
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
class Amosoft_Dropship_Model_Order_Api extends Mage_Sales_Model_Order_Api_V2
|
9 |
+
{
|
10 |
+
protected $_itemStatusTansmitting = Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_TRANSMITTING;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Retrieve list of orders. Filtration could be applied
|
14 |
+
*
|
15 |
+
* @param null|object|array $filters
|
16 |
+
* @return array
|
17 |
+
*/
|
18 |
+
public function items($filters = null)
|
19 |
+
{
|
20 |
+
$orders = array();
|
21 |
+
$itemTemp = array();
|
22 |
+
//TODO: add full name logic
|
23 |
+
$billingAliasName = 'billing_o_a';
|
24 |
+
$shippingAliasName = 'shipping_o_a';
|
25 |
+
|
26 |
+
/** @var $orderCollection Mage_Sales_Model_Mysql4_Order_Collection */
|
27 |
+
$orderCollection = Mage::getModel("sales/order")->getCollection();
|
28 |
+
$billingFirstnameField = "$billingAliasName.firstname";
|
29 |
+
$billingLastnameField = "$billingAliasName.lastname";
|
30 |
+
$shippingFirstnameField = "$shippingAliasName.firstname";
|
31 |
+
$shippingLastnameField = "$shippingAliasName.lastname";
|
32 |
+
$orderCollection->addAttributeToSelect('*')
|
33 |
+
->addAddressFields()
|
34 |
+
->addExpressionFieldToSelect('billing_firstname', "{{billing_firstname}}",
|
35 |
+
array('billing_firstname' => $billingFirstnameField))
|
36 |
+
->addExpressionFieldToSelect('billing_lastname', "{{billing_lastname}}",
|
37 |
+
array('billing_lastname' => $billingLastnameField))
|
38 |
+
->addExpressionFieldToSelect('shipping_firstname', "{{shipping_firstname}}",
|
39 |
+
array('shipping_firstname' => $shippingFirstnameField))
|
40 |
+
->addExpressionFieldToSelect('shipping_lastname', "{{shipping_lastname}}",
|
41 |
+
array('shipping_lastname' => $shippingLastnameField))
|
42 |
+
->addExpressionFieldToSelect('billing_name', "CONCAT({{billing_firstname}}, ' ', {{billing_lastname}})",
|
43 |
+
array('billing_firstname' => $billingFirstnameField, 'billing_lastname' => $billingLastnameField))
|
44 |
+
->addExpressionFieldToSelect('shipping_name', 'CONCAT({{shipping_firstname}}, " ", {{shipping_lastname}})',
|
45 |
+
array('shipping_firstname' => $shippingFirstnameField, 'shipping_lastname' => $shippingLastnameField)
|
46 |
+
);
|
47 |
+
|
48 |
+
/** @var $apiHelper Mage_Api_Helper_Data */
|
49 |
+
/*$apiHelper = Mage::helper('api');
|
50 |
+
$filters = $apiHelper->parseFilters($filters, $this->_attributesMap['order']);
|
51 |
+
try {
|
52 |
+
foreach ($filters as $field => $value) {
|
53 |
+
$orderCollection->addFieldToFilter($field, $value);
|
54 |
+
}
|
55 |
+
} catch (Mage_Core_Exception $e) {
|
56 |
+
$this->_fault('filters_invalid', $e->getMessage());
|
57 |
+
}*/
|
58 |
+
|
59 |
+
/* Patch apply to display item list with
|
60 |
+
* vendor_cost,amosoft_vendor_code,amosoft_vendor_sku,magento_sku
|
61 |
+
*/
|
62 |
+
foreach ($orderCollection as $order) {
|
63 |
+
|
64 |
+
$results = $this->addItemDetails($order);
|
65 |
+
if(count($results) > 0){
|
66 |
+
/* new code */
|
67 |
+
foreach($results as $result)
|
68 |
+
{
|
69 |
+
if($result['amosoft_vendor_code'] == $filters)
|
70 |
+
$itemTemp['item_details'][] = $result;
|
71 |
+
}
|
72 |
+
|
73 |
+
//$a = !array_search('MagVendID1', $itemTemp['item_details']);
|
74 |
+
//return $a;
|
75 |
+
//unset($itemTemp['item_details'][$a]);
|
76 |
+
|
77 |
+
$itemTemp['dropship_item'] = $this->isDropshipItemReady($order);
|
78 |
+
$orders[] = array_merge($this->_getAttributes($order, 'order'),$itemTemp);
|
79 |
+
unset($itemTemp);
|
80 |
+
}else
|
81 |
+
{
|
82 |
+
$orders[] = $this->_getAttributes($order, 'order');
|
83 |
+
}
|
84 |
+
}
|
85 |
+
|
86 |
+
return $orders;
|
87 |
+
}
|
88 |
+
protected function isDropshipItemReady($order)
|
89 |
+
{
|
90 |
+
$result = false;
|
91 |
+
$ItemCollection = Mage::getModel('dropship/orderitems')->getCollection()->addFieldToFilter('amosoft_item_status',$this->_itemStatusTansmitting)->addFieldToFilter('item_order_id',$order->getEntityId());
|
92 |
+
if($ItemCollection->count() > 0)
|
93 |
+
$result = true;
|
94 |
+
return $result;
|
95 |
+
}
|
96 |
+
|
97 |
+
protected function addItemDetails($order){
|
98 |
+
$result = array();
|
99 |
+
$ItemCollection = Mage::getModel('dropship/orderitems')->getCollection()->addFieldToFilter('item_order_id',$order->getEntityId());
|
100 |
+
if($ItemCollection->count() > 0){
|
101 |
+
unset($result);
|
102 |
+
foreach($ItemCollection as $item)
|
103 |
+
{
|
104 |
+
$result[] = array('item_sku'=>$item->getSku(),'amosoft_vendor_sku' => $item->getAmosoftVendorSku(),'amosoft_vendor_code' => $item->getAmosoftVendorCode(),'amosoft_vendor_cost' => $item->getVendorCost(),'amosoft_vendor_ship_cost' => $item->getShippingCost(),'amosoft_item_status'=>$item->getAmosoftItemStatus(), 'order_item_id'=>$item->getItemId());
|
105 |
+
}
|
106 |
+
}
|
107 |
+
|
108 |
+
return $result;
|
109 |
+
}
|
110 |
+
/**
|
111 |
+
* Retrieve full order information
|
112 |
+
*
|
113 |
+
* @param string $orderIncrementId
|
114 |
+
* @return array
|
115 |
+
*/
|
116 |
+
public function info($orderIncrementId)
|
117 |
+
{
|
118 |
+
$order = $this->_initOrder($orderIncrementId);
|
119 |
+
|
120 |
+
if ($order->getGiftMessageId() > 0) {
|
121 |
+
$order->setGiftMessage(
|
122 |
+
Mage::getSingleton('giftmessage/message')->load($order->getGiftMessageId())->getMessage()
|
123 |
+
);
|
124 |
+
}
|
125 |
+
|
126 |
+
$result = $this->_getAttributes($order, 'order');
|
127 |
+
|
128 |
+
$result['shipping_address'] = $this->_getAttributes($order->getShippingAddress(), 'order_address');
|
129 |
+
$result['billing_address'] = $this->_getAttributes($order->getBillingAddress(), 'order_address');
|
130 |
+
$result['items'] = array();
|
131 |
+
|
132 |
+
//$id = $order->getId();
|
133 |
+
foreach ($order->getAllItems() as $item) {
|
134 |
+
$result['items'][] = $this->getProductAmosoftDetails($item, $order);
|
135 |
+
}
|
136 |
+
|
137 |
+
$result['payment'] = $this->_getAttributes($order->getPayment(), 'order_payment');
|
138 |
+
|
139 |
+
$result['status_history'] = array();
|
140 |
+
|
141 |
+
foreach ($order->getAllStatusHistory() as $history) {
|
142 |
+
$result['status_history'][] = $this->_getAttributes($history, 'order_status_history');
|
143 |
+
}
|
144 |
+
|
145 |
+
return $result;
|
146 |
+
}
|
147 |
+
/**
|
148 |
+
* This function will add details to order items
|
149 |
+
* @param array $item, int $id
|
150 |
+
* @return array $productItems
|
151 |
+
*/
|
152 |
+
protected function getProductAmosoftDetails($item, $order){
|
153 |
+
if ($item->getGiftMessageId() > 0) {
|
154 |
+
$item->setGiftMessage(
|
155 |
+
Mage::getSingleton('giftmessage/message')->load($item->getGiftMessageId())->getMessage()
|
156 |
+
);
|
157 |
+
}
|
158 |
+
$productItems = array();
|
159 |
+
$productItems = $this->_getAttributes($item, 'order_item');
|
160 |
+
$amosoftItems = Mage::getModel('dropship/orderitems')->getCollection()
|
161 |
+
->addFieldToSelect(array('sku', 'amosoft_vendor_sku', 'vendor_cost', 'shipping_cost', 'amosoft_item_status', 'amosoft_vendor_code', 'item_id'))
|
162 |
+
->addFieldToFilter('item_order_id',array('eq'=>$order->getId()))
|
163 |
+
->addFieldToFilter('item_id', array('eq'=>$productItems['item_id']));
|
164 |
+
//->addFieldToFilter('amosoft_item_status', array('eq'=>$this->_itemStatusTansmitting));
|
165 |
+
$amosoftItems->getSelect()->join(array('salesOrder'=>Mage::getSingleton('core/resource')->getTableName('sales/order')),
|
166 |
+
'salesOrder.entity_id = main_table.item_order_id', array('state'));
|
167 |
+
//->where('salesOrder.state = ?','processing');
|
168 |
+
if($amosoftItems->getSize() > 0){
|
169 |
+
$productItems['amosoft_item_status'] = $amosoftItems->getFirstItem()->getAmosoftItemStatus();
|
170 |
+
$productItems['amosoft_vendor_sku'] = $amosoftItems->getFirstItem()->getAmosoftVendorSku();
|
171 |
+
$productItems['amosoft_vendor_cost'] = $amosoftItems->getFirstItem()->getVendorCost();
|
172 |
+
$productItems['amosoft_vendor_ship_cost'] = $amosoftItems->getFirstItem()->getShippingCost();
|
173 |
+
$productItems['vendor_sale_total'] = $productItems['amosoft_vendor_cost'] + $productItems['amosoft_vendor_ship_cost'];
|
174 |
+
$productItems['amosoft_vendor_code'] = $amosoftItems->getFirstItem()->getAmosoftVendorCode();
|
175 |
+
}
|
176 |
+
return $productItems;
|
177 |
+
}
|
178 |
+
|
179 |
+
|
180 |
+
/**
|
181 |
+
* Change Amosoft order item status
|
182 |
+
*
|
183 |
+
* @param string $orderIncrementId, array $sku, string $status
|
184 |
+
* @return bool
|
185 |
+
*/
|
186 |
+
public function updateItemStatus($orderIncrementId, $sku, $status){
|
187 |
+
|
188 |
+
$order = $this->_initOrder($orderIncrementId);
|
189 |
+
$result = false;
|
190 |
+
try{
|
191 |
+
$items = $order->getAllItems();
|
192 |
+
foreach ($items as $item){
|
193 |
+
if( $item->getSku() == $sku){
|
194 |
+
$itemIdArr[] = $item->getItemId();
|
195 |
+
}
|
196 |
+
}
|
197 |
+
if(!$status){
|
198 |
+
$status = Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_SENT_TO_SUPPLIER;
|
199 |
+
}
|
200 |
+
if($itemIdArr && in_array(ucfirst($status),Mage::helper('dropship')->getItemStatuses())){
|
201 |
+
foreach($itemIdArr as $itemId){
|
202 |
+
$result = $this->saveAmosoftStatus($itemId, $status);
|
203 |
+
}
|
204 |
+
}else{
|
205 |
+
$result = false;
|
206 |
+
}
|
207 |
+
}catch (Mage_Core_Exception $e) {
|
208 |
+
$this->_fault('status_not_changed', $e->getMessage());
|
209 |
+
}
|
210 |
+
return $result;
|
211 |
+
}
|
212 |
+
|
213 |
+
/**
|
214 |
+
* This function is used to save order item status
|
215 |
+
* @param int $itemId, string $status
|
216 |
+
* @return bool
|
217 |
+
*/
|
218 |
+
protected function saveAmosoftStatus($itemId, $status){
|
219 |
+
$amosoftStatus = Mage::getModel('dropship/orderitems')->load($itemId, 'item_id');
|
220 |
+
$orderCollection = Mage::getModel('sales/order')->load($amosoftStatus->getItemOrderId());
|
221 |
+
$orderStatus = $orderCollection->getStatus();
|
222 |
+
$itemStatusHistory = Mage::helper('dropship')->getSerialisedData($amosoftStatus, ucfirst($status), $orderStatus);
|
223 |
+
if($amosoftStatus->getId()){
|
224 |
+
$amosoftStatus->setAmosoftItemStatus(ucfirst($status))
|
225 |
+
->setUpdatedBy('amosoft')
|
226 |
+
->setItemStatusHistory($itemStatusHistory)
|
227 |
+
->setUpdatedAt(Mage::getModel('core/date')->gmtDate())
|
228 |
+
->save();
|
229 |
+
Mage::helper('dropship')->genrateLog(0,'API Item Update started','API Item Update ended','Item Status updated by Amosoft API item-status->'.$status.' ,sku->'.$amosoftStatus->getSku().' ,orderId->'.$amosoftStatus->getItemOrderId());
|
230 |
+
return true;
|
231 |
+
}
|
232 |
+
}
|
233 |
+
|
234 |
+
|
235 |
+
/**
|
236 |
+
* Retrive orders by Item status
|
237 |
+
*
|
238 |
+
* @param string $orderIncrementId, string $orderStatus, int $limit
|
239 |
+
* @return bool
|
240 |
+
*/
|
241 |
+
public function getAmosoftOrderByItemStatus($store_id,$orderItemStatus){
|
242 |
+
|
243 |
+
if (!$store_id) {
|
244 |
+
$this->_fault('invaild_store');
|
245 |
+
}
|
246 |
+
$orderItemStatus = (!empty($orderItemStatus)) ? $orderItemStatus : 'Transmitting';
|
247 |
+
$orderItemsdDetails = array();
|
248 |
+
try{
|
249 |
+
|
250 |
+
$orderCollection = Mage::getModel('dropship/orderitems')->getCollection();
|
251 |
+
$orderCollection->addFieldToFilter('amosoft_item_status',$orderItemStatus);
|
252 |
+
$orderCollection->getSelect()->join(array('salesOrder'=>Mage::getSingleton('core/resource')->getTableName('sales/order')),
|
253 |
+
'salesOrder.entity_id = main_table.item_order_id', array('increment_id','store_id'))->where('store_id = ?', (int)$store_id);
|
254 |
+
$orderCollection->getSelect()->group('item_order_id');
|
255 |
+
|
256 |
+
if($orderCollection->getSize() > 0){
|
257 |
+
$result['ResultCount'] = $orderCollection->count();
|
258 |
+
foreach($orderCollection as $order)
|
259 |
+
{
|
260 |
+
$result['orderDetails'][] = array('increment_id'=>$order->getIncrementId());
|
261 |
+
}
|
262 |
+
}else
|
263 |
+
$result['error_message'] = 'Result not found';
|
264 |
+
|
265 |
+
|
266 |
+
}catch (Mage_Core_Exception $e) {
|
267 |
+
$this->_fault('data_invalid', $e->getMessage());
|
268 |
+
}
|
269 |
+
|
270 |
+
|
271 |
+
return $result;
|
272 |
+
}
|
273 |
+
|
274 |
+
|
275 |
+
|
276 |
+
public function setAmosoftOrderItemStatus($orderIncrementId,$itemStatus){
|
277 |
+
|
278 |
+
$order = $this->_initOrder($orderIncrementId);
|
279 |
+
$itemId = array();
|
280 |
+
$itemOrderId = $order->getEntityId();
|
281 |
+
$result = false;
|
282 |
+
$orderCollection = Mage::getModel('dropship/orderitems')->getCollection();
|
283 |
+
$orderCollection->addFieldToFilter('amosoft_item_status','Transmitting');
|
284 |
+
$orderCollection->addFieldToFilter('item_order_id',$itemOrderId);
|
285 |
+
|
286 |
+
try{
|
287 |
+
|
288 |
+
if($orderCollection->getSize() > 0){
|
289 |
+
foreach($orderCollection as $itemDetails)
|
290 |
+
{
|
291 |
+
$itemId[] = $itemDetails->getItemId();
|
292 |
+
}
|
293 |
+
|
294 |
+
}
|
295 |
+
if(empty($itemStatus)){
|
296 |
+
$itemStatus = Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_SENT_TO_SUPPLIER;
|
297 |
+
}
|
298 |
+
|
299 |
+
if(!empty($itemId) && in_array(ucfirst($itemStatus),Mage::helper('dropship')->getItemStatuses())){
|
300 |
+
foreach($itemId as $itemId){
|
301 |
+
$result = $this->saveAmosoftStatus($itemId, $itemStatus);
|
302 |
+
}
|
303 |
+
}else{
|
304 |
+
$result = false;
|
305 |
+
}
|
306 |
+
}catch (Mage_Core_Exception $e) {
|
307 |
+
$this->_fault('status_not_changed', $e->getMessage());
|
308 |
+
}
|
309 |
+
return ($result) ? array('success_message'=>'Item Status Upated Successfully') : array('error_message'=>'Error In Updating Item Status');
|
310 |
+
}
|
311 |
+
|
312 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Order/Dropship/Api.php
ADDED
@@ -0,0 +1,352 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @category Amosoft
|
4 |
+
* @package Amosoft_Dropship
|
5 |
+
*/
|
6 |
+
class Amosoft_Dropship_Model_Order_Dropship_Api extends Mage_Api_Model_Resource_Abstract
|
7 |
+
{
|
8 |
+
|
9 |
+
public function getAmosoftInvoices($ids) {
|
10 |
+
|
11 |
+
$allInvoices['flag'] = 'false';
|
12 |
+
$i = 0;
|
13 |
+
if(!empty($ids)){
|
14 |
+
foreach($ids as $key => $increment_id){
|
15 |
+
$invoice = Mage::getModel('sales/order_invoice')->loadByIncrementId($increment_id);
|
16 |
+
$order = $invoice->getOrder();
|
17 |
+
|
18 |
+
$OrderIncrementid = $order->getIncrementId();
|
19 |
+
$order_created_date = $order->getCreatedAt();
|
20 |
+
if ($order->hasInvoices()) {
|
21 |
+
$invoices = $invoice->getData();
|
22 |
+
$allInvoices['flag'] = 'true';
|
23 |
+
$allInvoices['status'] = '1';
|
24 |
+
$allInvoices['invoices'][] = $invoices;
|
25 |
+
$allInvoices['invoices'][$i]['OrderIncrementid'] = $OrderIncrementid;
|
26 |
+
$allInvoices['invoices'][$i]['order_created_at'] = $order_created_date;
|
27 |
+
$i++;
|
28 |
+
}
|
29 |
+
else{
|
30 |
+
$allInvoices['status'] = '0';
|
31 |
+
$allInvoices['message'] = "No new invoice found";
|
32 |
+
}
|
33 |
+
}
|
34 |
+
}
|
35 |
+
else{
|
36 |
+
$allInvoices['status'] = '0';
|
37 |
+
$allInvoices['message'] = "No new invoice found";
|
38 |
+
}
|
39 |
+
return $allInvoices;
|
40 |
+
}
|
41 |
+
|
42 |
+
/* Load invoices using order*/
|
43 |
+
public function getAmosoftInvoices2($ids) {
|
44 |
+
|
45 |
+
$allInvoices['flag'] = 'false';
|
46 |
+
$i = 0;
|
47 |
+
foreach($ids as $key => $increment_id){
|
48 |
+
|
49 |
+
$order = Mage::getModel('sales/order')->loadByIncrementId($increment_id);
|
50 |
+
$OrderIncrementid = $order->getIncrementId();
|
51 |
+
$order_created_date = $order->getCreatedAt();
|
52 |
+
if ($order->hasgetAmosoftInvoices2Invoices()) {
|
53 |
+
foreach ($order->getInvoiceCollection() as $inv) {
|
54 |
+
$invoices = $inv->getData();
|
55 |
+
$allInvoices['flag'] = 'true';
|
56 |
+
$allInvoices['status'] = '1';
|
57 |
+
$allInvoices['invoices'][] = $invoices;
|
58 |
+
$allInvoices['invoices'][$i]['OrderIncrementid'] = $OrderIncrementid;
|
59 |
+
$allInvoices['invoices'][$i]['order_created_at'] = $order_created_date;
|
60 |
+
$i++;
|
61 |
+
}
|
62 |
+
}
|
63 |
+
else{
|
64 |
+
$allInvoices['status'] = '0';
|
65 |
+
$allInvoices['message'] = "No new invoice found";
|
66 |
+
}
|
67 |
+
}
|
68 |
+
return $allInvoices;
|
69 |
+
|
70 |
+
}
|
71 |
+
|
72 |
+
public function getAmosoftShipments($ids) {
|
73 |
+
|
74 |
+
$allShipments['flag'] = 'false';
|
75 |
+
$i = 0;
|
76 |
+
if(!empty($ids)){
|
77 |
+
foreach($ids as $key => $increment_id){
|
78 |
+
$shipment = Mage::getModel('sales/order_shipment')->loadByIncrementId($increment_id);
|
79 |
+
$order = $shipment->getOrder();
|
80 |
+
|
81 |
+
$OrderIncrementid = $order->getIncrementId();
|
82 |
+
$order_created_date = $order->getCreatedAt();
|
83 |
+
$shipmentCollection = $order->getShipmentsCollection();
|
84 |
+
if($shipmentCollection){
|
85 |
+
$shipments = $shipment->getData();
|
86 |
+
$allShipments['flag'] = 'true';
|
87 |
+
$allShipments['status'] = '1';
|
88 |
+
$allShipments['shipments'][] = $shipments;
|
89 |
+
$allShipments['shipments'][$i]['OrderIncrementid'] = $OrderIncrementid;
|
90 |
+
$allShipments['shipments'][$i]['order_created_at'] = $order_created_date;
|
91 |
+
$i++;
|
92 |
+
}
|
93 |
+
else{
|
94 |
+
$allShipments['status'] = '0';
|
95 |
+
$allShipments['message'] = "No new shipment found";
|
96 |
+
}
|
97 |
+
}
|
98 |
+
}
|
99 |
+
else{
|
100 |
+
$allShipments['status'] = '0';
|
101 |
+
$allShipments['message'] = "No new shipment found";
|
102 |
+
}
|
103 |
+
return $allShipments;
|
104 |
+
}
|
105 |
+
|
106 |
+
/* Load invoices using order*/
|
107 |
+
public function getAmosoftShipments2($ids) {
|
108 |
+
|
109 |
+
$allShipments['flag'] = 'false';
|
110 |
+
$i = 0;
|
111 |
+
foreach($ids as $key => $increment_id){
|
112 |
+
|
113 |
+
$order = Mage::getModel('sales/order')->loadByIncrementId($increment_id);
|
114 |
+
$OrderIncrementid = $order->getIncrementId();
|
115 |
+
$order_created_date = $order->getCreatedAt();
|
116 |
+
|
117 |
+
$shipmentCollection = $order->getShipmentsCollection();
|
118 |
+
if($shipmentCollection){
|
119 |
+
foreach($shipmentCollection as $shipment){
|
120 |
+
$shipments = $shipment->getData();
|
121 |
+
$allShipments['flag'] = 'true';
|
122 |
+
$allShipments['status'] = '1';
|
123 |
+
$allShipments['shipments'][] = $shipments;
|
124 |
+
$allShipments['shipments'][$i]['OrderIncrementid'] = $OrderIncrementid;
|
125 |
+
$allShipments['shipments'][$i]['order_created_at'] = $order_created_date;
|
126 |
+
$i++;
|
127 |
+
}
|
128 |
+
}
|
129 |
+
else{
|
130 |
+
$allShipments['status'] = '0';
|
131 |
+
$allShipments['message'] = "No new shipment found";
|
132 |
+
}
|
133 |
+
}
|
134 |
+
return $allShipments;
|
135 |
+
}
|
136 |
+
|
137 |
+
public function createAmosoftShipment($orderId, $comment, $importData) {
|
138 |
+
|
139 |
+
$order = Mage::getModel('sales/order')->loadByIncrementId($orderId);
|
140 |
+
|
141 |
+
$orderShip = $order->prepareShipment(); // can take sku => qty array
|
142 |
+
$orderShip->register();
|
143 |
+
$orderShip->sendEmail();
|
144 |
+
|
145 |
+
$tracker = Mage::getModel( 'sales/order_shipment_track' );
|
146 |
+
$tracker->setShipment( $orderShip );
|
147 |
+
$tracker->setData( 'title', $importData['title'] );
|
148 |
+
$tracker->setData( 'number', $importData['number'] );
|
149 |
+
$tracker->setData( 'carrier_code', $importData['carrier_code'] );
|
150 |
+
$tracker->setData( 'order_id', $orderId );
|
151 |
+
|
152 |
+
$orderShip->addTrack($tracker);
|
153 |
+
$orderShip->save();
|
154 |
+
|
155 |
+
$order->setData('state', "complete");
|
156 |
+
$order->setStatus("complete");
|
157 |
+
$history = $order->addStatusHistoryComment($comment, false);
|
158 |
+
$history->setIsCustomerNotified(false);
|
159 |
+
$order->save();
|
160 |
+
return "complete";
|
161 |
+
}
|
162 |
+
|
163 |
+
/**
|
164 |
+
* Collect invoice tax amount
|
165 |
+
*
|
166 |
+
* @param Mage_Sales_Model_Order_Invoice $invoice
|
167 |
+
* @return Mage_Sales_Model_Order_Invoice_Total_Tax
|
168 |
+
*/
|
169 |
+
public function addShippingTaxCharges($invoice_id, $shipping_cost)
|
170 |
+
{
|
171 |
+
$invoice = Mage::getModel('sales/order_invoice')->loadByIncrementId($invoice_id);
|
172 |
+
$totalTax = 0;
|
173 |
+
$baseTotalTax = 0;
|
174 |
+
$totalHiddenTax = 0;
|
175 |
+
$baseTotalHiddenTax = 0;
|
176 |
+
|
177 |
+
$order = $invoice->getOrder();
|
178 |
+
|
179 |
+
/** @var $item Mage_Sales_Model_Order_Invoice_Item */
|
180 |
+
foreach ($invoice->getAllItems() as $item) {
|
181 |
+
$orderItem = $item->getOrderItem();
|
182 |
+
$orderItemQty = $orderItem->getQtyOrdered();
|
183 |
+
|
184 |
+
if (($orderItem->getTaxAmount() || $orderItem->getHiddenTaxAmount()) && $orderItemQty) {
|
185 |
+
if ($item->getOrderItem()->isDummy()) {
|
186 |
+
continue;
|
187 |
+
}
|
188 |
+
|
189 |
+
/**
|
190 |
+
* Resolve rounding problems
|
191 |
+
*/
|
192 |
+
$tax = $orderItem->getTaxAmount() - $orderItem->getTaxInvoiced();
|
193 |
+
$baseTax = $orderItem->getBaseTaxAmount() - $orderItem->getBaseTaxInvoiced();
|
194 |
+
$hiddenTax = $orderItem->getHiddenTaxAmount() - $orderItem->getHiddenTaxInvoiced();
|
195 |
+
$baseHiddenTax = $orderItem->getBaseHiddenTaxAmount() - $orderItem->getBaseHiddenTaxInvoiced();
|
196 |
+
if (!$item->isLast()) {
|
197 |
+
$availableQty = $orderItemQty - $orderItem->getQtyInvoiced();
|
198 |
+
$tax = $invoice->roundPrice($tax / $availableQty * $item->getQty());
|
199 |
+
$baseTax = $invoice->roundPrice($baseTax / $availableQty * $item->getQty(), 'base');
|
200 |
+
$hiddenTax = $invoice->roundPrice($hiddenTax / $availableQty * $item->getQty());
|
201 |
+
$baseHiddenTax = $invoice->roundPrice($baseHiddenTax / $availableQty * $item->getQty(), 'base');
|
202 |
+
}
|
203 |
+
|
204 |
+
$item->setTaxAmount($tax);
|
205 |
+
$item->setBaseTaxAmount($baseTax);
|
206 |
+
$item->setHiddenTaxAmount($hiddenTax);
|
207 |
+
$item->setBaseHiddenTaxAmount($baseHiddenTax);
|
208 |
+
|
209 |
+
$totalTax += $tax;
|
210 |
+
$baseTotalTax += $baseTax;
|
211 |
+
$totalHiddenTax += $hiddenTax;
|
212 |
+
$baseTotalHiddenTax += $baseHiddenTax;
|
213 |
+
}
|
214 |
+
}
|
215 |
+
|
216 |
+
$totalTax += $order->getShippingTaxAmount();
|
217 |
+
$baseTotalTax += $order->getBaseShippingTaxAmount();
|
218 |
+
$totalHiddenTax += $order->getShippingHiddenTaxAmount();
|
219 |
+
$baseTotalHiddenTax += $order->getBaseShippingHiddenTaxAmount();
|
220 |
+
|
221 |
+
$invoice->setShippingTaxAmount($order->getShippingTaxAmount());
|
222 |
+
$invoice->setBaseShippingTaxAmount($order->getBaseShippingTaxAmount());
|
223 |
+
$invoice->setShippingHiddenTaxAmount($order->getShippingHiddenTaxAmount());
|
224 |
+
$invoice->setBaseShippingHiddenTaxAmount($order->getBaseShippingHiddenTaxAmount());
|
225 |
+
|
226 |
+
$allowedTax = $order->getTaxAmount() - $order->getTaxInvoiced();
|
227 |
+
$allowedBaseTax = $order->getBaseTaxAmount() - $order->getBaseTaxInvoiced();;
|
228 |
+
$allowedHiddenTax = $order->getHiddenTaxAmount() + $order->getShippingHiddenTaxAmount()
|
229 |
+
- $order->getHiddenTaxInvoiced() - $order->getShippingHiddenTaxInvoiced();
|
230 |
+
$allowedBaseHiddenTax = $order->getBaseHiddenTaxAmount() + $order->getBaseShippingHiddenTaxAmount()
|
231 |
+
- $order->getBaseHiddenTaxInvoiced() - $order->getBaseShippingHiddenTaxInvoiced();
|
232 |
+
|
233 |
+
if ($invoice->isLast()) {
|
234 |
+
$totalTax = $allowedTax;
|
235 |
+
$baseTotalTax = $allowedBaseTax;
|
236 |
+
$totalHiddenTax = $allowedHiddenTax;
|
237 |
+
$baseTotalHiddenTax = $allowedBaseHiddenTax;
|
238 |
+
} else {
|
239 |
+
$totalTax = min($allowedTax, $totalTax);
|
240 |
+
$baseTotalTax = min($allowedBaseTax, $baseTotalTax);
|
241 |
+
$totalHiddenTax = min($allowedHiddenTax, $totalHiddenTax);
|
242 |
+
$baseTotalHiddenTax = min($allowedBaseHiddenTax, $baseTotalHiddenTax);
|
243 |
+
}
|
244 |
+
|
245 |
+
$invoice->setTaxAmount($totalTax);
|
246 |
+
$invoice->setBaseTaxAmount($baseTotalTax);
|
247 |
+
$invoice->setHiddenTaxAmount($totalHiddenTax);
|
248 |
+
$invoice->setBaseHiddenTaxAmount($baseTotalHiddenTax);
|
249 |
+
$invoice->setShippingAmount($shipping_cost);
|
250 |
+
$invoice->setBaseShippingAmount($shipping_cost);
|
251 |
+
$invoice->setGrandTotal($invoice->getGrandTotal() + $shipping_cost + $totalTax + $totalHiddenTax);
|
252 |
+
$invoice->setBaseGrandTotal($invoice->getBaseGrandTotal() + $shipping_cost + $baseTotalTax + $baseTotalHiddenTax);
|
253 |
+
//$invoice->save();
|
254 |
+
return 'shipping_cost_added';
|
255 |
+
}
|
256 |
+
|
257 |
+
/**
|
258 |
+
* Add custom supplier shipping charges to each invoice
|
259 |
+
*
|
260 |
+
* @param invoice id, shipping cost
|
261 |
+
* @return response
|
262 |
+
*/
|
263 |
+
public function addShippingCharges($invoice_id, $shipping_cost)
|
264 |
+
{
|
265 |
+
$invoice = Mage::getModel('sales/order_invoice')->loadByIncrementId($invoice_id);
|
266 |
+
$order = $invoice->getOrder();
|
267 |
+
|
268 |
+
$invoice->setShippingAmount(0);
|
269 |
+
$invoice->setBaseShippingAmount(0);
|
270 |
+
|
271 |
+
$orderShippingAmount = $shipping_cost;
|
272 |
+
$baseOrderShippingAmount = $shipping_cost;
|
273 |
+
$shippingInclTax = $shipping_cost;
|
274 |
+
$baseShippingInclTax = $shipping_cost;
|
275 |
+
|
276 |
+
if ($orderShippingAmount) {
|
277 |
+
$invoice->setShippingAmount($orderShippingAmount);
|
278 |
+
$invoice->setBaseShippingAmount($baseOrderShippingAmount);
|
279 |
+
$invoice->setShippingInclTax($shippingInclTax);
|
280 |
+
$invoice->setBaseShippingInclTax($baseShippingInclTax);
|
281 |
+
|
282 |
+
$grandTotal = $invoice->getGrandTotal();
|
283 |
+
$baseGrandTotal = $invoice->getBaseGrandTotal();
|
284 |
+
|
285 |
+
/*else{
|
286 |
+
$grandTotal = $invoice->getGrandTotal() - $invoice->getOrder()->getShippingAmount();
|
287 |
+
$baseGrandTotal = $invoice->getBaseGrandTotal() - $invoice->getOrder()->getShippingAmount();
|
288 |
+
}*/
|
289 |
+
|
290 |
+
$invoice->setGrandTotal($grandTotal+$orderShippingAmount);
|
291 |
+
$invoice->setBaseGrandTotal($baseGrandTotal+$baseOrderShippingAmount);
|
292 |
+
|
293 |
+
$order->setTotalPaid($order->getTotalPaid()+$orderShippingAmount); //update total order due
|
294 |
+
|
295 |
+
//$order->setBaseTotalPaid($order->getBaseTotalPaid()+$baseGrandTotal);
|
296 |
+
//Mage::helper('dropship')->setCustomShipping($shipping_cost);
|
297 |
+
//$invoice->setCustomShipping($shipping_cost);
|
298 |
+
|
299 |
+
$invoice->save();
|
300 |
+
$order->save();
|
301 |
+
}
|
302 |
+
return 'shipping_cost_added';
|
303 |
+
}
|
304 |
+
|
305 |
+
public function getAmosoftSupplierInventory($supplier_code) {
|
306 |
+
|
307 |
+
$dataCollection = Mage::getModel('dropship/inventory');
|
308 |
+
$collection = null;
|
309 |
+
$allInventory['flag'] = 'false';
|
310 |
+
$collection = $dataCollection->getCollection()->addFieldToFilter('amosoft_vendor_code',$supplier_code);
|
311 |
+
if($collection->getSize() == 0){
|
312 |
+
$errorMsg = 'Can not import supplier inventory';
|
313 |
+
$allInventory['status'] = '1';
|
314 |
+
//$allInventory['message'] = $errorMsg;
|
315 |
+
$allInventory['data'] = $collection;
|
316 |
+
}
|
317 |
+
else{
|
318 |
+
$allInventory['status'] = '1';
|
319 |
+
$allInventory['flag'] = 'true';
|
320 |
+
//$allInventory['message'] = "Inventory sync successful";
|
321 |
+
$allInventory['data'] = $collection->getData();
|
322 |
+
}
|
323 |
+
return $allInventory;
|
324 |
+
}
|
325 |
+
|
326 |
+
public function updateAmosoftInventory($id, $request) {
|
327 |
+
|
328 |
+
$model = Mage::getModel('dropship/inventory')->load($id)->addData($request);
|
329 |
+
try {
|
330 |
+
//save the data
|
331 |
+
$model->setId($id)->save();
|
332 |
+
//show success msg
|
333 |
+
return "record updated successfully.";
|
334 |
+
} catch (Exception $e){
|
335 |
+
return $e->getMessage();
|
336 |
+
}
|
337 |
+
}
|
338 |
+
|
339 |
+
public function addSupplierToProduct($request) {
|
340 |
+
|
341 |
+
$model = Mage::getModel('dropship/inventory')->addData($request);
|
342 |
+
try {
|
343 |
+
//save the data
|
344 |
+
$model->save();
|
345 |
+
//show success msg
|
346 |
+
return "record updated successfully.";
|
347 |
+
} catch (Exception $e){
|
348 |
+
return $e->getMessage();
|
349 |
+
}
|
350 |
+
}
|
351 |
+
|
352 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Order/Invoice.php
ADDED
@@ -0,0 +1,31 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
class Amosoft_Dropship_Model_Order_Invoice extends Mage_Sales_Model_Order_Invoice
|
3 |
+
{
|
4 |
+
|
5 |
+
public function __construct(){
|
6 |
+
parent::__construct();
|
7 |
+
}
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Invoice totals collecting
|
11 |
+
*
|
12 |
+
* @return Mage_Sales_Model_Order_Invoice
|
13 |
+
*/
|
14 |
+
public function collectTotals()
|
15 |
+
{
|
16 |
+
$order = $this->getOrder();
|
17 |
+
|
18 |
+
foreach($this->getConfig()->getTotalModels() as $model) {
|
19 |
+
if($order['shipping_method'] == "suppliershippingcostperproduct_suppliershippingcostperproduct"){
|
20 |
+
if($model->getData('code') != 'shipping'){
|
21 |
+
//Mage::log(Mage::helper('dropship')->getCustomShipping(), null, "ship.log", 1);
|
22 |
+
$model->collect($this);
|
23 |
+
}
|
24 |
+
}
|
25 |
+
else{
|
26 |
+
$model->collect($this);
|
27 |
+
}
|
28 |
+
}
|
29 |
+
return $this;
|
30 |
+
}
|
31 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Orderitems.php
ADDED
@@ -0,0 +1,186 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Orderitems extends Mage_Core_Model_Abstract
|
11 |
+
{
|
12 |
+
protected function _construct(){
|
13 |
+
$this->_init("dropship/orderitems");
|
14 |
+
}
|
15 |
+
|
16 |
+
public function prepareOrderItemData($item){
|
17 |
+
$productSku = $item->getSku();
|
18 |
+
$ruletype = Mage::getStoreConfig( 'amosoft_sourcing/rank/ranktype' );
|
19 |
+
|
20 |
+
if ($ruletype == 'default')
|
21 |
+
$orderBy = 'ranking ASC';
|
22 |
+
else
|
23 |
+
$orderBy = 'cost ASC';
|
24 |
+
|
25 |
+
$collectionVendor = Mage::getModel( 'dropship/inventory' )->getCollection()->addFieldToFilter ( 'product_sku', $productSku );
|
26 |
+
$collectionVendor->getSelect()->joinleft( array ('amosoftRanking' => Mage::getSingleton( 'core/resource' )->getTableName( 'dropship/ranking' )), 'amosoftRanking.amosoft_vendor_code = main_table.amosoft_vendor_code', array ('*') )->where('amosoftRanking.is_dropship = "yes" and amosoftRanking.is_active = "yes"');
|
27 |
+
$collectionVendor->getSelect()->order( $orderBy );
|
28 |
+
return $collectionVendor;
|
29 |
+
}
|
30 |
+
|
31 |
+
|
32 |
+
public function isVendorCollectionAvailable()
|
33 |
+
{
|
34 |
+
if (Mage::getModel( 'dropship/inventory' )->getCollection()->count() > 0 )
|
35 |
+
return true;
|
36 |
+
else
|
37 |
+
return false;
|
38 |
+
}
|
39 |
+
|
40 |
+
public function setItemData($orderItemInstance,$status,$item,$vendorCode,$vendorCost,$vendorSku,$itemStatusHistory)
|
41 |
+
{
|
42 |
+
$orderItemInstance->setItemId( $item->getItemId () );
|
43 |
+
$orderItemInstance->setAmosoftItemStatus( $status );
|
44 |
+
$orderItemInstance->setAmosoftVendorCode( $vendorCode );
|
45 |
+
$orderItemInstance->setAmosoftVendorSku( $vendorSku );
|
46 |
+
$orderItemInstance->setVendorCost( $vendorCost );
|
47 |
+
$orderItemInstance->setItemOrderId($item->getOrderId () );
|
48 |
+
$orderItemInstance->setSku( $item->getSku() );
|
49 |
+
$orderItemInstance->setUpdatedBy('Cron');
|
50 |
+
$orderItemInstance->setUpdatedAt(now());
|
51 |
+
$orderItemInstance->setCreatedAt( Mage::getModel('core/date')->gmtDate());
|
52 |
+
$orderItemInstance->setItemStatusHistory($itemStatusHistory);
|
53 |
+
try {
|
54 |
+
$orderItemInstance->save();
|
55 |
+
} catch ( Exception $e ) {
|
56 |
+
Mage::helper('dropship')->genrateLog(0,null,null,'Section :Error In Setting order item data: '.$e->getMessage().' sku : '.$item->getSku().','.$item->getOrderId ());
|
57 |
+
echo $e->getMessage ();
|
58 |
+
}
|
59 |
+
}
|
60 |
+
public function updateAmosoftVendorInvenory($vendorCode,$productSku,$qtyInvoiced)
|
61 |
+
{
|
62 |
+
$inventory = Mage::getModel ( 'dropship/inventory' )->getCollection()
|
63 |
+
->addFieldToFilter('amosoft_vendor_code',$vendorCode)->addFieldToFilter('product_sku',$productSku);
|
64 |
+
$filedData = $inventory->getFirstItem()->getData();
|
65 |
+
$InventoryStock = $filedData['stock'];
|
66 |
+
$finalStock = $InventoryStock - $qtyInvoiced;
|
67 |
+
$inventory->getFirstItem()->setStock( ($finalStock > 0) ? $finalStock : 0 );
|
68 |
+
try {
|
69 |
+
$inventory->getFirstItem()->save();
|
70 |
+
Mage::getModel('dropship/inventory')->_saveInventoryLog('update',array('amosoft_vendor_name'=>$filedData['amosoft_vendor_name'],'updated_by'=>'system','product_sku'=>$productSku,'amosoft_vendor_code'=>$vendorCode,'cost'=>$filedData['cost'],'stock'=>($finalStock > 0) ? $finalStock : 0));
|
71 |
+
} catch ( Exception $e ) {
|
72 |
+
echo $e->getMessage ();
|
73 |
+
}
|
74 |
+
}
|
75 |
+
|
76 |
+
public function updateSourcingByUser($request)
|
77 |
+
{
|
78 |
+
$arrData = array();
|
79 |
+
$inventoryModel = Mage::getModel('dropship/inventory')->getCollection()->addFieldToFilter('amosoft_vendor_code',$request['amosoft_vendor_code'])->addFieldToFilter('product_sku',$request['product_sku']);
|
80 |
+
$arrData['amosoft_vendor_code'] = $request['amosoft_vendor_code'];
|
81 |
+
$arrData['amosoft_item_status'] = Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_TRANSMITTING;
|
82 |
+
$arrData['updated_by'] = 'User';
|
83 |
+
$arrData['amosoft_vendor_sku'] = $inventoryModel->getFirstItem()->getAmosoftVendorSku();
|
84 |
+
$arrData['vendor_cost'] = $request['qty']*$inventoryModel->getFirstItem()->getCost();
|
85 |
+
$arrData['item_status_history'] = $request['item_status_history'];
|
86 |
+
return $arrData;
|
87 |
+
}
|
88 |
+
|
89 |
+
public function updateOrderStatus($orderId,$itemId)
|
90 |
+
{
|
91 |
+
$arrData = array();
|
92 |
+
$orderStatus = $this->_changeAllItemStatus($orderId,$itemId);
|
93 |
+
if(is_null($orderStatus))
|
94 |
+
return;
|
95 |
+
$orderCollection = Mage::getModel('sales/order')->Load($orderId);
|
96 |
+
$orderCollection->setStatus(Mage::getStoreConfig($orderStatus));
|
97 |
+
$orderCollection->addStatusToHistory(Mage::getStoreConfig($orderStatus), 'Order status and sourcing changed by user', false);
|
98 |
+
try{
|
99 |
+
$orderCollection->save();
|
100 |
+
}catch (Exception $e) {
|
101 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
102 |
+
}
|
103 |
+
return $arrData;
|
104 |
+
}
|
105 |
+
|
106 |
+
protected function _changeAllItemStatus($orderId){
|
107 |
+
$orderItemCollection = $this->getCollection()->addFieldToFilter('item_order_id',$orderId);
|
108 |
+
$orderStatus = null;
|
109 |
+
$arrItemStatus = array();
|
110 |
+
if($orderItemCollection->count() > 0){
|
111 |
+
if($orderItemCollection->count() > 1)
|
112 |
+
{
|
113 |
+
foreach($orderItemCollection as $item){
|
114 |
+
$arrItemStatus[] = $item->getAmosoftItemStatus();
|
115 |
+
}
|
116 |
+
}else{
|
117 |
+
$arrItemStatus[] = 'Transmitting';
|
118 |
+
}
|
119 |
+
}
|
120 |
+
$arrUnique = array_unique($arrItemStatus);
|
121 |
+
if(count($arrUnique) == 1){
|
122 |
+
switch($arrUnique[0]){
|
123 |
+
case 'Backorder' :
|
124 |
+
$orderStatus = 'amosoft_sourcing/order/backorder';
|
125 |
+
break;
|
126 |
+
case 'Transmitting' :
|
127 |
+
$orderStatus = 'amosoft_sourcing/order/awaiting_transmission';
|
128 |
+
break;
|
129 |
+
case 'No Dropship' :
|
130 |
+
$orderStatus = 'amosoft_sourcing/order/sourcing_complete';
|
131 |
+
break;
|
132 |
+
}
|
133 |
+
}elseif(count($arrUnique) > 1){
|
134 |
+
if(in_array('Backorder',$arrUnique))
|
135 |
+
$orderStatus = 'amosoft_sourcing/order/backorder';
|
136 |
+
else
|
137 |
+
$orderStatus = 'amosoft_sourcing/order/awaiting_transmission';
|
138 |
+
}
|
139 |
+
return $orderStatus;
|
140 |
+
}
|
141 |
+
|
142 |
+
public function setSourcingOrderStatus($data)
|
143 |
+
{
|
144 |
+
$itemStatus = array();
|
145 |
+
$itemCollection = $this->getCollection()->addFieldToFilter('item_order_id',$data['item_order_id']);
|
146 |
+
foreach($itemCollection as $items){
|
147 |
+
if($items->getItemId() != $data['item_id'])
|
148 |
+
$itemStatus[] = $items->getAmosoftItemStatus();
|
149 |
+
}
|
150 |
+
$uniqueArray = array_unique($itemStatus);
|
151 |
+
$orderCollection = Mage::getModel('sales/order')->Load($data['item_order_id']);
|
152 |
+
switch($itemStatus)
|
153 |
+
{
|
154 |
+
case (count($uniqueArray) == 1 && $uniqueArray[0] == 'Cancelled' ) ://case : when all item status are cancelled
|
155 |
+
$orderCollection->setStatus('canceled');
|
156 |
+
$orderCollection->setState('canceled');
|
157 |
+
$orderCollection->addStatusToHistory('canceled', 'Order status changed to canceled', false);
|
158 |
+
|
159 |
+
break;
|
160 |
+
case in_array('Backorder',$itemStatus) :
|
161 |
+
$orderCollection->setStatus(Mage::getStoreConfig(Amosoft_Dropship_Model_Observer::XML_PATH_AMOSOFT_ORDER_BACKORDERED));
|
162 |
+
$orderCollection->setState('processing');
|
163 |
+
$orderCollection->addStatusToHistory(Mage::getStoreConfig(Amosoft_Dropship_Model_Observer::XML_PATH_AMOSOFT_ORDER_BACKORDERED), 'Order status changed to backorder', false);
|
164 |
+
break;
|
165 |
+
case (in_array('Transmitting', $uniqueArray)) :
|
166 |
+
$orderCollection->setStatus(Mage::getStoreConfig(Amosoft_Dropship_Model_Observer::XML_PATH_AMOSOFT_ORDER_AWAITING_TRANSMISSION));
|
167 |
+
$orderCollection->setState('processing');
|
168 |
+
$orderCollection->addStatusToHistory(Mage::getStoreConfig(Amosoft_Dropship_Model_Observer::XML_PATH_AMOSOFT_ORDER_AWAITING_TRANSMISSION), 'Order status changed to transmitting', false);
|
169 |
+
break;
|
170 |
+
|
171 |
+
default :
|
172 |
+
$orderCollection->setStatus(Mage::getStoreConfig(Amosoft_Dropship_Model_Observer::XML_PATH_AMOSOFT_ORDER_SOURCING_COMPLETE));
|
173 |
+
$orderCollection->setState('processing');
|
174 |
+
$orderCollection->addStatusToHistory(Mage::getStoreConfig(Amosoft_Dropship_Model_Observer::XML_PATH_AMOSOFT_ORDER_SOURCING_COMPLETE), 'Order status changed to sourcing complete', false);
|
175 |
+
break;
|
176 |
+
}
|
177 |
+
try{
|
178 |
+
$orderCollection->save();
|
179 |
+
return true;
|
180 |
+
}catch (Exception $e) {
|
181 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
182 |
+
return false;
|
183 |
+
}
|
184 |
+
}
|
185 |
+
}
|
186 |
+
|
app/code/local/Amosoft/Dropship/Model/Ordersourcing.php
ADDED
@@ -0,0 +1,90 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Ordersourcing extends Mage_Core_Model_Abstract
|
11 |
+
{
|
12 |
+
protected $_pathSourcingStart = 'amosoft/sourcing_cron/start_time';
|
13 |
+
protected $_pathSourcingComp = 'amosoft/sourcing_cron/comp_time';
|
14 |
+
protected $_pathBackorderStart = 'amosoft/backorder_cron/start_time';
|
15 |
+
protected $_pathBackorderComp = 'amosoft/backorder_cron/comp_time';
|
16 |
+
protected $_waitTIme = 30; //min
|
17 |
+
protected function _construct(){
|
18 |
+
$this->_init("dropship/ordersourcing");
|
19 |
+
}
|
20 |
+
public function prepareItemCollection($crontype,$isCronSourcing = false){
|
21 |
+
$orderItemColletion = array();
|
22 |
+
$rowObj = new Varien_Object();
|
23 |
+
$condition = ($isCronSourcing) ? array($crontype,Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_SOURCING) : array($crontype);
|
24 |
+
//$orders = $this->getOrderForProcess($condition);
|
25 |
+
$processingItem = Mage::getModel('dropship/orderitems')->getCollection();
|
26 |
+
$processingItem->getSelect()->join(array('salesOrder'=>Mage::getSingleton('core/resource')->getTableName('sales/order')),'salesOrder.entity_id = main_table.item_order_id',array('state'));
|
27 |
+
$processingItem->addFieldToFilter('state','processing');
|
28 |
+
$processingItem->addFieldToFilter('amosoft_item_status',array('in'=>$condition));
|
29 |
+
if($processingItem->getSize() > 0){
|
30 |
+
foreach ($processingItem as $item){
|
31 |
+
$var = array (
|
32 |
+
'id' => $item->getId(),
|
33 |
+
'item_id' => $item->getItemId(),
|
34 |
+
'item_order_id' => $item->getItemOrderId(),
|
35 |
+
'sku' => $item->getSku(),
|
36 |
+
'amosoft_vendor_sku' => $item->getAmosoftVendorSku(),
|
37 |
+
'vendor_cost' => $item->getVendorCost(),
|
38 |
+
'amosoft_item_status' => $item->getAmosoftItemStatus(),
|
39 |
+
'amosoft_vendor_code' => $item->getAmosoftVendorCode(),
|
40 |
+
'updated_by' => $item->getUpdatedBy(),
|
41 |
+
'item_status_history' => $item->getItemStatusHistory(),
|
42 |
+
'updated_at' => $item->getUpdatedAt()
|
43 |
+
);
|
44 |
+
$rowObj = new Varien_Object();
|
45 |
+
$orderItemColletion[$item->getItemOrderId()][] = $rowObj->setData($var);
|
46 |
+
}
|
47 |
+
}
|
48 |
+
return $orderItemColletion;
|
49 |
+
}
|
50 |
+
protected function getOrderForProcess($condition){
|
51 |
+
$orderIds = array();
|
52 |
+
$processingItem = Mage::getModel('dropship/orderitems')->getCollection();
|
53 |
+
$processingItem->getSelect()->join(array('salesOrder'=>Mage::getSingleton('core/resource')->getTableName('sales/order')),'salesOrder.entity_id = main_table.item_order_id',array('state'));
|
54 |
+
$processingItem->addFieldToFilter('state','processing');
|
55 |
+
$processingItem->addFieldToFilter('amosoft_item_status',array('in'=>$condition));
|
56 |
+
$processingItem->getSelect()->group('item_order_id');
|
57 |
+
//$processingItem->getSelect()->limit('200');
|
58 |
+
$processingItem->getSelect()->order('id asc');
|
59 |
+
if($processingItem->getSize() > 0){
|
60 |
+
foreach ($processingItem as $item){
|
61 |
+
$orderIds[] = $item->getItemOrderId();
|
62 |
+
}
|
63 |
+
}
|
64 |
+
return $orderIds;
|
65 |
+
}
|
66 |
+
public function checkRunningStatus($type)
|
67 |
+
{
|
68 |
+
$path = ($type == Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_BACKORDER) ? $this->_pathBackorderStart : $this->_pathSourcingStart;
|
69 |
+
if(!Mage::getStoreConfigFlag($path)){
|
70 |
+
return false;//job not running
|
71 |
+
}
|
72 |
+
$now = time() - ($this->_waitTIme * 60);
|
73 |
+
$time = strtotime(Mage::getStoreConfig($path));
|
74 |
+
/*if ($time < $now) {
|
75 |
+
return false;//insert forcefully
|
76 |
+
}*/
|
77 |
+
return true;
|
78 |
+
}
|
79 |
+
public function sourcingStarted($type){
|
80 |
+
$path = ($type == Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_BACKORDER) ? $this->_pathBackorderStart : $this->_pathSourcingStart;
|
81 |
+
$value = strftime('%Y-%m-%d %H:%M:00', time());
|
82 |
+
Mage::getResourceModel('dropship/ordersourcing')->saveConfig($path, $value);
|
83 |
+
}
|
84 |
+
public function sourcingCompleted($type){
|
85 |
+
//$path = ($type == 'backorder') ? $this->_pathBackorderComp : $this->_pathSourcingComp;
|
86 |
+
$path = ($type == Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_BACKORDER) ? $this->_pathBackorderStart : $this->_pathSourcingStart;
|
87 |
+
$value = '';//strftime('%Y-%m-%d %H:%M:00', time());
|
88 |
+
Mage::getResourceModel('dropship/ordersourcing')->saveConfig($path, $value);
|
89 |
+
}
|
90 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Productimport.php
ADDED
@@ -0,0 +1,596 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
class Amosoft_Dropship_Model_Productimport {
|
9 |
+
protected $conn;
|
10 |
+
protected $prePopulatedAttribute = array ();
|
11 |
+
protected $catalogTable;
|
12 |
+
protected $productCategory;
|
13 |
+
protected $allowedAttribute = array('name','short_description','description','weight','price','msrp','manufacturer','action','amosoft_upc','amosoft_manufacturer_product_number');
|
14 |
+
protected $preDefineAttribute = array (
|
15 |
+
'status' => 2,
|
16 |
+
'visibility' => 1,
|
17 |
+
'tax_class_id' => 0
|
18 |
+
);
|
19 |
+
protected $cachedPreDefineAttribute = array ();
|
20 |
+
|
21 |
+
/* Initialise connection and predefine attribute which will not available in REST request */
|
22 |
+
public function _init()
|
23 |
+
{
|
24 |
+
$this->catalogTable = Mage::getSingleton("core/resource")->getTableName('catalog/product');
|
25 |
+
$this->productCategory = Mage::getSingleton("core/resource")->getTableName('catalog/category_product');
|
26 |
+
foreach ( $this->preDefineAttribute as $attrname => $attrvalue ) {
|
27 |
+
$attributeInfo = $this->getAttributeInfo ( $attrname, $attrvalue );
|
28 |
+
$this->cachedPreDefineAttribute [$attrname] = array (
|
29 |
+
'id' => $attributeInfo ['attribute_id'],
|
30 |
+
'option_value' => $attrvalue,
|
31 |
+
'table_name' => $attributeInfo ['table_name'],
|
32 |
+
'type' => $attributeInfo ['type']
|
33 |
+
);
|
34 |
+
}
|
35 |
+
|
36 |
+
$this->conn = $this->getDatabaseConnection ();
|
37 |
+
return $this;
|
38 |
+
}
|
39 |
+
public function getDatabaseConnection()
|
40 |
+
{
|
41 |
+
return Mage::getSingleton ( 'core/resource' )->getConnection ( 'core_write' );
|
42 |
+
}
|
43 |
+
public function getEntityTypeIdByCode()
|
44 |
+
{
|
45 |
+
return Mage::getModel ( 'eav/config' )->getEntityType ( 'catalog_product' )->getEntityTypeId ();
|
46 |
+
}
|
47 |
+
public function getAttributeCodeById($entity_type, $attribute_code)
|
48 |
+
{
|
49 |
+
return Mage::getModel ( 'eav/entity_attribute' )->loadByCode ( $entity_type, $attribute_code )->getAttributeId ();
|
50 |
+
}
|
51 |
+
public function getAttributeSetCodeById()
|
52 |
+
{
|
53 |
+
return Mage::getModel ( 'catalog/product' )->getDefaultAttributeSetId ();
|
54 |
+
}
|
55 |
+
|
56 |
+
/* Function will prepare the attribute information @return associative array */
|
57 |
+
public function getAttributeInfo($name, $value)
|
58 |
+
{
|
59 |
+
$attributeInfo = array ();
|
60 |
+
$attr = Mage::getModel('eav/config')->getAttribute($this->getEntityTypeIdByCode(),$name);
|
61 |
+
$attributeInfo ['attribute_id'] = $attr->getAttributeId ();
|
62 |
+
$attributeInfo ['table_name'] = $attr->getBackendTable ();
|
63 |
+
$attributeInfo ['type'] = $attr->getBackendType ();
|
64 |
+
if ($attr->getFrontendInput () == 'select') {
|
65 |
+
if ($attr->usesSource () && !in_array($name,array('status','visibility','tax_class_id'))) {
|
66 |
+
|
67 |
+
if($attr->getSource ()->getOptionId ( $value ))
|
68 |
+
{
|
69 |
+
$attributeInfo ['option_value'] = $attr->getSource ()->getOptionId ( $value );
|
70 |
+
}
|
71 |
+
else{
|
72 |
+
|
73 |
+
$attributeInfo ['option_value'] = $this->createAttributeOption($attr->getAttributeId (),$value);
|
74 |
+
}
|
75 |
+
} else{
|
76 |
+
$attributeInfo ['option_value'] = $value;
|
77 |
+
}
|
78 |
+
}else{
|
79 |
+
$attributeInfo ['option_value'] = $value;
|
80 |
+
}
|
81 |
+
return $attributeInfo;
|
82 |
+
}
|
83 |
+
|
84 |
+
|
85 |
+
protected function createAttributeOption($attributeId,$attributeValue)
|
86 |
+
{
|
87 |
+
$optionTable = Mage::getSingleton ( 'core/resource' )->getTableName('eav/attribute_option');
|
88 |
+
$optionValueTable = Mage::getSingleton ( 'core/resource' )->getTableName('eav/attribute_option_value');
|
89 |
+
$data = array(
|
90 |
+
'attribute_id' => $attributeId,
|
91 |
+
'sort_order' => 0,
|
92 |
+
);
|
93 |
+
$this->conn->insert($optionTable, $data);
|
94 |
+
$intOptionId = $this->conn->lastInsertId($optionTable);
|
95 |
+
$data = array(
|
96 |
+
'option_id' => $intOptionId,
|
97 |
+
'store_id' => 0,
|
98 |
+
'value' => $attributeValue,
|
99 |
+
);
|
100 |
+
$this->conn->insert($optionValueTable, $data);
|
101 |
+
return $intOptionId;
|
102 |
+
}
|
103 |
+
|
104 |
+
|
105 |
+
/* Function will insert data using Multi-insert in catalog attribute tables */
|
106 |
+
public function insertAttributeData($lastId, $data, $sku)
|
107 |
+
{
|
108 |
+
$insvalues = '';
|
109 |
+
$i = 1;
|
110 |
+
|
111 |
+
foreach ( $data as $key => $val ) {
|
112 |
+
$countVal = count ( $val );
|
113 |
+
if ($key == 'int') {
|
114 |
+
foreach ( $val as $value ) {
|
115 |
+
|
116 |
+
if ($i < $countVal)
|
117 |
+
$comma = ',';
|
118 |
+
else
|
119 |
+
$comma = '';
|
120 |
+
$insvalues .= "(" . $value ['entity_type_id'] . ',' . $value ['attribute_id'] . ',' . $value ['store_id'] . ',' . $value ['entity_id'] . ',' . $value ['value'] . ")" . $comma;
|
121 |
+
$i++;
|
122 |
+
}
|
123 |
+
$t = $this->catalogTable . '_int';
|
124 |
+
$i = 1;
|
125 |
+
$this->conn->query ( "INSERT INTO $t (entity_type_id,attribute_id,store_id,entity_id,value) VALUES " . $insvalues );
|
126 |
+
$insvalues = '';
|
127 |
+
}
|
128 |
+
|
129 |
+
if ($key == 'varchar') {
|
130 |
+
foreach ( $val as $value ) {
|
131 |
+
|
132 |
+
if ($i < $countVal)
|
133 |
+
$comma = ',';
|
134 |
+
else
|
135 |
+
$comma = '';
|
136 |
+
|
137 |
+
$insvalues .= "(" . $value ['entity_type_id'] . ',' . $value ['attribute_id'] . ',' . $value ['store_id'] . ',' . $value ['entity_id'] . ",'" . $value ['value'] . "')" . $comma;
|
138 |
+
$i++;
|
139 |
+
}
|
140 |
+
$t = $this->catalogTable . '_varchar';
|
141 |
+
$i = 1;
|
142 |
+
$this->conn->query ( "INSERT INTO $t (entity_type_id,attribute_id,store_id,entity_id,value) VALUES " . $insvalues );
|
143 |
+
$insvalues = '';
|
144 |
+
}
|
145 |
+
if ($key == 'datetime') {
|
146 |
+
foreach ( $val as $value ) {
|
147 |
+
|
148 |
+
if ($i < $countVal)
|
149 |
+
$comma = ',';
|
150 |
+
else
|
151 |
+
$comma = '';
|
152 |
+
|
153 |
+
$insvalues .= "(" . $value ['entity_type_id'] . ',' . $value ['attribute_id'] . ',' . $value ['store_id'] . ',' . $value ['entity_id'] . ",'" . $value ['value'] . "')" . $comma;
|
154 |
+
$i++;
|
155 |
+
}
|
156 |
+
$t = $this->catalogTable . '_datetime';
|
157 |
+
$i = 1;
|
158 |
+
$this->conn->query ( "INSERT INTO $t (entity_type_id,attribute_id,store_id,entity_id,value) VALUES " . $insvalues );
|
159 |
+
$insvalues = '';
|
160 |
+
}
|
161 |
+
|
162 |
+
if ($key == 'decimal') {
|
163 |
+
foreach ( $val as $value ) {
|
164 |
+
|
165 |
+
if ($i < $countVal)
|
166 |
+
$comma = ',';
|
167 |
+
else
|
168 |
+
$comma = '';
|
169 |
+
|
170 |
+
$insvalues .= "(" . $value ['entity_type_id'] . ',' . $value ['attribute_id'] . ',' . $value ['store_id'] . ',' . $value ['entity_id'] . ",'" . $value ['value'] . "')" . $comma;
|
171 |
+
|
172 |
+
$i++;
|
173 |
+
}
|
174 |
+
$t = $this->catalogTable . '_decimal';
|
175 |
+
$i = 1;
|
176 |
+
$this->conn->query ( "INSERT INTO $t (entity_type_id,attribute_id,store_id,entity_id,value) VALUES " . $insvalues );
|
177 |
+
$insvalues = '';
|
178 |
+
}
|
179 |
+
if ($key == 'text') {
|
180 |
+
foreach ( $val as $value ) {
|
181 |
+
if ($i < $countVal)
|
182 |
+
$comma = ',';
|
183 |
+
else
|
184 |
+
$comma = '';
|
185 |
+
|
186 |
+
$insvalues .= "(" . $value ['entity_type_id'] . ',' . $value ['attribute_id'] . ',' . $value ['store_id'] . ',' . $value ['entity_id'] . ",'" . $value ['value'] . "')" . $comma;
|
187 |
+
|
188 |
+
$i++;
|
189 |
+
}
|
190 |
+
$t = $this->catalogTable . '_text';
|
191 |
+
$i = 1;
|
192 |
+
$this->conn->query ( "INSERT INTO $t (entity_type_id,attribute_id,store_id,entity_id,value) VALUES " . $insvalues );
|
193 |
+
$insvalues = '';
|
194 |
+
}
|
195 |
+
}
|
196 |
+
}
|
197 |
+
|
198 |
+
protected function assignCategory($id,$lastId)
|
199 |
+
{
|
200 |
+
$arrCategory = array(
|
201 |
+
'category_id'=> $id,
|
202 |
+
'product_id'=> $lastId,
|
203 |
+
'position'=> 0
|
204 |
+
);
|
205 |
+
$this->conn->insert($this->productCategory,$arrCategory);
|
206 |
+
}
|
207 |
+
|
208 |
+
/* Function will insert the predefine array in the catalog attribute tables */
|
209 |
+
protected function insertPredefineAttribute($lastId, $sku)
|
210 |
+
{
|
211 |
+
$preAttribue = array();
|
212 |
+
$this->prepareAttributeInsertQuery ( $lastId, $val, $data ['sku'] );
|
213 |
+
foreach ( $this->preDefineAttribute as $name => $value ) {
|
214 |
+
$type = $this->prePopulatedAttribute ['attribute_detail'] [$sku] [$name] ['type'];
|
215 |
+
$preAttribue [$type] [] = $this->prepareAttributeInsertQuery ( $lastId, array (
|
216 |
+
'name' => $name,
|
217 |
+
'value' => $value
|
218 |
+
), $sku );
|
219 |
+
}
|
220 |
+
$this->insertAttributeData ( $lastId, $preAttribue, $sku );
|
221 |
+
}
|
222 |
+
|
223 |
+
/* function prepare the attribute data array for multi-insert */
|
224 |
+
protected function prepareAttributeInsertQuery($lastId, $data, $sku)
|
225 |
+
{
|
226 |
+
$attributeId = $this->prePopulatedAttribute ['attribute_detail'] [$sku] [$data ['name']] ['id'];
|
227 |
+
$attrValue = $this->prePopulatedAttribute ['attribute_detail'] [$sku] [$data ['name']] ['option_value'];
|
228 |
+
$type = $this->prePopulatedAttribute ['attribute_detail'] [$sku] [$data ['name']] ['type'];
|
229 |
+
$entityTypeId = $this->prePopulatedAttribute ['entity_type_id'];
|
230 |
+
$attribute = array (
|
231 |
+
|
232 |
+
'entity_type_id' => $entityTypeId,
|
233 |
+
'attribute_id' => $attributeId,
|
234 |
+
'store_id' => 0,
|
235 |
+
'entity_id' => $lastId,
|
236 |
+
'value' => $attrValue
|
237 |
+
);
|
238 |
+
return $attribute;
|
239 |
+
}
|
240 |
+
|
241 |
+
/* Function will collect all the attribute values which will minimize the database call */
|
242 |
+
protected function initilatizeAttributeValue($productAttributeArray)
|
243 |
+
{
|
244 |
+
$arrAttribute = array ();
|
245 |
+
$arrAttribute ['attribute_set_id'] = $this->getAttributeSetCodeById ();
|
246 |
+
$arrAttribute ['entity_type_id'] = $this->getEntityTypeIdByCode ();
|
247 |
+
$arrAttribute ['attribute_detail'] = $this->prepareAttributeDetail ( $productAttributeArray );
|
248 |
+
$this->prePopulatedAttribute = $arrAttribute;
|
249 |
+
return $this->prePopulatedAttribute;
|
250 |
+
}
|
251 |
+
|
252 |
+
protected function prepareAttributeDetail($attributeData)
|
253 |
+
{
|
254 |
+
$attributeDetails = array ();
|
255 |
+
$tempvar = array ();
|
256 |
+
foreach ( $attributeData as $name ) {
|
257 |
+
foreach ( $name ['attributeData'] as $key => $val ) {
|
258 |
+
$attributeInfo = $this->getAttributeInfo ( $val ['name'], $val ['value'] );
|
259 |
+
$tempvar [$name ['sku']] [$val ['name']] = array (
|
260 |
+
'id' => $attributeInfo ['attribute_id'],
|
261 |
+
'option_value' => $attributeInfo ['option_value'],
|
262 |
+
'table_name' => $attributeInfo ['table_name'],
|
263 |
+
'type' => $attributeInfo ['type']
|
264 |
+
);
|
265 |
+
}
|
266 |
+
$attributeDetails [$name ['sku']] = array_merge ( $this->cachedPreDefineAttribute, $tempvar [$name ['sku']] );
|
267 |
+
}
|
268 |
+
return $attributeDetails;
|
269 |
+
}
|
270 |
+
|
271 |
+
/* Execution will start from here which will process data */
|
272 |
+
public function processData($restArray)
|
273 |
+
{
|
274 |
+
$result = array();
|
275 |
+
$productAttributeArray = $this->_processRequestArray ( $restArray );
|
276 |
+
|
277 |
+
foreach ( $productAttributeArray as $product => $data ) {
|
278 |
+
//validate REST API request
|
279 |
+
$attributeValidation = $this->validateAttibute($data);
|
280 |
+
if(!$attributeValidation['is_validate'] || $attributeValidation['data_invalid']){
|
281 |
+
if($attributeValidation['data_invalid'] && $attributeValidation['error'])
|
282 |
+
$comma = ',';
|
283 |
+
$result[$data ['sku']] = array('Sku Cannot Import With Attribute : '.implode(',',$attributeValidation['error']).$comma.implode(',',$attributeValidation['data_invalid']));
|
284 |
+
continue;
|
285 |
+
}
|
286 |
+
$checkSku = trim($data ['sku']);
|
287 |
+
if(empty($checkSku)){
|
288 |
+
$result[$data ['sku']] = array('Sku Can Not Be Empty');
|
289 |
+
continue;
|
290 |
+
}
|
291 |
+
|
292 |
+
if(strtolower($data['extra']['action']) != 'a' && !$this->isSkuExsist($data ['sku']) ){
|
293 |
+
$result[$data ['sku']] = array('Sku Not Exists Please Check Action Type');
|
294 |
+
}
|
295 |
+
|
296 |
+
switch (strtolower($data['extra']['action'])) {
|
297 |
+
case 'a':
|
298 |
+
if(!$this->isSkuExsist($data ['sku']))
|
299 |
+
{
|
300 |
+
if (is_array ($productAttributeArray )) {
|
301 |
+
$this->initilatizeAttributeValue ( $productAttributeArray );
|
302 |
+
} else {
|
303 |
+
return false;
|
304 |
+
}
|
305 |
+
$result[$data ['sku']] = ($this->addProduct ( $data )) ? array('Product Added Successfully'):array('Error In Creating EntityID for '.$data ['sku']);
|
306 |
+
}else
|
307 |
+
$result[$data ['sku']] = array('Sku Already Exists Please Check Action Type');
|
308 |
+
break;
|
309 |
+
|
310 |
+
case 'u':
|
311 |
+
if($this->isSkuExsist($data ['sku']))
|
312 |
+
$result[$data ['sku']] = ($this->updateProduct ( $data ['sku'], $data ['attributeData'])) ? array('Product Updated Successfully'):array('Unspecified Error While Updating Product');
|
313 |
+
else
|
314 |
+
$result[$data ['sku']] = array('Sku does not Exists Please Check Action Type');
|
315 |
+
break;
|
316 |
+
|
317 |
+
case 'd':
|
318 |
+
if($this->isSkuExsist($data ['sku']))
|
319 |
+
$result[$data ['sku']] = ($this->deleteProduct ( $data ['sku'])) ? array('Product Deleted Successfully'):array('Unspecified Error While Deleting Product');
|
320 |
+
else
|
321 |
+
$result[$data ['sku']] = array('Sku does not Exists Please Check Action Type');
|
322 |
+
break;
|
323 |
+
|
324 |
+
default:
|
325 |
+
$result[$data ['sku']] = array('Can Not Import SKU Action Type Not Supported');
|
326 |
+
}
|
327 |
+
}
|
328 |
+
return $result;
|
329 |
+
}
|
330 |
+
|
331 |
+
protected function validateAttibute($data)
|
332 |
+
{
|
333 |
+
$validate = true;
|
334 |
+
foreach($data['attributeData'] as $attrDetail)
|
335 |
+
{
|
336 |
+
$attribute[] = $attrDetail['name'];
|
337 |
+
switch (strtolower($attrDetail['name'])) {
|
338 |
+
case 'weight':
|
339 |
+
if(!is_numeric($attrDetail['value']) || $attrDetail['value'] < 0){
|
340 |
+
if($attrDetail['value'] ==""){
|
341 |
+
$validate = true;
|
342 |
+
}else{
|
343 |
+
$data_invalid[] = 'weight';
|
344 |
+
$validate = false;
|
345 |
+
}
|
346 |
+
}
|
347 |
+
break;
|
348 |
+
case 'price':
|
349 |
+
if(!is_numeric($attrDetail['value']) || $attrDetail['value'] < 0){
|
350 |
+
|
351 |
+
if($attrDetail['value'] ==""){
|
352 |
+
$validate = true;
|
353 |
+
}else{
|
354 |
+
$data_invalid[] = 'price';
|
355 |
+
$validate = false;
|
356 |
+
}
|
357 |
+
|
358 |
+
}
|
359 |
+
break;
|
360 |
+
case 'msrp':
|
361 |
+
if(!is_numeric($attrDetail['value']) || $attrDetail['value'] < 0){
|
362 |
+
|
363 |
+
if($attrDetail['value'] ==""){
|
364 |
+
$validate = true;
|
365 |
+
}else{
|
366 |
+
$data_invalid[] = 'msrp';
|
367 |
+
$validate = false;
|
368 |
+
}
|
369 |
+
}
|
370 |
+
break;
|
371 |
+
}
|
372 |
+
}
|
373 |
+
$attribute[] = key($data['extra']);
|
374 |
+
$uniqueArray = array_diff ($attribute,$this->allowedAttribute);
|
375 |
+
|
376 |
+
if(count($uniqueArray) > 0){
|
377 |
+
$validate = false;
|
378 |
+
}
|
379 |
+
return array('is_validate'=>$validate,'error'=>$uniqueArray, 'data_invalid'=>$data_invalid);
|
380 |
+
}
|
381 |
+
protected function addProduct($data)
|
382 |
+
{
|
383 |
+
$arrMultiInsertQuery = array ();
|
384 |
+
$lastId = $this->generateProductId ( $this->catalogTable, $data ['sku'] );
|
385 |
+
if ($lastId && $lastId > 0) {
|
386 |
+
foreach ( $data ['attributeData'] as $val ) {
|
387 |
+
$type = $this->prePopulatedAttribute ['attribute_detail'] [$data ['sku']] [$val ['name']] ['type'];
|
388 |
+
$arrMultiInsertQuery [$type] [] = $this->prepareAttributeInsertQuery ( $lastId, $val, $data ['sku'] );
|
389 |
+
}
|
390 |
+
$this->insertAttributeData ( $lastId, $arrMultiInsertQuery, $data ['sku'] );
|
391 |
+
|
392 |
+
$this->insertPredefineAttribute ( $lastId, $data ['sku'] );
|
393 |
+
$categoryId = (int) Mage::getStoreConfig('amosoft_sourcing/product/category');
|
394 |
+
if($categoryId)
|
395 |
+
$this->assignCategory( $categoryId,$lastId);
|
396 |
+
$this->updateProductInventory($lastId);
|
397 |
+
|
398 |
+
$isSuccess = true;
|
399 |
+
try {
|
400 |
+
// Your db manipulations here
|
401 |
+
$this->conn->commit ();
|
402 |
+
} catch ( Exception $e ) {
|
403 |
+
Mage::logException($e);
|
404 |
+
$this->conn->rollBack ();
|
405 |
+
}
|
406 |
+
} else {
|
407 |
+
$this->conn->rollBack ();
|
408 |
+
$isSuccess = false;
|
409 |
+
}
|
410 |
+
|
411 |
+
return $isSuccess;
|
412 |
+
}
|
413 |
+
|
414 |
+
/* Before insert check for SKU exsist @return boolean */
|
415 |
+
public function isSkuExsist($sku)
|
416 |
+
{
|
417 |
+
$productCollection = Mage::getModel ( 'catalog/product' );
|
418 |
+
|
419 |
+
if ($productCollection->getIdBySku ( $sku ))
|
420 |
+
return true;
|
421 |
+
else
|
422 |
+
return false;
|
423 |
+
}
|
424 |
+
|
425 |
+
public function updateProductInventory($productId)
|
426 |
+
{
|
427 |
+
|
428 |
+
$tableNameStatus = Mage::getSingleton ( 'core/resource' )->getTableName ( 'cataloginventory/stock_status' );
|
429 |
+
$tableNameItem = Mage::getSingleton ( 'core/resource' )->getTableName ( 'cataloginventory/stock_item' );
|
430 |
+
$tableNameItemIdx = Mage::getSingleton ( 'core/resource' )->getTableName ( 'cataloginventory/stock_status_indexer_idx' );
|
431 |
+
if($productId){
|
432 |
+
$insertStatus = 'INSERT INTO '.$tableNameStatus.'(product_id,website_id,stock_id,qty,stock_status) VALUES ('.$productId.',1,1,0,0)';
|
433 |
+
$insertItem = 'INSERT INTO '.$tableNameItem.'(product_id,stock_id,qty) VALUES ('.$productId.',1,0)';
|
434 |
+
$insertItemIdx = 'INSERT INTO '.$tableNameItemIdx.'(product_id,website_id,stock_id,qty,stock_status) VALUES ('.$productId.',1,1,0,0)';
|
435 |
+
$this->conn->query ($insertStatus);
|
436 |
+
$this->conn->query ($insertItem);
|
437 |
+
$this->conn->query ($insertItemIdx);
|
438 |
+
}
|
439 |
+
}
|
440 |
+
|
441 |
+
/* If SKU exsist than it will simply udpate product data using magento standard way */
|
442 |
+
public function updateProduct($sku, $attributes)
|
443 |
+
{
|
444 |
+
$dataAttribute = array ();
|
445 |
+
$sucees = false;
|
446 |
+
$productObject = Mage::getModel ( 'catalog/product' );
|
447 |
+
$product = $productObject->loadByAttribute ( 'sku', $sku );
|
448 |
+
foreach ( $attributes as $name => $value ) {
|
449 |
+
if($value ['name'] == 'manufacturer')
|
450 |
+
$dataAttribute[$value ['name']] = $this->checkOptionValueExists($value ['name'], $value ['value']);
|
451 |
+
else
|
452 |
+
$dataAttribute[$value ['name']] = $value ['value'];
|
453 |
+
if($value ['name'] == 'weight' && $value ['value'] == "")
|
454 |
+
unset($dataAttribute[$value ['name']]);
|
455 |
+
if($value ['name'] == 'price' && $value ['value'] == "")
|
456 |
+
unset($dataAttribute[$value ['name']]);
|
457 |
+
if($value ['name'] == 'msrp' && $value ['value'] == "")
|
458 |
+
unset($dataAttribute[$value ['name']]);
|
459 |
+
}
|
460 |
+
$product->addData($dataAttribute);
|
461 |
+
try {
|
462 |
+
$product->save ();
|
463 |
+
$sucees = true;
|
464 |
+
} catch ( Exception $e ) {
|
465 |
+
Mage::logException($e);
|
466 |
+
echo 'Exception occurred ' . $e->getMessage ();
|
467 |
+
}
|
468 |
+
return $sucees;
|
469 |
+
}
|
470 |
+
|
471 |
+
protected function checkOptionValueExists($attribute,$value)
|
472 |
+
{
|
473 |
+
$optValue = '';
|
474 |
+
if(!array_key_exists($attribute,$this->preDefineAttribute)){
|
475 |
+
$attr = Mage::getSingleton('eav/config')->getAttribute($this->getEntityTypeIdByCode(),$attribute);
|
476 |
+
if ($attr->getFrontendInput () == 'select')
|
477 |
+
$optValue = ($attr->getSource()->getOptionId($value)) ? $attr->getSource()->getOptionId($value) : $this->createAttributeOption($attr->getAttributeId (),$value);
|
478 |
+
}
|
479 |
+
return $optValue;
|
480 |
+
}
|
481 |
+
|
482 |
+
public function deleteProduct($sku)
|
483 |
+
{
|
484 |
+
$sucees = false;
|
485 |
+
$productObject = Mage::getModel ( 'catalog/product' );
|
486 |
+
$product = $productObject->loadByAttribute ( 'sku', $sku );
|
487 |
+
|
488 |
+
try {
|
489 |
+
$product->delete ();
|
490 |
+
$sucees = true;
|
491 |
+
} catch ( Exception $e ) {
|
492 |
+
Mage::logException($e);
|
493 |
+
echo 'Exception occurred ' . $e->getMessage ();
|
494 |
+
}
|
495 |
+
return $sucees;
|
496 |
+
}
|
497 |
+
/* function insert data in catalog_prodcut_entity @return entity_id */
|
498 |
+
public function generateProductId($tableName, $data)
|
499 |
+
{
|
500 |
+
$entityTypeId = $this->prePopulatedAttribute ['entity_type_id'];
|
501 |
+
$attributeSetId = $this->prePopulatedAttribute ['attribute_set_id'];
|
502 |
+
$defaultProductArr = array (
|
503 |
+
|
504 |
+
'entity_id' => '',
|
505 |
+
'entity_type_id' => $entityTypeId,
|
506 |
+
'attribute_set_id' => $attributeSetId,
|
507 |
+
'type_id' => 'simple',
|
508 |
+
'sku' => $data,
|
509 |
+
'has_options' => 0,
|
510 |
+
'required_options' => 0,
|
511 |
+
'created_at' => now (),
|
512 |
+
'updated_at' => now ()
|
513 |
+
);
|
514 |
+
$this->conn->beginTransaction ();
|
515 |
+
$this->conn->insert ( $tableName, $defaultProductArr );
|
516 |
+
return $this->conn->lastInsertId ();
|
517 |
+
}
|
518 |
+
|
519 |
+
|
520 |
+
protected function _processRequestArray($restResquest)
|
521 |
+
{
|
522 |
+
$arrData = array ();
|
523 |
+
if (! array_key_exists ( 'sku', $restResquest ['productdata'] )) {
|
524 |
+
$arrData = $this->processMultiRequest ( $restResquest ['productdata'] );
|
525 |
+
} else {
|
526 |
+
$arrData = $this->processSingleRequest ( $restResquest ['productdata'] );
|
527 |
+
}
|
528 |
+
return $arrData;
|
529 |
+
}
|
530 |
+
|
531 |
+
protected function processMultiRequest($restRequest)
|
532 |
+
{
|
533 |
+
$arrMultiData = array ();
|
534 |
+
foreach ( $restRequest as $keys => $data ) {
|
535 |
+
$arrMultiData [$keys] ['sku'] = $data ['sku'];
|
536 |
+
foreach ( $data ['attributes'] as $key => $value ) {
|
537 |
+
if(!array_key_exists($key,$this->preDefineAttribute) ){
|
538 |
+
switch (strtolower($key)) {
|
539 |
+
case 'quantity':
|
540 |
+
$arrMultiData [$keys] ['extra'] [trim(strtolower($key))] = trim($value);
|
541 |
+
break;
|
542 |
+
case 'action':
|
543 |
+
$arrMultiData [$keys] ['extra'] [trim(strtolower($key))] = trim($value);
|
544 |
+
|
545 |
+
break;
|
546 |
+
default:
|
547 |
+
$arrMultiData [$keys] ['attributeData'] [] = array (
|
548 |
+
'name' => trim(strtolower($key)),
|
549 |
+
'value' => trim($value)
|
550 |
+
);
|
551 |
+
break;
|
552 |
+
}
|
553 |
+
}
|
554 |
+
}
|
555 |
+
}
|
556 |
+
return $arrMultiData;
|
557 |
+
}
|
558 |
+
|
559 |
+
protected function processSingleRequest($restRequest) {
|
560 |
+
$arrSingleData = array ();
|
561 |
+
$test = array ();
|
562 |
+
foreach ( $restRequest as $key => $data ) {
|
563 |
+
if (is_array ( $data )) {
|
564 |
+
foreach ( $data as $name => $value ) {
|
565 |
+
if(!array_key_exists($name,$this->preDefineAttribute) ){
|
566 |
+
switch (strtolower($name)) {
|
567 |
+
case 'quantity':
|
568 |
+
$arrSingleData ['extra'] [] = array (
|
569 |
+
'name' => trim(strtolower($name)),
|
570 |
+
'value' => trim($value)
|
571 |
+
);
|
572 |
+
break;
|
573 |
+
case 'action':
|
574 |
+
$arrSingleData ['extra'] [] = array (
|
575 |
+
'name' => trim(strtolower($name)),
|
576 |
+
'value' => trim($value)
|
577 |
+
);
|
578 |
+
break;
|
579 |
+
default:
|
580 |
+
$arrSingleData ['attributeData'] [] = array (
|
581 |
+
'name' => trim(strtolower($name)),
|
582 |
+
'value' => trim($value)
|
583 |
+
);
|
584 |
+
break;
|
585 |
+
}
|
586 |
+
}
|
587 |
+
}
|
588 |
+
} else {
|
589 |
+
$arrSingleData [$key] = $data;
|
590 |
+
}
|
591 |
+
}
|
592 |
+
return $test [] = array (
|
593 |
+
$arrSingleData
|
594 |
+
);
|
595 |
+
}
|
596 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Ranking.php
ADDED
@@ -0,0 +1,64 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Ranking extends Mage_Core_Model_Abstract
|
11 |
+
{
|
12 |
+
protected function _construct(){
|
13 |
+
|
14 |
+
$this->_init("dropship/ranking");
|
15 |
+
}
|
16 |
+
public function rearrangeRank($value, $rank){
|
17 |
+
if($rank > 0 && $rank < $value->getRanking() ){
|
18 |
+
$rankData = Mage::getModel('dropship/ranking')->load($value->getId());
|
19 |
+
$rankData->setRanking($rank);
|
20 |
+
$rankData->save();
|
21 |
+
$rank++;
|
22 |
+
}
|
23 |
+
}
|
24 |
+
public function getVendorCollection($type)
|
25 |
+
{
|
26 |
+
$orderBy = ($type == 'yes') ? 'ranking asc':'id asc';
|
27 |
+
$vendorCollection = $this->getCollection()->addFieldToFilter('is_dropship',$type)->addFieldToFilter('is_active','yes');
|
28 |
+
$vendorCollection->getSelect()->order($orderBy);
|
29 |
+
$arrVendor = array();
|
30 |
+
if($vendorCollection->count() > 0 ){
|
31 |
+
foreach ($vendorCollection as $vendor) {
|
32 |
+
$arrVendor[] = array('name'=>$vendor->getAmosoftVendorName(),'code'=>$vendor->getAmosoftVendorCode(),'link'=>is_null($vendor->getLinkingAttribute()) ? '' : $vendor->getLinkingAttribute());
|
33 |
+
}
|
34 |
+
}
|
35 |
+
return $arrVendor;
|
36 |
+
}
|
37 |
+
|
38 |
+
public function addPreDefineVendorList(){
|
39 |
+
|
40 |
+
$preDefinedArr = array(array('MagVendID1','Supplier 1',1),array('MagVendID2','Supplier 2',2),array('MagVendID3','Supplier 3',3),array('MagVendID4','Supplier 4',4),array('MagVendID5','Supplier 5',5),array('MagVendID6','Supplier 6',6),array('MagVendID7','Supplier 7',7),array('MagVendID8','Supplier 8',8),array('MagVendID9','Supplier 9',9),array('MagVendID10','Supplier 10',10),array('MagVendID11','Supplier 11',11),array('MagVendID12','Supplier 12',12),array('MagVendID13','Supplier 13',13),array('MagVendID14','Supplier 14',14),array('MagVendID15','Supplier 15',15));
|
41 |
+
|
42 |
+
$arrRequired = array();
|
43 |
+
foreach ($preDefinedArr as $data){
|
44 |
+
$arrRequired[] = array('amosoft_vendor_code'=>$data[0] ,'amosoft_vendor_name'=>$data[1],'ranking'=>$data[2]);
|
45 |
+
}
|
46 |
+
foreach($arrRequired as $value){
|
47 |
+
$this->saveVendorDetails($value);
|
48 |
+
}
|
49 |
+
}
|
50 |
+
|
51 |
+
protected function saveVendorDetails($value){
|
52 |
+
$vendorDetail = Mage::getModel('dropship/ranking')->load($value['amosoft_vendor_code'],'amosoft_vendor_code');
|
53 |
+
if(!$vendorDetail->getId()){
|
54 |
+
$vendorDetail->setAmosoftVendorCode($value['amosoft_vendor_code']);
|
55 |
+
$vendorDetail->setAmosoftVendorName($value['amosoft_vendor_name']);
|
56 |
+
$vendorDetail->setRanking($value['ranking']);
|
57 |
+
$vendorDetail->setIsDropship('no');
|
58 |
+
$vendorDetail->setUpdatedAt(now());
|
59 |
+
$vendorDetail->setCreatedAt(now());
|
60 |
+
$vendorDetail->save();
|
61 |
+
}
|
62 |
+
}
|
63 |
+
}
|
64 |
+
|
app/code/local/Amosoft/Dropship/Model/Rankinglog.php
ADDED
@@ -0,0 +1,18 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Rankinglog extends Mage_Core_Model_Abstract
|
11 |
+
{
|
12 |
+
protected function _construct(){
|
13 |
+
|
14 |
+
$this->_init("dropship/Rankinglog");
|
15 |
+
}
|
16 |
+
|
17 |
+
}
|
18 |
+
|
app/code/local/Amosoft/Dropship/Model/Resource/Inventory.php
ADDED
@@ -0,0 +1,16 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Resource_Inventory extends Mage_Core_Model_Mysql4_Abstract
|
11 |
+
{
|
12 |
+
protected function _construct()
|
13 |
+
{
|
14 |
+
$this->_init("dropship/inventory", "id");
|
15 |
+
}
|
16 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Resource/Inventory/Collection.php
ADDED
@@ -0,0 +1,20 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Resource_Inventory_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
11 |
+
{
|
12 |
+
|
13 |
+
public function _construct(){
|
14 |
+
$this->_init("dropship/inventory");
|
15 |
+
}
|
16 |
+
|
17 |
+
|
18 |
+
|
19 |
+
}
|
20 |
+
|
app/code/local/Amosoft/Dropship/Model/Resource/Inventorylog.php
ADDED
@@ -0,0 +1,16 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Resource_Inventorylog extends Mage_Core_Model_Mysql4_Abstract
|
11 |
+
{
|
12 |
+
protected function _construct()
|
13 |
+
{
|
14 |
+
$this->_init("dropship/inventorylog", "id");
|
15 |
+
}
|
16 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Resource/Inventorylog/Collection.php
ADDED
@@ -0,0 +1,20 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Resource_Inventorylog_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
11 |
+
{
|
12 |
+
|
13 |
+
public function _construct(){
|
14 |
+
$this->_init("dropship/inventorylog");
|
15 |
+
}
|
16 |
+
|
17 |
+
|
18 |
+
|
19 |
+
}
|
20 |
+
|
app/code/local/Amosoft/Dropship/Model/Resource/Orderitems.php
ADDED
@@ -0,0 +1,58 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Resource_Orderitems extends Mage_Core_Model_Mysql4_Abstract
|
11 |
+
{
|
12 |
+
protected function _construct()
|
13 |
+
{
|
14 |
+
$this->_init("dropship/orderitems", "id");
|
15 |
+
}
|
16 |
+
public function saveOrderItems($itemData,$orderObj,$crontype)
|
17 |
+
{
|
18 |
+
try {
|
19 |
+
$adapter = $this->_getWriteAdapter();
|
20 |
+
$adapter->beginTransaction();
|
21 |
+
foreach ($itemData as $key => $item) {
|
22 |
+
$condition = array(
|
23 |
+
'item_id = ?' => (int) $key,
|
24 |
+
);
|
25 |
+
unset($item['updateInventory']);
|
26 |
+
unset($item['qtyInvoiced']);
|
27 |
+
$adapter->update($this->getMainTable(),$item,$condition);
|
28 |
+
}
|
29 |
+
$adapter->commit();
|
30 |
+
foreach ($itemData as $key => $item) {
|
31 |
+
if($item ['updateInventory'])
|
32 |
+
Mage::getModel ( 'dropship/orderitems' )->updateAmosoftVendorInvenory ( $item['amosoft_vendor_code'],$item['sku'], $item['qtyInvoiced']);
|
33 |
+
if ($item['amosoft_item_status'] == Amosoft_Dropship_Helper_Data::AMOSOFT_ITEM_STATUS_TRANSMITTING)
|
34 |
+
Mage::getModel('dropship/amosoft')->setupNotification();;
|
35 |
+
$this->saveOrderItemsComments($item,$orderObj);
|
36 |
+
}
|
37 |
+
} catch (Mage_Core_Exception $e) {
|
38 |
+
$adapter->rollBack();
|
39 |
+
throw $e;
|
40 |
+
} catch (Exception $e){
|
41 |
+
$adapter->rollBack();
|
42 |
+
Mage::logException($e);
|
43 |
+
Mage::helper('dropship')->genrateLog(0,null,null,'Section :Error In saving order item data: '.$e->getMessage().' for orderid : '.$orderObj->getEntityId());
|
44 |
+
Mage::getModel('dropship/ordersourcing')->sourcingCompleted($crontype);
|
45 |
+
}
|
46 |
+
}
|
47 |
+
|
48 |
+
protected function saveOrderItemsComments($itemData,$orderObj){
|
49 |
+
try {
|
50 |
+
|
51 |
+
$orderObj->addStatusHistoryComment($itemData['sku'].': Item status changed to '.$itemData['amosoft_item_status']);
|
52 |
+
$orderObj->save();
|
53 |
+
} catch (Exception $e) {
|
54 |
+
throw $e;
|
55 |
+
}
|
56 |
+
|
57 |
+
}
|
58 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Resource/Orderitems/Collection.php
ADDED
@@ -0,0 +1,20 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Resource_Orderitems_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
11 |
+
{
|
12 |
+
|
13 |
+
public function _construct(){
|
14 |
+
$this->_init("dropship/orderitems");
|
15 |
+
}
|
16 |
+
|
17 |
+
|
18 |
+
|
19 |
+
}
|
20 |
+
|
app/code/local/Amosoft/Dropship/Model/Resource/Ordersourcing.php
ADDED
@@ -0,0 +1,52 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Resource_Ordersourcing extends Mage_Core_Model_Mysql4_Abstract
|
11 |
+
{
|
12 |
+
|
13 |
+
protected function _construct()
|
14 |
+
{
|
15 |
+
$this->_init("dropship/ordersourcing", "id");
|
16 |
+
}
|
17 |
+
|
18 |
+
public function saveConfig($path, $value, $scope = 'default', $scopeId = 0)
|
19 |
+
{
|
20 |
+
try {
|
21 |
+
|
22 |
+
$writeAdapter = $this->_getWriteAdapter();
|
23 |
+
$select = $writeAdapter->select()
|
24 |
+
->from( $this->getTable('core/config_data'))
|
25 |
+
->where('path = ?', $path)
|
26 |
+
->where('scope = ?', $scope)
|
27 |
+
->where('scope_id = ?', $scopeId);
|
28 |
+
$row = $writeAdapter->fetchRow($select);
|
29 |
+
|
30 |
+
$newData = array(
|
31 |
+
'scope' => $scope,
|
32 |
+
'scope_id' => $scopeId,
|
33 |
+
'path' => $path,
|
34 |
+
'value' => $value
|
35 |
+
);
|
36 |
+
$writeAdapter->beginTransaction();
|
37 |
+
if ($row) {
|
38 |
+
$whereCondition = array('config_id =?' => $row['config_id']);
|
39 |
+
$writeAdapter->update($this->getTable('core/config_data'), $newData, $whereCondition);
|
40 |
+
} else {
|
41 |
+
$writeAdapter->insert($this->getTable('core/config_data'), $newData);
|
42 |
+
}
|
43 |
+
$writeAdapter->commit();
|
44 |
+
} catch (Mage_Core_Exception $e) {
|
45 |
+
$writeAdapter->rollBack();
|
46 |
+
throw $e;
|
47 |
+
} catch (Exception $e){
|
48 |
+
$adapter->rollBack();
|
49 |
+
Mage::logException($e);
|
50 |
+
}
|
51 |
+
}
|
52 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Resource/Ordersourcing/Collection.php
ADDED
@@ -0,0 +1,20 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Resource_Ordersourcing_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
11 |
+
{
|
12 |
+
|
13 |
+
public function _construct(){
|
14 |
+
$this->_init("dropship/ordersourcing");
|
15 |
+
}
|
16 |
+
|
17 |
+
|
18 |
+
|
19 |
+
}
|
20 |
+
|
app/code/local/Amosoft/Dropship/Model/Resource/Ranking.php
ADDED
@@ -0,0 +1,16 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Resource_Ranking extends Mage_Core_Model_Mysql4_Abstract
|
11 |
+
{
|
12 |
+
protected function _construct()
|
13 |
+
{
|
14 |
+
$this->_init("dropship/ranking", "id");
|
15 |
+
}
|
16 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Resource/Ranking/Collection.php
ADDED
@@ -0,0 +1,20 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Resource_Ranking_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
11 |
+
{
|
12 |
+
|
13 |
+
public function _construct(){
|
14 |
+
$this->_init("dropship/ranking");
|
15 |
+
}
|
16 |
+
|
17 |
+
|
18 |
+
|
19 |
+
}
|
20 |
+
|
app/code/local/Amosoft/Dropship/Model/Resource/Rankinglog.php
ADDED
@@ -0,0 +1,16 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Resource_Rankinglog extends Mage_Core_Model_Mysql4_Abstract
|
11 |
+
{
|
12 |
+
protected function _construct()
|
13 |
+
{
|
14 |
+
$this->_init("dropship/rankinglog", "id");
|
15 |
+
}
|
16 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Resource/Rankinglog/Collection.php
ADDED
@@ -0,0 +1,20 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Resource_Rankinglog_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
11 |
+
{
|
12 |
+
|
13 |
+
public function _construct(){
|
14 |
+
$this->_init("dropship/rankinglog");
|
15 |
+
}
|
16 |
+
|
17 |
+
|
18 |
+
|
19 |
+
}
|
20 |
+
|
app/code/local/Amosoft/Dropship/Model/Resource/Setup.php
ADDED
@@ -0,0 +1,72 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Catalog entity setup
|
4 |
+
*
|
5 |
+
* @category Amosoft
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
* @author Cybage Magento Core Team
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Model_Resource_Setup extends Mage_Eav_Model_Entity_Setup
|
10 |
+
{
|
11 |
+
/**
|
12 |
+
* Prepare catalog attribute values to save
|
13 |
+
*
|
14 |
+
* @param array $attr
|
15 |
+
* @return array
|
16 |
+
*/
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Default entites and attributes
|
20 |
+
*
|
21 |
+
* @return array
|
22 |
+
*/
|
23 |
+
public function getDefaultEntities()
|
24 |
+
{
|
25 |
+
return array(
|
26 |
+
'catalog_product' => array(
|
27 |
+
'entity_model' => 'catalog/product',
|
28 |
+
'attribute_model' => 'catalog/resource_eav_attribute',
|
29 |
+
'table' => 'catalog/product',
|
30 |
+
'additional_attribute_table' => 'catalog/eav_attribute',
|
31 |
+
'entity_attribute_collection' => 'catalog/product_attribute_collection',
|
32 |
+
'attributes' => array(
|
33 |
+
|
34 |
+
'amosoft_manufacturer_product_number' => array(
|
35 |
+
'attribute_set' => 'Default',
|
36 |
+
'group' => 'Amosoft',
|
37 |
+
'type' => 'varchar',
|
38 |
+
'label' => 'LBManufacturerProductNumber',
|
39 |
+
'input' => 'text',
|
40 |
+
'required' => false,
|
41 |
+
'user_defined' => true,
|
42 |
+
'source' => '',
|
43 |
+
'sort_order' => 9,
|
44 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_WEBSITE,
|
45 |
+
'searchable' => false,
|
46 |
+
'used_in_product_listing' => false,
|
47 |
+
'visible' => true,
|
48 |
+
|
49 |
+
),
|
50 |
+
'amosoft_upc'=> array(
|
51 |
+
'attribute_set' => 'Default',
|
52 |
+
'group' => 'Amosoft',
|
53 |
+
'type' => 'varchar',
|
54 |
+
'label' => 'LBUPC',
|
55 |
+
'input' => 'text',
|
56 |
+
'required' => false,
|
57 |
+
'user_defined' => true,
|
58 |
+
'source' => '',
|
59 |
+
'sort_order' => 9,
|
60 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_WEBSITE,
|
61 |
+
'searchable' => false,
|
62 |
+
'used_in_product_listing' => false,
|
63 |
+
'visible' => true,
|
64 |
+
|
65 |
+
)
|
66 |
+
)
|
67 |
+
)
|
68 |
+
);
|
69 |
+
}
|
70 |
+
|
71 |
+
|
72 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Resource/Uploadvendor.php
ADDED
@@ -0,0 +1,16 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Resource_Uploadvendor extends Mage_Core_Model_Mysql4_Abstract
|
11 |
+
{
|
12 |
+
protected function _construct()
|
13 |
+
{
|
14 |
+
$this->_init("dropship/uploadvendor", "file_id");
|
15 |
+
}
|
16 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Resource/Uploadvendor/Collection.php
ADDED
@@ -0,0 +1,20 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Resource_Uploadvendor_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
11 |
+
{
|
12 |
+
|
13 |
+
public function _construct(){
|
14 |
+
$this->_init("dropship/uploadvendor");
|
15 |
+
}
|
16 |
+
|
17 |
+
|
18 |
+
|
19 |
+
}
|
20 |
+
|
app/code/local/Amosoft/Dropship/Model/Resource/Vendorimportlog.php
ADDED
@@ -0,0 +1,38 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Resource_Vendorimportlog
|
11 |
+
{
|
12 |
+
protected $_tableVendorImportLog ;
|
13 |
+
protected $conn;
|
14 |
+
|
15 |
+
public function getDatabaseConnection()
|
16 |
+
{
|
17 |
+
return Mage::getSingleton ( 'core/resource' )->getConnection ( 'core_write' );
|
18 |
+
}
|
19 |
+
|
20 |
+
public function insertLog($amosoft_vendor_code = null,$updated_by = null,$success = 0,$failure = 0,$ftp_error =null,$ftp_error_desc = null)
|
21 |
+
{
|
22 |
+
$this->_tableVendorImportLog = Mage::getSingleton ( 'core/resource' )->getTableName ( 'dropship/vendor_import_log' );
|
23 |
+
$this->conn = $this->getDatabaseConnection();
|
24 |
+
$this->conn->beginTransaction ();
|
25 |
+
$created_at = now();
|
26 |
+
$insert = 'INSERT INTO '.$this->_tableVendorImportLog.'(amosoft_vendor_code,updated_by,success,failure,ftp_error,ftp_error_desc,created_at) VALUES ("'.$amosoft_vendor_code.'","'.$updated_by.'",'.$success.','.$failure.',"'.$ftp_error.'","'.$ftp_error_desc.'","'.$created_at.'")';
|
27 |
+
$this->conn->query($insert);
|
28 |
+
try {
|
29 |
+
$this->conn->commit ();
|
30 |
+
} catch ( Exception $e ) {
|
31 |
+
$this->conn->rollBack ();
|
32 |
+
Mage::log($e->getMessage(), Zend_Log::ERR);
|
33 |
+
Mage::logException($e);
|
34 |
+
echo $e->getMessage();
|
35 |
+
|
36 |
+
}
|
37 |
+
}
|
38 |
+
}
|
app/code/local/Amosoft/Dropship/Model/System/Config/Backend/Oudatedinventory/Email.php
ADDED
@@ -0,0 +1,61 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
|
4 |
+
|
5 |
+
* Amosoft
|
6 |
+
*
|
7 |
+
* @category Local
|
8 |
+
* @package Amosoft_Dropship
|
9 |
+
*/
|
10 |
+
class Amosoft_Dropship_Model_System_Config_Backend_Oudatedinventory_Email extends Mage_Core_Model_Config_Data
|
11 |
+
{
|
12 |
+
const CRON_STRING_PATH = 'crontab/jobs/amosoft_oudated_product_inventory_cron/schedule/cron_expr';
|
13 |
+
const CRON_MODEL_PATH = 'crontab/jobs/amosoft_oudated_product_inventory_cron/run/model';
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Cron settings after save
|
17 |
+
*
|
18 |
+
* @return Mage_Adminhtml_Model_System_Config_Backend_Log_Cron
|
19 |
+
*/
|
20 |
+
protected function _afterSave()
|
21 |
+
{
|
22 |
+
$enabled = $this->getData('groups/inventory_notification/fields/enabled/value');
|
23 |
+
$time = $this->getData('groups/inventory_notification/fields/cron_setting/value');
|
24 |
+
$cronExprString = '';
|
25 |
+
if ($enabled) {
|
26 |
+
if($time[0] == -2){
|
27 |
+
$cronExprArray = array(
|
28 |
+
($time[1] == -1) ? '*' : '*/'.intval($time[1]),
|
29 |
+
'*',
|
30 |
+
'*', # Day of the Month
|
31 |
+
'*', # Month of the Year
|
32 |
+
'*', # Day of the Week
|
33 |
+
);
|
34 |
+
}else{
|
35 |
+
$cronExprArray = array(
|
36 |
+
($time[1] == -1) ? '*' : intval($time[1]), # Minute
|
37 |
+
($time[0] == -1) ? '*' : intval($time[0]), # Hour
|
38 |
+
'*', # Day of the Month
|
39 |
+
'*', # Month of the Year
|
40 |
+
'*', # Day of the Week
|
41 |
+
);
|
42 |
+
}
|
43 |
+
$cronExprString = join(' ', $cronExprArray);
|
44 |
+
}
|
45 |
+
try {
|
46 |
+
Mage::getModel('core/config_data')
|
47 |
+
->load(self::CRON_STRING_PATH, 'path')
|
48 |
+
->setValue($cronExprString)
|
49 |
+
->setPath(self::CRON_STRING_PATH)
|
50 |
+
->save();
|
51 |
+
|
52 |
+
Mage::getModel('core/config_data')
|
53 |
+
->load(self::CRON_MODEL_PATH, 'path')
|
54 |
+
->setValue((string) Mage::getConfig()->getNode(self::CRON_MODEL_PATH))
|
55 |
+
->setPath(self::CRON_MODEL_PATH)
|
56 |
+
->save();
|
57 |
+
} catch (Exception $e) {
|
58 |
+
Mage::throwException(Mage::helper('adminhtml')->__('Unable to save the cron expression.'));
|
59 |
+
}
|
60 |
+
}
|
61 |
+
}
|
app/code/local/Amosoft/Dropship/Model/System/Config/Backend/Sourcing/Cronbackorder.php
ADDED
@@ -0,0 +1,63 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
|
4 |
+
|
5 |
+
* Amosoft
|
6 |
+
*
|
7 |
+
* @category Local
|
8 |
+
* @package Amosoft_Dropship
|
9 |
+
*/
|
10 |
+
class Amosoft_Dropship_Model_System_Config_Backend_Sourcing_Cronbackorder extends Mage_Core_Model_Config_Data
|
11 |
+
{
|
12 |
+
const CRON_STRING_PATH = 'crontab/jobs/amosoft_backorder/schedule/cron_expr';
|
13 |
+
const CRON_MODEL_PATH = 'crontab/jobs/amosoft_backorder/run/model';
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Cron settings after save
|
17 |
+
*
|
18 |
+
* @return Mage_Adminhtml_Model_System_Config_Backend_Log_Cron
|
19 |
+
*/
|
20 |
+
protected function _afterSave()
|
21 |
+
{
|
22 |
+
$enabled = true;
|
23 |
+
$time = $this->getData('groups/cron_settings/fields/backorder_time/value');
|
24 |
+
$cronExprString = '';
|
25 |
+
if ($enabled) {
|
26 |
+
if($time[0] == -2){
|
27 |
+
$cronExprArray = array(
|
28 |
+
($time[1] == -1) ? '*' : '*/'.intval($time[1]),
|
29 |
+
'*',
|
30 |
+
'*', # Day of the Month
|
31 |
+
'*', # Month of the Year
|
32 |
+
'*', # Day of the Week
|
33 |
+
);
|
34 |
+
}else{
|
35 |
+
$cronExprArray = array(
|
36 |
+
($time[1] == -1) ? '*' : intval($time[1]), # Minute
|
37 |
+
($time[0] == -1) ? '*' : intval($time[0]), # Hour
|
38 |
+
'*', # Day of the Month
|
39 |
+
'*', # Month of the Year
|
40 |
+
'*', # Day of the Week
|
41 |
+
);
|
42 |
+
}
|
43 |
+
$cronExprString = join(' ', $cronExprArray);
|
44 |
+
try {
|
45 |
+
Mage::getModel('core/config_data')
|
46 |
+
->load(self::CRON_STRING_PATH, 'path')
|
47 |
+
->setValue($cronExprString)
|
48 |
+
->setPath(self::CRON_STRING_PATH)
|
49 |
+
->save();
|
50 |
+
|
51 |
+
Mage::getModel('core/config_data')
|
52 |
+
->load(self::CRON_MODEL_PATH, 'path')
|
53 |
+
->setValue((string) Mage::getConfig()->getNode(self::CRON_MODEL_PATH))
|
54 |
+
->setPath(self::CRON_MODEL_PATH)
|
55 |
+
->save();
|
56 |
+
Mage::log($cronExprString, null, 'cron.log');
|
57 |
+
}
|
58 |
+
catch (Exception $e) {
|
59 |
+
Mage::throwException(Mage::helper('adminhtml')->__('Unable to save the cron expression.'));
|
60 |
+
}
|
61 |
+
}
|
62 |
+
}
|
63 |
+
}
|
app/code/local/Amosoft/Dropship/Model/System/Config/Backend/Sourcing/Cronsourcing.php
ADDED
@@ -0,0 +1,61 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
|
4 |
+
|
5 |
+
* Amosoft
|
6 |
+
*
|
7 |
+
* @category Local
|
8 |
+
* @package Amosoft_Dropship
|
9 |
+
*/
|
10 |
+
class Amosoft_Dropship_Model_System_Config_Backend_Sourcing_Cronsourcing extends Mage_Core_Model_Config_Data
|
11 |
+
{
|
12 |
+
const CRON_STRING_PATH = 'crontab/jobs/amosoft_dropship/schedule/cron_expr';
|
13 |
+
const CRON_MODEL_PATH = 'crontab/jobs/amosoft_dropship/run/model';
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Cron settings after save
|
17 |
+
*
|
18 |
+
* @return Mage_Adminhtml_Model_System_Config_Backend_Log_Cron
|
19 |
+
*/
|
20 |
+
protected function _afterSave()
|
21 |
+
{
|
22 |
+
$enabled = true;
|
23 |
+
$time = $this->getData('groups/cron_settings/fields/sourcing_time/value');
|
24 |
+
$cronExprString = '';
|
25 |
+
if ($enabled) {
|
26 |
+
if($time[0] == -2){
|
27 |
+
$cronExprArray = array(
|
28 |
+
($time[1] == -1) ? '*' : '*/'.intval($time[1]),
|
29 |
+
'*',
|
30 |
+
'*', # Day of the Month
|
31 |
+
'*', # Month of the Year
|
32 |
+
'*', # Day of the Week
|
33 |
+
);
|
34 |
+
}else{
|
35 |
+
$cronExprArray = array(
|
36 |
+
($time[1] == -1) ? '*' : intval($time[1]), # Minute
|
37 |
+
($time[0] == -1) ? '*' : intval($time[0]), # Hour
|
38 |
+
'*', # Day of the Month
|
39 |
+
'*', # Month of the Year
|
40 |
+
'*', # Day of the Week
|
41 |
+
);
|
42 |
+
}
|
43 |
+
$cronExprString = join(' ', $cronExprArray);
|
44 |
+
}
|
45 |
+
try {
|
46 |
+
Mage::getModel('core/config_data')
|
47 |
+
->load(self::CRON_STRING_PATH, 'path')
|
48 |
+
->setValue($cronExprString)
|
49 |
+
->setPath(self::CRON_STRING_PATH)
|
50 |
+
->save();
|
51 |
+
|
52 |
+
Mage::getModel('core/config_data')
|
53 |
+
->load(self::CRON_MODEL_PATH, 'path')
|
54 |
+
->setValue((string) Mage::getConfig()->getNode(self::CRON_MODEL_PATH))
|
55 |
+
->setPath(self::CRON_MODEL_PATH)
|
56 |
+
->save();
|
57 |
+
} catch (Exception $e) {
|
58 |
+
Mage::throwException(Mage::helper('adminhtml')->__('Unable to save the cron expression.'));
|
59 |
+
}
|
60 |
+
}
|
61 |
+
}
|
app/code/local/Amosoft/Dropship/Model/System/Config/Backend/Uploadvendor/Cron.php
ADDED
@@ -0,0 +1,61 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
|
4 |
+
|
5 |
+
* Amosoft
|
6 |
+
*
|
7 |
+
* @category Local
|
8 |
+
* @package Amosoft_Dropship
|
9 |
+
*/
|
10 |
+
class Amosoft_Dropship_Model_System_Config_Backend_Uploadvendor_Cron extends Mage_Core_Model_Config_Data
|
11 |
+
{
|
12 |
+
const CRON_STRING_PATH = 'crontab/jobs/amosoft_uploadvendor/schedule/cron_expr';
|
13 |
+
const CRON_MODEL_PATH = 'crontab/jobs/amosoft_uploadvendor/run/model';
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Cron settings after save
|
17 |
+
*
|
18 |
+
* @return Mage_Adminhtml_Model_System_Config_Backend_Log_Cron
|
19 |
+
*/
|
20 |
+
protected function _afterSave()
|
21 |
+
{
|
22 |
+
$enabled = $this->getData('groups/cron_settings_upload/fields/enabled/value');
|
23 |
+
$time = $this->getData('groups/cron_settings_upload/fields/time/value');
|
24 |
+
$cronExprString = '';
|
25 |
+
if ($enabled) {
|
26 |
+
if($time[0] == -2){
|
27 |
+
$cronExprArray = array(
|
28 |
+
($time[1] == -1) ? '*' : '*/'.intval($time[1]),
|
29 |
+
'*',
|
30 |
+
'*', # Day of the Month
|
31 |
+
'*', # Month of the Year
|
32 |
+
'*', # Day of the Week
|
33 |
+
);
|
34 |
+
}else{
|
35 |
+
$cronExprArray = array(
|
36 |
+
($time[1] == -1) ? '*' : intval($time[1]), # Minute
|
37 |
+
($time[0] == -1) ? '*' : intval($time[0]), # Hour
|
38 |
+
'*', # Day of the Month
|
39 |
+
'*', # Month of the Year
|
40 |
+
'*', # Day of the Week
|
41 |
+
);
|
42 |
+
}
|
43 |
+
$cronExprString = join(' ', $cronExprArray);
|
44 |
+
}
|
45 |
+
try {
|
46 |
+
Mage::getModel('core/config_data')
|
47 |
+
->load(self::CRON_STRING_PATH, 'path')
|
48 |
+
->setValue($cronExprString)
|
49 |
+
->setPath(self::CRON_STRING_PATH)
|
50 |
+
->save();
|
51 |
+
|
52 |
+
Mage::getModel('core/config_data')
|
53 |
+
->load(self::CRON_MODEL_PATH, 'path')
|
54 |
+
->setValue((string) Mage::getConfig()->getNode(self::CRON_MODEL_PATH))
|
55 |
+
->setPath(self::CRON_MODEL_PATH)
|
56 |
+
->save();
|
57 |
+
} catch (Exception $e) {
|
58 |
+
Mage::throwException(Mage::helper('adminhtml')->__('Unable to save the cron expression.'));
|
59 |
+
}
|
60 |
+
}
|
61 |
+
}
|
app/code/local/Amosoft/Dropship/Model/System/Config/Source/Attributecodes.php
ADDED
@@ -0,0 +1,37 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Amosoft
|
6 |
+
*
|
7 |
+
* @category Local
|
8 |
+
* @package Amosoft_Dropship
|
9 |
+
*/
|
10 |
+
|
11 |
+
class Amosoft_Dropship_Model_System_Config_Source_Attributecodes extends Mage_Eav_Model_Entity_Attribute_Source_Abstract
|
12 |
+
{
|
13 |
+
public function getAllOptions()
|
14 |
+
{
|
15 |
+
$vendorModel = Mage::getModel('dropship/ranking')->getCollection();
|
16 |
+
$options = array();
|
17 |
+
if($vendorModel->count() > 0 ){
|
18 |
+
foreach ($vendorModel as $vendor) {
|
19 |
+
$options[] = array(
|
20 |
+
'label' => $vendor->getAmosoftVendorName(),
|
21 |
+
'value' => $vendor->getAmosoftVendorCode()
|
22 |
+
);
|
23 |
+
}
|
24 |
+
}
|
25 |
+
array_unshift($options,array('value' => '', 'label' => Mage::helper('dropship')->__('--Please Select--'))
|
26 |
+
);
|
27 |
+
|
28 |
+
if (!$this->_options) {
|
29 |
+
$this->_options = $options;
|
30 |
+
|
31 |
+
}
|
32 |
+
|
33 |
+
return $this->_options;
|
34 |
+
}
|
35 |
+
}
|
36 |
+
|
37 |
+
|
app/code/local/Amosoft/Dropship/Model/System/Config/Source/Category.php
ADDED
@@ -0,0 +1,32 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Model_System_Config_Source_Category
|
10 |
+
{
|
11 |
+
public function toOptionArray($addEmpty = true)
|
12 |
+
{
|
13 |
+
$collection = Mage::getResourceModel('catalog/category_collection');
|
14 |
+
|
15 |
+
$collection->addAttributeToSelect('name')->load();
|
16 |
+
|
17 |
+
$options = array();
|
18 |
+
|
19 |
+
|
20 |
+
foreach ($collection as $category) {
|
21 |
+
$options[] = array(
|
22 |
+
'label' => $category->getName(),
|
23 |
+
'value' => $category->getId()
|
24 |
+
);
|
25 |
+
}
|
26 |
+
|
27 |
+
array_unshift($options,array('value' => '', 'label' => Mage::helper('dropship')->__('--Please Select--'))
|
28 |
+
);
|
29 |
+
|
30 |
+
return $options;
|
31 |
+
}
|
32 |
+
}
|
app/code/local/Amosoft/Dropship/Model/System/Config/Source/Ediqualifier.php
ADDED
@@ -0,0 +1,65 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Amosoft
|
6 |
+
*
|
7 |
+
* @category Local
|
8 |
+
* @package Amosoft_Dropship
|
9 |
+
*/
|
10 |
+
class Amosoft_Dropship_Model_System_Config_Source_Ediqualifier {
|
11 |
+
|
12 |
+
|
13 |
+
public function toOptionArray()
|
14 |
+
{
|
15 |
+
return array(
|
16 |
+
array('value' => '', 'label' => Mage::helper('dropship')->__('--Please Select--')),
|
17 |
+
array('value' => Mage::helper('dropship')->__('01 Duns (Dun & Bradstreet)'), 'label' => Mage::helper('dropship')->__('01 Duns (Dun & Bradstreet)')),
|
18 |
+
array('value' => Mage::helper('dropship')->__('02 SCAC (Standard Carrier Alpha Code)'), 'label' => Mage::helper('dropship')->__('02 SCAC (Standard Carrier Alpha Code)')),
|
19 |
+
array('value' => Mage::helper('dropship')->__('03 FMC (Federal Maritime Commission)'), 'label' => Mage::helper('dropship')->__('03 FMC (Federal Maritime Commission)')),
|
20 |
+
array('value' => Mage::helper('dropship')->__('04 IATA (International Air Transport Association)'), 'label' => Mage::helper('dropship')->__('04 IATA (International Air Transport Association)')),
|
21 |
+
array('value' => Mage::helper('dropship')->__('08 UCC EDI Communications ID (Comm ID)'), 'label' => Mage::helper('dropship')->__('08 UCC EDI Communications ID (Comm ID)')),
|
22 |
+
array('value' => Mage::helper('dropship')->__('09 X.121 (CCITT)'), 'label' => Mage::helper('dropship')->__('09 X.121 (CCITT)')),
|
23 |
+
array('value' => Mage::helper('dropship')->__('10 Department of Defence (DoD) Activity Address Code'), 'label' => Mage::helper('dropship')->__('10 Department of Defence (DoD) Activity Address Code')),
|
24 |
+
array('value' => Mage::helper('dropship')->__('11 DEA (Drug Enforcement Administration)'), 'label' => Mage::helper('dropship')->__('11 DEA (Drug Enforcement Administration)')),
|
25 |
+
array('value' => Mage::helper('dropship')->__('12 Phone (Telephone Companies)'), 'label' => Mage::helper('dropship')->__('12 Phone (Telephone Companies)')),
|
26 |
+
array('value' => Mage::helper('dropship')->__('13 UCS Code (UCS Code is a Code is Used for UCS Transmissions, it includes the Area Code and Telephone Number of Modem, it Does Not Include Punctuation, Blanks or Access Code )'), 'label' => Mage::helper('dropship')->__('13 UCS Code (UCS Code is a Code is Used for UCS Transmissions, it includes the Area Code and Telephone Number of Modem, it Does Not Include Punctuation, Blanks or Access Code )')),
|
27 |
+
array('value' => Mage::helper('dropship')->__('14 Duns Plus Suffix'), 'label' => Mage::helper('dropship')->__('14 Duns Plus Suffix')),
|
28 |
+
array('value' => Mage::helper('dropship')->__('15 Petroleum Accountants Society Of Canada Company Code'), 'label' => Mage::helper('dropship')->__('15 Petroleum Accountants Society Of Canada Company Code')),
|
29 |
+
array('value' => Mage::helper('dropship')->__('16 Duns Number With 4-Character Suffix'), 'label' => Mage::helper('dropship')->__('16 Duns Number With 4-Character Suffix')),
|
30 |
+
array('value' => Mage::helper('dropship')->__('17 American Bankers Association (ABA) Transit Routing Number (Including check digit, 9-digit )'), 'label' => Mage::helper('dropship')->__('17 American Bankers Association (ABA) Transit Routing Number (Including check digit, 9-digit )')),
|
31 |
+
array('value' => Mage::helper('dropship')->__('18 Association of American Railroads (AAR) Standard Distribution Code'), 'label' => Mage::helper('dropship')->__('18 Association of American Railroads (AAR) Standard Distribution Code')),
|
32 |
+
array('value' => Mage::helper('dropship')->__('19 EDI Council of Australia (EDICA) Communications ID Number (COMM ID)'), 'label' => Mage::helper('dropship')->__('19 EDI Council of Australia (EDICA) Communications ID Number (COMM ID)')),
|
33 |
+
array('value' => Mage::helper('dropship')->__('20 Health Industry Number (HIN)'), 'label' => Mage::helper('dropship')->__('20 Health Industry Number (HIN)')),
|
34 |
+
array('value' => Mage::helper('dropship')->__('21 Integrated Postsecondary Education Data system, or (IPEDS)'), 'label' => Mage::helper('dropship')->__('21 Integrated Postsecondary Education Data system, or (IPEDS)')),
|
35 |
+
array('value' => Mage::helper('dropship')->__('22 Federal Interagency Commision on Education, or FICE'), 'label' => Mage::helper('dropship')->__('22 Federal Interagency Commision on Education, or FICE')),
|
36 |
+
array('value' => Mage::helper('dropship')->__('23 National Center for Education Statistics Common Core Of Data 12-Digit Number For Pre-K-Grade 12 Institutes, or NCES'), 'label' => Mage::helper('dropship')->__('23 National Center for Education Statistics Common Core Of Data 12-Digit Number For Pre-K-Grade 12 Institutes, or NCES')),
|
37 |
+
array('value' => Mage::helper('dropship')->__('24 The College Board`s Admission Testing Program 4-Digit Code Of Postsecondary Institutes, or ATP'), 'label' => Mage::helper('dropship')->__('24 The College Board`s Admission Testing Program 4-Digit Code Of Postsecondary Institutes, or ATP')),
|
38 |
+
array('value' => Mage::helper('dropship')->__('25 American College Testing Program 4-Digit code Of Postsecondary Institutions, or ACT'), 'label' => Mage::helper('dropship')->__('25 American College Testing Program 4-Digit code Of Postsecondary Institutions, or ACT')),
|
39 |
+
array('value' => Mage::helper('dropship')->__('26 Statistics of Canada List Of Postsecondary Institutions'), 'label' => Mage::helper('dropship')->__('26 Statistics of Canada List Of Postsecondary Institutions')),
|
40 |
+
array('value' => Mage::helper('dropship')->__('27 Carrier Identification Number as assigned by Health Care Financing Administration (HCFA)'), 'label' => Mage::helper('dropship')->__('27 Carrier Identification Number as assigned by Health Care Financing Administration (HCFA)')),
|
41 |
+
array('value' => Mage::helper('dropship')->__('28 Fiscal Intermediary Identification Number as assigned by Health Care Financing Administration (HCFA)'), 'label' => Mage::helper('dropship')->__('28 Fiscal Intermediary Identification Number as assigned by Health Care Financing Administration (HCFA)')),
|
42 |
+
array('value' => Mage::helper('dropship')->__('29 Medicare Provider and Supplier Identification Number as assigned by Health Care Financing Administration (HCFA)'), 'label' => Mage::helper('dropship')->__('29 Medicare Provider and Supplier Identification Number as assigned by Health Care Financing Administration (HCFA)')),
|
43 |
+
array('value' => Mage::helper('dropship')->__('30 U.S. Federal Tax Identification Number'), 'label' => Mage::helper('dropship')->__('30 U.S. Federal Tax Identification Number')),
|
44 |
+
array('value' => Mage::helper('dropship')->__('31 Jurisdiction Identification Number Plus 4 as assigned by the International Association Of Industrial Accident Boards and Commissions (IAIABC)'), 'label' => Mage::helper('dropship')->__('31 Jurisdiction Identification Number Plus 4 as assigned by the International Association Of Industrial Accident Boards and Commissions (IAIABC)')),
|
45 |
+
array('value' => Mage::helper('dropship')->__('32 U.S. Federal Employer Identification Number (FEIN)'), 'label' => Mage::helper('dropship')->__('32 U.S. Federal Employer Identification Number (FEIN)')),
|
46 |
+
array('value' => Mage::helper('dropship')->__('33 National Association Of Insurance Commissioners Company Code (NAIC)'), 'label' => Mage::helper('dropship')->__('33 National Association Of Insurance Commissioners Company Code (NAIC)')),
|
47 |
+
array('value' => Mage::helper('dropship')->__('34 Medicaid Provider and Supplier Identification Number as assigned by individual State Medicaid Agencies in conjunction with Health Care Financing Administration (HCFA)'), 'label' => Mage::helper('dropship')->__('34 Medicaid Provider and Supplier Identification Number as assigned by individual State Medicaid Agencies in Conjunction with Health Care Financing Administration (HCFA)')),
|
48 |
+
array('value' => Mage::helper('dropship')->__('35 Statistics Canada Canadian College Student Information System Institution Codes'), 'label' => Mage::helper('dropship')->__('35 Statistics Canada Canadian College Student Information System Institution Codes')),
|
49 |
+
array('value' => Mage::helper('dropship')->__('36 Statistics Canada University Student Information System Institution codes'), 'label' => Mage::helper('dropship')->__('36 Statistics Canada University Student Information System Institution codes')),
|
50 |
+
array('value' => Mage::helper('dropship')->__('37 Society of Property Information Compilers and Analysts'), 'label' => Mage::helper('dropship')->__('37 Society of Property Information Compilers and Analysts')),
|
51 |
+
array('value' => Mage::helper('dropship')->__('AM Association Mexicana del Codigo de Producto (AMECOP) Communication ID'), 'label' => Mage::helper('dropship')->__('AM Association Mexicana del Codigo de Producto (AMECOP) Communication ID')),
|
52 |
+
array('value' => Mage::helper('dropship')->__('NR National Retail Merchants Association (NRMA) - Assigned'), 'label' => Mage::helper('dropship')->__('NR National Retail Merchants Association (NRMA) - Assigned')),
|
53 |
+
array('value' => Mage::helper('dropship')->__('SN Standard Address Number'), 'label' => Mage::helper('dropship')->__('SN Standard Address Number')),
|
54 |
+
array('value' => Mage::helper('dropship')->__('ZZ Mutually Defined'), 'label' => Mage::helper('dropship')->__('ZZ Mutually Defined')),
|
55 |
+
);
|
56 |
+
}
|
57 |
+
|
58 |
+
public function toArray()
|
59 |
+
{
|
60 |
+
return array(
|
61 |
+
0 => Mage::helper('adminhtml')->__('No'),
|
62 |
+
1 => Mage::helper('adminhtml')->__('Yes'),
|
63 |
+
);
|
64 |
+
}
|
65 |
+
}
|
app/code/local/Amosoft/Dropship/Model/System/Config/Source/Optionvalues.php
ADDED
@@ -0,0 +1,62 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Amosoft
|
6 |
+
*
|
7 |
+
* @category Local
|
8 |
+
* @package Amosoft_Dropship
|
9 |
+
*/
|
10 |
+
class Amosoft_Dropship_Model_System_Config_Source_Optionvalues {
|
11 |
+
|
12 |
+
|
13 |
+
public function toOptionArray()
|
14 |
+
{
|
15 |
+
|
16 |
+
$optionsArray = $this->getOptionValue();
|
17 |
+
if(is_array($optionsArray)){
|
18 |
+
array_unshift($optionsArray,array('value' => '', 'label' => Mage::helper('dropship')->__('--Please Select--')));
|
19 |
+
array_push($optionsArray,array('value' => 'addnew', 'label' => Mage::helper('dropship')->__('Add new code')));
|
20 |
+
}
|
21 |
+
else
|
22 |
+
{
|
23 |
+
$optionsArray = array(array('value' => '', 'label' => Mage::helper('dropship')->__('--Please Select--')),
|
24 |
+
array('value' => 'addnew', 'label' => Mage::helper('dropship')->__('Add new code')));
|
25 |
+
}
|
26 |
+
// echo '<pre>';
|
27 |
+
// print_r($optionsArray);
|
28 |
+
// die('save ememm');
|
29 |
+
return $optionsArray;
|
30 |
+
|
31 |
+
}
|
32 |
+
|
33 |
+
public function getOptionValue()
|
34 |
+
{
|
35 |
+
$integration = Mage::getStoreConfig('amosoft_integration/integration/supplier_attribute');
|
36 |
+
$amosoftCollection = Mage::getModel('dropship/supplier')->getCollection();
|
37 |
+
$attributeArray = array();
|
38 |
+
if($integration != null && $integration)
|
39 |
+
{
|
40 |
+
$attributeDetails = Mage::getSingleton("eav/config")->getAttribute("catalog_product", $integration);
|
41 |
+
$options = $attributeDetails->getSource()->getAllOptions(false);
|
42 |
+
foreach ($options as $option) {
|
43 |
+
|
44 |
+
$attributeArray[] = array('value'=>$option["label"],'label' => Mage::helper('dropship')->__(strtolower($option["label"])));
|
45 |
+
}
|
46 |
+
}else
|
47 |
+
{
|
48 |
+
$amosoftCollection ->addFieldToFilter(array('is_update', 'verified'), array('1', '0'))->addFieldToFilter('status','')
|
49 |
+
->addFieldToSelect(array('company_id', 'magento_vendor_code'));
|
50 |
+
$comapnyIds = $amosoftCollection->getData();
|
51 |
+
if (count($comapnyIds) > 0) {
|
52 |
+
foreach ($comapnyIds as $key=>$value) {
|
53 |
+
$attributeArray[] = array('value'=>$value['magento_vendor_code'],'label' => Mage::helper('dropship')->__(strtolower($value['magento_vendor_code'])));
|
54 |
+
}
|
55 |
+
}
|
56 |
+
}
|
57 |
+
|
58 |
+
return $attributeArray;
|
59 |
+
|
60 |
+
}
|
61 |
+
}
|
62 |
+
|
app/code/local/Amosoft/Dropship/Model/System/Config/Source/Ranktype.php
ADDED
@@ -0,0 +1,21 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Model_System_Config_Source_Ranktype
|
10 |
+
{
|
11 |
+
public function toOptionArray($addEmpty = true)
|
12 |
+
{
|
13 |
+
|
14 |
+
return array(
|
15 |
+
array('value' => '', 'label' => Mage::helper('dropship')->__('--Please Select--')),
|
16 |
+
array('value' => 'default', 'label' => Mage::helper('dropship')->__('Ranked Based')),
|
17 |
+
array('value' => 'cost', 'label' => Mage::helper('dropship')->__('Cost Based'))
|
18 |
+
|
19 |
+
);
|
20 |
+
}
|
21 |
+
}
|
app/code/local/Amosoft/Dropship/Model/System/Config/Source/Store.php
ADDED
@@ -0,0 +1,31 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
class Amosoft_Dropship_Model_System_Config_Source_Store
|
9 |
+
{
|
10 |
+
protected $_options;
|
11 |
+
|
12 |
+
|
13 |
+
public function toOptionArray()
|
14 |
+
{
|
15 |
+
$options = array();
|
16 |
+
if (!$this->_options) {
|
17 |
+
$this->_options = Mage::getResourceModel('core/store_collection')
|
18 |
+
->load();
|
19 |
+
|
20 |
+
foreach ($this->_options as $val){
|
21 |
+
$options[] =array(
|
22 |
+
'label' => $val->getName().'-'.$val->getStoreId(),
|
23 |
+
'value' => $val->getStoreId()
|
24 |
+
);
|
25 |
+
}
|
26 |
+
}
|
27 |
+
|
28 |
+
return $options;
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
app/code/local/Amosoft/Dropship/Model/System/Config/Source/Time.php
ADDED
@@ -0,0 +1,33 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
class Amosoft_Dropship_Model_System_Config_Source_Time
|
9 |
+
{
|
10 |
+
public function toOptionArray()
|
11 |
+
{
|
12 |
+
/*return array(
|
13 |
+
array(
|
14 |
+
'value' => 'key1',
|
15 |
+
'label' => 'Value 1',
|
16 |
+
),
|
17 |
+
array(
|
18 |
+
'value' => 'key2',
|
19 |
+
'label' => 'Value 2',
|
20 |
+
),
|
21 |
+
);*/
|
22 |
+
$j = 0;
|
23 |
+
for( $i=10;$i<=60;$i++ ) {
|
24 |
+
if($i >= $j+10 ){
|
25 |
+
$hour[$i] = str_pad($i, 2, '0', STR_PAD_LEFT);
|
26 |
+
$j = $j+10;
|
27 |
+
}
|
28 |
+
|
29 |
+
}
|
30 |
+
return $hour;
|
31 |
+
|
32 |
+
}
|
33 |
+
}
|
app/code/local/Amosoft/Dropship/Model/System/Config/Source/Vendorlist.php
ADDED
@@ -0,0 +1,94 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Model_System_Config_Source_Vendorlist
|
10 |
+
{
|
11 |
+
public function toOptionArray($addEmpty = true)
|
12 |
+
{
|
13 |
+
$options =array();
|
14 |
+
$collectionVendor = Mage::getModel ( 'dropship/inventory' )->getCollection ();
|
15 |
+
|
16 |
+
|
17 |
+
$collectionVendor->getSelect ()->joinleft ( array (
|
18 |
+
'amosoftRanking' => Mage::getSingleton ( 'core/resource' )->getTableName ( 'dropship/ranking' )
|
19 |
+
), 'amosoftRanking.amosoft_vendor_code = main_table.amosoft_vendor_code', array (
|
20 |
+
'*'
|
21 |
+
) )->where('amosoftRanking.is_dropship = ?','yes');
|
22 |
+
|
23 |
+
$collectionVendor->getSelect ()->group('main_table.amosoft_vendor_code');
|
24 |
+
if($collectionVendor->count() > 0){
|
25 |
+
foreach ($collectionVendor as $vendor) {
|
26 |
+
$options[] = array(
|
27 |
+
'label' => $vendor->getAmosoftVendorName(),
|
28 |
+
'value' => $vendor->getAmosoftVendorCode()
|
29 |
+
);
|
30 |
+
}
|
31 |
+
}
|
32 |
+
array_unshift($options,array('value' => '', 'label' => Mage::helper('dropship')->__('--Please Select--')),array('value' => 'none', 'label' => Mage::helper('dropship')->__('None')));
|
33 |
+
return $options;
|
34 |
+
}
|
35 |
+
|
36 |
+
public function vendorList($addEmpty = true,$sku)
|
37 |
+
{
|
38 |
+
$vendorModel = Mage::getModel('dropship/ranking')->getCollection();
|
39 |
+
$vendorModel->getSelect ()->where('main_table.amosoft_vendor_code not in (select amosoft_vendor_code from '.Mage::getSingleton ( 'core/resource' )->getTableName ( 'dropship/inventory' ).' where product_sku = ?)',$sku);
|
40 |
+
$options = array();
|
41 |
+
if($vendorModel->count() > 0 ){
|
42 |
+
foreach ($vendorModel as $vendor) {
|
43 |
+
$options[] = array(
|
44 |
+
'label' => $vendor->getAmosoftVendorCode().'--'.$vendor->getAmosoftVendorName(),
|
45 |
+
'value' => $vendor->getAmosoftVendorCode()
|
46 |
+
);
|
47 |
+
}
|
48 |
+
}
|
49 |
+
array_unshift($options,array('value' => '', 'label' => Mage::helper('dropship')->__('--Please Select--'))
|
50 |
+
);
|
51 |
+
return $options;
|
52 |
+
}
|
53 |
+
|
54 |
+
public function vendorListSourcing($addEmpty = true,$sku)
|
55 |
+
{
|
56 |
+
$options =array();
|
57 |
+
$collectionVendor = Mage::getModel ( 'dropship/inventory' )->getCollection ()->addFieldToFilter('product_sku',$sku);
|
58 |
+
$collectionVendor->getSelect ()->joinleft ( array (
|
59 |
+
'amosoftRanking' => Mage::getSingleton ( 'core/resource' )->getTableName ( 'dropship/ranking' )
|
60 |
+
), 'amosoftRanking.amosoft_vendor_code = main_table.amosoft_vendor_code', array (
|
61 |
+
'*'
|
62 |
+
) )->where('amosoftRanking.is_dropship = ?','yes');
|
63 |
+
|
64 |
+
$collectionVendor->getSelect ()->group('main_table.amosoft_vendor_code');
|
65 |
+
|
66 |
+
if($collectionVendor->count() > 0){
|
67 |
+
foreach ($collectionVendor as $vendor) {
|
68 |
+
$options[] = array(
|
69 |
+
'label' => $vendor->getAmosoftVendorName(),
|
70 |
+
'value' => $vendor->getAmosoftVendorCode()
|
71 |
+
);
|
72 |
+
}
|
73 |
+
}
|
74 |
+
array_unshift($options,array('value' => '', 'label' => Mage::helper('dropship')->__('--Please Select--')));
|
75 |
+
return $options;
|
76 |
+
}
|
77 |
+
|
78 |
+
public function getAllVendor($addEmpty = true)
|
79 |
+
{
|
80 |
+
$options =array();
|
81 |
+
$collectionVendor = Mage::getModel ( 'dropship/ranking' )->getCollection ();
|
82 |
+
|
83 |
+
if($collectionVendor->count() > 0){
|
84 |
+
foreach ($collectionVendor as $vendor) {
|
85 |
+
$options[] = array(
|
86 |
+
'label' => $vendor->getAmosoftVendorCode().'--'.$vendor->getAmosoftVendorName(),
|
87 |
+
'value' => $vendor->getAmosoftVendorCode()
|
88 |
+
);
|
89 |
+
}
|
90 |
+
}
|
91 |
+
array_unshift($options,array('value' => '', 'label' => Mage::helper('dropship')->__('--Please Select--')));
|
92 |
+
return $options;
|
93 |
+
}
|
94 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Uploadvendor.php
ADDED
@@ -0,0 +1,1540 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Model_Uploadvendor extends Mage_Core_Model_Abstract
|
11 |
+
{
|
12 |
+
|
13 |
+
const FIELD_NAME_SOURCE_FILE = 'import_file';
|
14 |
+
protected $_isProductSetupMode = false;
|
15 |
+
protected $sendBadFileAlert = false;
|
16 |
+
protected $_haderError = array();
|
17 |
+
protected $_FtpErrors = array();
|
18 |
+
protected $_UploadCsvErrors = array();
|
19 |
+
protected $_inventoryModel;
|
20 |
+
protected $_vendorSkuFlag = array();
|
21 |
+
protected $conn;
|
22 |
+
protected $ftpRequestPram = array();
|
23 |
+
protected $_errors = array();
|
24 |
+
const XML_PATH_UPLOAD_ENABLED = 'amosoft_sourcing/cron_settings_upload/enabled';
|
25 |
+
const XML_PATH_UPLOAD_FTP_SITE = 'amosoft_sourcing/cron_settings_upload/ftp_site';
|
26 |
+
const XML_PATH_UPLOAD_FTP_USERNAME = 'amosoft_sourcing/cron_settings_upload/ftp_username';
|
27 |
+
const XML_PATH_UPLOAD_FTP_PASSWORD = 'amosoft_sourcing/cron_settings_upload/ftp_password';
|
28 |
+
const XML_PATH_UPLOAD_FTP_TYPE = 'amosoft_sourcing/cron_settings_upload/ftp_type';
|
29 |
+
const XML_PATH_UPLOAD_FTP_ACCNUMBER = 'amosoft_sourcing/cron_settings_upload/ftp_accnumber';
|
30 |
+
const XML_PATH_INVENTORY_NOTIFICATION_EMAIL = 'amosoft_sourcing/inventory_notification/email';
|
31 |
+
const XML_PATH_INVENTORY_NOTIFICATION_EMAIL_ENABLED = 'amosoft_sourcing/inventory_notification/enabled';
|
32 |
+
protected $ftpCSVFormat = array('vendor_code','vendor_sku','qty','cost');
|
33 |
+
protected $manualCSVFormat = array('vendor_sku','qty','cost');
|
34 |
+
protected $productSetupCSVFormat = array('magento_sku','vendor_sku','','');
|
35 |
+
protected $_csvDataCache;
|
36 |
+
protected $_vendorCode;
|
37 |
+
protected $_csvParserObj;
|
38 |
+
protected $emptyRecords = array(); //checkDataIntigrity fnction store empty records from CSV
|
39 |
+
protected $result = array(); //checkDataIntigrity fnction store final result for error
|
40 |
+
protected $supplierName = '';
|
41 |
+
|
42 |
+
protected function _construct()
|
43 |
+
{
|
44 |
+
$this->_inventoryModel = Mage::getModel('dropship/inventory');
|
45 |
+
$this->conn = $this->getDatabaseConnection ();
|
46 |
+
$this->_init("dropship/uploadvendor");
|
47 |
+
$this->_csvParserObj = Mage::getModel('dropship/csvparser');
|
48 |
+
|
49 |
+
}
|
50 |
+
|
51 |
+
public function getDatabaseConnection()
|
52 |
+
{
|
53 |
+
return Mage::getSingleton ( 'core/resource' )->getConnection ( 'core_write' );
|
54 |
+
}
|
55 |
+
|
56 |
+
protected function _getSession()
|
57 |
+
{
|
58 |
+
return Mage::getSingleton('adminhtml/session');
|
59 |
+
}
|
60 |
+
|
61 |
+
protected function _getCsvData($fileName,$header = false)
|
62 |
+
{
|
63 |
+
$csvObject = new Varien_File_Csv();
|
64 |
+
|
65 |
+
if(!$this->_csvDataCache){
|
66 |
+
$this->_csvDataCache = $this->_csvParserObj->getChangedValue($csvObject->getData($fileName),$this->_vendorCode);
|
67 |
+
}else
|
68 |
+
{
|
69 |
+
if($header){
|
70 |
+
return array($this->_csvDataCache[0]);
|
71 |
+
}else
|
72 |
+
{
|
73 |
+
$this->_csvDataCache;
|
74 |
+
}
|
75 |
+
}
|
76 |
+
return $this->_csvDataCache;
|
77 |
+
}
|
78 |
+
|
79 |
+
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Import working directory
|
83 |
+
*
|
84 |
+
* @return string
|
85 |
+
*/
|
86 |
+
|
87 |
+
public static function getWorkingDir()
|
88 |
+
{
|
89 |
+
return Mage::getBaseDir('var') . DS . 'amosoftvendorproduct' . DS;
|
90 |
+
}
|
91 |
+
|
92 |
+
public function insertCronEntry($filename,$data = null){
|
93 |
+
|
94 |
+
$this->setFileName($filename);
|
95 |
+
$this->setUpdatedBy('manually');
|
96 |
+
$this->setUpdatedAt(now());
|
97 |
+
$this->setAmosoftVendorCode(Mage::app()->getRequest()->getPost('vendor'));
|
98 |
+
try{
|
99 |
+
$this->save();
|
100 |
+
}catch(Exception $e){
|
101 |
+
$this->_getSession()->addError(Mage::helper('dropship')->__($e->getMessage()));
|
102 |
+
}
|
103 |
+
}
|
104 |
+
|
105 |
+
public function uploadSource()
|
106 |
+
{
|
107 |
+
$error = false;
|
108 |
+
$this->_vendorCode = $this->getVendor();
|
109 |
+
$this->_isProductSetupMode = $this->getProductsetupmode();
|
110 |
+
$entity = 'vendor_product_'.date('ymdHis');
|
111 |
+
$uploader = Mage::getModel('core/file_uploader', self::FIELD_NAME_SOURCE_FILE);
|
112 |
+
$uploader->skipDbProcessing(true);
|
113 |
+
$result = $uploader->save(self::getWorkingDir());
|
114 |
+
$extension = pathinfo($result['file'], PATHINFO_EXTENSION);
|
115 |
+
$uploadedFile = $result['path'] . $result['file'];
|
116 |
+
$error = $this->validateCsv($uploadedFile);
|
117 |
+
if($error){
|
118 |
+
$this->fileObj()->rm($uploadedFile);
|
119 |
+
$this->_getSession()->addNotice(Mage::helper('dropship')->__('Please fix errors and re-upload file'));
|
120 |
+
return $error;
|
121 |
+
}
|
122 |
+
|
123 |
+
$sourceFile = self::getWorkingDir() . $entity;
|
124 |
+
|
125 |
+
$sourceFile .= '.' . strtolower($extension);
|
126 |
+
$fileName = $entity.'.'.strtolower($extension);
|
127 |
+
|
128 |
+
if(strtolower($uploadedFile) != strtolower($sourceFile)) {
|
129 |
+
if (file_exists($sourceFile)) {
|
130 |
+
$this->fileObj()->rm($sourceFile);
|
131 |
+
}
|
132 |
+
|
133 |
+
if (!@rename($uploadedFile, $sourceFile)) {
|
134 |
+
Mage::throwException(Mage::helper('importexport')->__('Source file moving failed'));
|
135 |
+
}
|
136 |
+
}
|
137 |
+
Mage::register('file_name',$fileName);
|
138 |
+
if(!$error)
|
139 |
+
$this->insertCronEntry($fileName);
|
140 |
+
|
141 |
+
return $error;
|
142 |
+
}
|
143 |
+
|
144 |
+
|
145 |
+
public function validateCsv($fileName)
|
146 |
+
{
|
147 |
+
//$fileName
|
148 |
+
$isError = false;
|
149 |
+
$csvData = $this->_getCsvData($fileName,true);
|
150 |
+
|
151 |
+
/** checks columns */
|
152 |
+
|
153 |
+
if($this->validateCsvHeader($csvData)){
|
154 |
+
$isError = false;
|
155 |
+
}else{
|
156 |
+
$this->_getSession()->addError(Mage::helper('dropship')->__('CSV header %s is invalid ',implode(',',$this->_haderError)));
|
157 |
+
$isError = true;
|
158 |
+
$this->_csvDataCache = array();
|
159 |
+
}
|
160 |
+
return $isError;
|
161 |
+
}
|
162 |
+
|
163 |
+
protected function validateCsvHeader($csvData,$isFtp = false)
|
164 |
+
{
|
165 |
+
$result = true;
|
166 |
+
if(empty($csvData))
|
167 |
+
{
|
168 |
+
return false;
|
169 |
+
}
|
170 |
+
if ($this->_isProductSetupMode && !$isFtp ){
|
171 |
+
$csvFields = $this->productSetupCSVFormat;
|
172 |
+
}else{
|
173 |
+
$csvFields = (!$isFtp) ? $this->manualCSVFormat : $this->ftpCSVFormat;
|
174 |
+
}
|
175 |
+
$cvsDataNum = count($csvData[0]);
|
176 |
+
|
177 |
+
if(!$this->validateManualCsvHeader($cvsDataNum,$csvData,$isFtp))
|
178 |
+
return false;
|
179 |
+
if(!$this->validateFtpCsvHeader($cvsDataNum,$csvData))
|
180 |
+
return false;
|
181 |
+
if(!$this->validateProductSetupCsvHeader($cvsDataNum,$csvData))
|
182 |
+
return false;
|
183 |
+
for ($i = 0; $i < $cvsDataNum; $i++) {
|
184 |
+
if( $isFtp && ($csvData[0][0] == 'vendor_code' || $csvData[0][0] == 'vendor_sku')){
|
185 |
+
continue;
|
186 |
+
}
|
187 |
+
if($csvData[0][$i] == $csvFields[$i]){
|
188 |
+
continue;
|
189 |
+
}else{
|
190 |
+
(!$isFtp) ? $this->_haderError[] = $csvData[0][$i] : '';
|
191 |
+
$result = false;
|
192 |
+
}
|
193 |
+
}
|
194 |
+
return $result;
|
195 |
+
}
|
196 |
+
|
197 |
+
protected function validateManualCsvHeader($cvsDataNum,$csvData,$isFtp)
|
198 |
+
{
|
199 |
+
if(!$isFtp && !$this->_isProductSetupMode ){
|
200 |
+
if($cvsDataNum != 3){
|
201 |
+
foreach ($csvData[0] as $val){
|
202 |
+
if(!in_array($val,array('vendor_sku','cost','qty')))
|
203 |
+
{
|
204 |
+
$this->_haderError[] = $val;
|
205 |
+
}
|
206 |
+
}
|
207 |
+
return false;
|
208 |
+
}
|
209 |
+
}
|
210 |
+
return true;
|
211 |
+
}
|
212 |
+
protected function validateFtpCsvHeader($cvsDataNum,$csvData)
|
213 |
+
{
|
214 |
+
$validation = true;
|
215 |
+
if($cvsDataNum == 3 || $cvsDataNum == 4){
|
216 |
+
foreach ($csvData[0] as $val){
|
217 |
+
if(!in_array($val,($cvsDataNum == 3) ? array('vendor_sku','qty', 'cost') : array('vendor_code','vendor_sku','qty', 'cost'))){
|
218 |
+
$this->_haderError[] = $val;
|
219 |
+
$validation = false;
|
220 |
+
}
|
221 |
+
}
|
222 |
+
return $validation;
|
223 |
+
}
|
224 |
+
return true;
|
225 |
+
}
|
226 |
+
protected function validateProductSetupCsvHeader($cvsDataNum,$csvData)
|
227 |
+
{
|
228 |
+
if($this->_isProductSetupMode ){
|
229 |
+
if($cvsDataNum != 2){
|
230 |
+
foreach ($csvData[0] as $val){
|
231 |
+
if(!in_array($val,array('vendor_sku','magento_sku')))
|
232 |
+
{
|
233 |
+
$this->_haderError[] = $val;
|
234 |
+
}
|
235 |
+
}
|
236 |
+
return false;
|
237 |
+
}
|
238 |
+
}
|
239 |
+
return true;
|
240 |
+
}
|
241 |
+
protected function checkDataIntigrity($csvData,$isFtp = false){
|
242 |
+
|
243 |
+
//patch for FTP backward compatibility header
|
244 |
+
(count($csvData[0]) <= 3) ? array_unshift($csvData[0], "") : $csvData[0];
|
245 |
+
foreach($csvData as $row => $csvRowData)
|
246 |
+
{
|
247 |
+
if($row == 0)
|
248 |
+
continue;
|
249 |
+
if(!$this->_isProductSetupMode && !$isFtp){
|
250 |
+
array_unshift($csvRowData, "");
|
251 |
+
}
|
252 |
+
//patch for FTP backward compatibility data
|
253 |
+
if($isFtp)
|
254 |
+
(count($csvRowData) <= 3) ? array_unshift($csvRowData, "") : $csvRowData;
|
255 |
+
$this->getErrorRowNumber($csvRowData,$row);
|
256 |
+
}
|
257 |
+
$this->generateMsg($isFtp,$this->result,$this->emptyRecords);
|
258 |
+
return in_array(true,$this->result) ? true : false;
|
259 |
+
}
|
260 |
+
protected function getErrorRowNumber($csvRowData,$row)
|
261 |
+
{
|
262 |
+
|
263 |
+
foreach($csvRowData as $key => $data){
|
264 |
+
$data = trim($data);
|
265 |
+
switch($key){
|
266 |
+
case is_numeric($key) ? 0 : 'magento_sku' :
|
267 |
+
if($this->_isProductSetupMode){
|
268 |
+
if(empty($data)){
|
269 |
+
$this->emptyRecords['magento_sku'][] = $row;
|
270 |
+
$this->result[] = true;
|
271 |
+
} else {
|
272 |
+
$this->result[] = false;
|
273 |
+
}
|
274 |
+
}else{
|
275 |
+
continue;
|
276 |
+
}
|
277 |
+
break;
|
278 |
+
case is_numeric($key) ? 1 : 'vendor_sku':
|
279 |
+
if(empty($data)){
|
280 |
+
$this->emptyRecords['vendor_sku'][] = $row;
|
281 |
+
$this->result[] = true;
|
282 |
+
}
|
283 |
+
else
|
284 |
+
$this->result[] = false;
|
285 |
+
break;
|
286 |
+
case is_numeric($key) ? 2 : 'qty':
|
287 |
+
if(!is_numeric($data) || $data < 0 )
|
288 |
+
{
|
289 |
+
if($data!=""){
|
290 |
+
$this->emptyRecords['qty'][] = $row;
|
291 |
+
$this->result[] = true;
|
292 |
+
}
|
293 |
+
}
|
294 |
+
else
|
295 |
+
$this->result[] = false;
|
296 |
+
break;
|
297 |
+
case is_numeric($key) ? 3 : 'cost':
|
298 |
+
if(!is_numeric($data) || $data < 0 ){
|
299 |
+
if($data!=""){
|
300 |
+
$this->emptyRecords['cost'][] = $row;
|
301 |
+
$this->result[] = true;
|
302 |
+
}
|
303 |
+
}
|
304 |
+
else
|
305 |
+
$this->result[] = false;
|
306 |
+
break;
|
307 |
+
}
|
308 |
+
}
|
309 |
+
return;
|
310 |
+
}
|
311 |
+
protected function generateMsg($isFtp,$result,$emptyRecords){
|
312 |
+
|
313 |
+
$error = in_array(true,$result) ? true : false;
|
314 |
+
if($error){
|
315 |
+
foreach($emptyRecords as $key=>$value){
|
316 |
+
if($this->_isProductSetupMode){
|
317 |
+
if($key == 'magento_sku'){
|
318 |
+
$string = implode(';',$value);
|
319 |
+
$this->_UploadCsvErrors[] = array('error_type'=>'row_magento_sku','value'=>$string);
|
320 |
+
}
|
321 |
+
}
|
322 |
+
if($key == 'vendor_sku'){
|
323 |
+
$string = implode(';',$value);
|
324 |
+
if($isFtp){
|
325 |
+
$this->_FtpErrors[] = array('error_type'=>'row_vendor_sku','value'=>$string);
|
326 |
+
$this->sendBadFileAlert = true;
|
327 |
+
}else{
|
328 |
+
$this->_UploadCsvErrors[] = array('error_type'=>'row_vendor_sku','value'=>$string);
|
329 |
+
}
|
330 |
+
}
|
331 |
+
if($key == 'qty'){
|
332 |
+
$string = implode(';',$value);
|
333 |
+
if($isFtp){
|
334 |
+
$this->_FtpErrors[] = array('error_type'=>'row_qty','value'=>$string);
|
335 |
+
$this->sendBadFileAlert = true;
|
336 |
+
}else{
|
337 |
+
$this->_UploadCsvErrors[] = array('error_type'=>'row_qty','value'=>$string);
|
338 |
+
}
|
339 |
+
}
|
340 |
+
if($key == 'cost'){
|
341 |
+
$string = implode(';',$value);
|
342 |
+
if($isFtp){
|
343 |
+
$this->_FtpErrors[] = array('error_type'=>'row_cost','value'=>$string);
|
344 |
+
$this->sendBadFileAlert = true;
|
345 |
+
}else{
|
346 |
+
$this->_UploadCsvErrors[] = array('error_type'=>'row_cost','value'=>$string);
|
347 |
+
}
|
348 |
+
}
|
349 |
+
}
|
350 |
+
}
|
351 |
+
return ;
|
352 |
+
}
|
353 |
+
|
354 |
+
protected function getConfigValue($path)
|
355 |
+
{
|
356 |
+
return Mage::getStoreConfig($path);
|
357 |
+
}
|
358 |
+
public function getMagentoSku($vendorCode,$vendorSku){
|
359 |
+
$sku = '';
|
360 |
+
$vendorCollection = $this->_inventoryModel->getCollection()->addFieldTofilter('amosoft_vendor_code',$vendorCode)->addFieldTofilter('amosoft_vendor_sku',$vendorSku);
|
361 |
+
if($vendorCollection->count() > 0)
|
362 |
+
{
|
363 |
+
$sku = $vendorCollection->getFirstItem()->getProductSku();
|
364 |
+
}
|
365 |
+
return $sku;
|
366 |
+
}
|
367 |
+
|
368 |
+
/* parse uploaded csv file */
|
369 |
+
public function parseCsv($fileName = null,$amosoft_vendor_code = null)
|
370 |
+
{
|
371 |
+
$records = array();
|
372 |
+
$success = array();
|
373 |
+
$failure = array();
|
374 |
+
$counter = 0;
|
375 |
+
$foramterroroutput = array();
|
376 |
+
$this->_csvDataCache = array();
|
377 |
+
$this->_vendorCode = $amosoft_vendor_code;
|
378 |
+
$tableVendorImportLog = Mage::getSingleton ( 'core/resource' )->getTableName ( 'dropship/vendor_import_log' );
|
379 |
+
$csvData = $this->_getCsvData(self::getWorkingDir().$fileName);
|
380 |
+
|
381 |
+
if(count($csvData) <= 1 && Mage::getModel('dropship/csvparser')->isCsvFileEmpty())
|
382 |
+
{
|
383 |
+
$failure[$fileName] = 'Sorry,we cant find the record to update inventory';
|
384 |
+
$this->_UploadCsvErrors[] = array('error_type'=>'empty_file','value'=>'Sorry,we cant find the record to update inventory');
|
385 |
+
}
|
386 |
+
|
387 |
+
$records = Mage::getModel('dropship/csvparser')->generateManualCsvRow($csvData,$this->_isProductSetupMode,$amosoft_vendor_code);
|
388 |
+
|
389 |
+
Mage::helper('dropship')->turnOnReadUncommittedMode(); // dirty read patch
|
390 |
+
//$this->conn->beginTransaction ();
|
391 |
+
if(is_array($records) && !empty($records)){
|
392 |
+
$requestData = array_chunk($records, 1, true);
|
393 |
+
|
394 |
+
foreach($requestData as $dataArr){
|
395 |
+
foreach($dataArr as $data){
|
396 |
+
if($this->_isProductSetupMode){
|
397 |
+
$result[] = $this->validateProductSetupMode($data);
|
398 |
+
}else{
|
399 |
+
$result[] = $this->validateCsvData($data);
|
400 |
+
}
|
401 |
+
}
|
402 |
+
}
|
403 |
+
foreach($result as $successOrfail){
|
404 |
+
if($successOrfail['success']!="")
|
405 |
+
$success[] = $successOrfail['success'];
|
406 |
+
if($successOrfail['failure']!="")
|
407 |
+
$failure[] = $successOrfail['failure'];
|
408 |
+
}
|
409 |
+
try{
|
410 |
+
$updateFileStatus = Mage::getModel('dropship/uploadvendor')->load($fileName,'file_name');
|
411 |
+
$updateFileStatus->setImportStatus('done');
|
412 |
+
$updateFileStatus->save();
|
413 |
+
}catch(Exception $e){
|
414 |
+
echo $e->getMessage();
|
415 |
+
$this->_errors[] = $e->getMessage();
|
416 |
+
$this->_errors[] = $e->getTrace();
|
417 |
+
Mage::log($e->getMessage(), Zend_Log::ERR);
|
418 |
+
Mage::logException($e);
|
419 |
+
}
|
420 |
+
$this->checkDataIntigrity($csvData);
|
421 |
+
}
|
422 |
+
$finalResultCounter = (!$this->_isProductSetupMode) ? $this->logForUnprocessedRows($amosoft_vendor_code) : 0;
|
423 |
+
|
424 |
+
if(is_array($finalResultCounter))
|
425 |
+
{
|
426 |
+
$failed = count($failure)+$finalResultCounter['failure'];
|
427 |
+
$success = count($success)+$finalResultCounter['success'];
|
428 |
+
}else
|
429 |
+
{
|
430 |
+
$failed = count($failure)+$finalResultCounter;
|
431 |
+
$success = count($success)+$finalResultCounter;
|
432 |
+
}
|
433 |
+
|
434 |
+
$ftp_err = ($failed > 0) ? 'Missing/Bad Data' : '';
|
435 |
+
$insert = 'INSERT INTO '.$tableVendorImportLog.'(amosoft_vendor_code,updated_by,success,failure,ftp_error,created_at) VALUES ("'.$amosoft_vendor_code.'","'.Mage::getSingleton('admin/session')->getUser()->getUsername().'",'.$success.','.$failed.',"'.$ftp_err.'","'.now().'")';
|
436 |
+
$this->conn->beginTransaction ();
|
437 |
+
$this->conn->query($insert);
|
438 |
+
$entityId = $this->conn->lastInsertId($tableVendorImportLog);
|
439 |
+
try {
|
440 |
+
$this->conn->commit ();
|
441 |
+
$this->prepareInsertAndExeQuery($this->_UploadCsvErrors,$entityId);
|
442 |
+
$file = self::getWorkingDir() . $fileName;
|
443 |
+
$this->fileObj()->rm($file);
|
444 |
+
} catch ( Exception $e ) {
|
445 |
+
$this->conn->rollBack ();
|
446 |
+
$this->_errors[] = $e->getMessage();
|
447 |
+
$this->_errors[] = $e->getTrace();
|
448 |
+
Mage::log($e->getMessage(), Zend_Log::ERR);
|
449 |
+
Mage::logException($e);
|
450 |
+
echo $e->getMessage();
|
451 |
+
|
452 |
+
}
|
453 |
+
$this->_csvParserObj->emptyTable();
|
454 |
+
$this->_csvDataCache = array();
|
455 |
+
$this->_vendorSkuFlag = array();
|
456 |
+
Mage::helper('dropship')->turnOnReadCommittedMode(); //restore to orignal trasectional level
|
457 |
+
return $this;
|
458 |
+
}
|
459 |
+
|
460 |
+
|
461 |
+
protected function chekDuplicateCombination($data)
|
462 |
+
{
|
463 |
+
$result = true;
|
464 |
+
$collection = $this->_inventoryModel->getCollection()->addFieldTofilter('amosoft_vendor_code',$data['amosoft_vendor_code'])->addFieldTofilter('amosoft_vendor_sku',$data['vendor_sku']);
|
465 |
+
if($collection->count() > 0){
|
466 |
+
$existing_product_sku = $collection->getFirstItem()->getProductSku();
|
467 |
+
if(!empty($existing_product_sku)){
|
468 |
+
if($data['magento_sku'] != $existing_product_sku){
|
469 |
+
$result = false;
|
470 |
+
}
|
471 |
+
}
|
472 |
+
}
|
473 |
+
$inventoryCollection = $this->_inventoryModel->getCollection()->addFieldTofilter('amosoft_vendor_code',$data['amosoft_vendor_code'])->addFieldTofilter('product_sku',$data['magento_sku']);
|
474 |
+
if($inventoryCollection->getSize() > 0){
|
475 |
+
$inventoryCollection = $inventoryCollection->getData();
|
476 |
+
$inventoryCollection = $inventoryCollection[0];
|
477 |
+
$existing_vendor_sku = $inventoryCollection['amosoft_vendor_sku'];
|
478 |
+
if($existing_vendor_sku != trim($data['vendor_sku']))
|
479 |
+
{
|
480 |
+
$result = false;
|
481 |
+
}
|
482 |
+
}
|
483 |
+
return $result;
|
484 |
+
}
|
485 |
+
|
486 |
+
protected function _prepareCollection()
|
487 |
+
{
|
488 |
+
$collection = $this->getCollection()->addFieldToFilter('import_status','pending');
|
489 |
+
$collection->getSelect()->limit(1);
|
490 |
+
return $collection;
|
491 |
+
}
|
492 |
+
|
493 |
+
protected function calculateProductQty($data){
|
494 |
+
$qty = 0;
|
495 |
+
$configBuffer = 0;
|
496 |
+
if(!is_numeric($data['qty']) || $data['qty'] < 0){
|
497 |
+
return array('final_qty'=> .999999999,'upload_qty'=> .999999999); // apply patch for accept empty qty row from CSV
|
498 |
+
}
|
499 |
+
$buffer = Mage::getStoreConfig('amosoft_sourcing/inventory/buffer');
|
500 |
+
$collection = $this->_inventoryModel->getCollection()->addFieldToFilter('product_sku',$data['magento_sku']);
|
501 |
+
if($collection->count() > 0){
|
502 |
+
foreach($collection as $qtyData){
|
503 |
+
if($data['amosoft_vendor_code'] != $qtyData->getAmosoftVendorCode() )
|
504 |
+
$qty += $qtyData->getStock();
|
505 |
+
}
|
506 |
+
}
|
507 |
+
|
508 |
+
if($data['qty'] <= 0){
|
509 |
+
$rQty = 0;
|
510 |
+
}else{
|
511 |
+
$rQty = $data['qty'];
|
512 |
+
}
|
513 |
+
|
514 |
+
if(!empty($buffer) && $buffer >= 0){
|
515 |
+
$configBuffer = $buffer;
|
516 |
+
}else{
|
517 |
+
$configBuffer = 0;
|
518 |
+
}
|
519 |
+
|
520 |
+
$uploadQty = $rQty - $configBuffer;
|
521 |
+
$finalUploadQty = ($uploadQty >= 0) ? $uploadQty : 0;
|
522 |
+
$finalQty = $qty+$finalUploadQty;
|
523 |
+
return array('final_qty'=> ($finalQty >= 0) ? $finalQty : 0,'upload_qty'=> $finalUploadQty);
|
524 |
+
}
|
525 |
+
protected function vendorProductInsert($data)
|
526 |
+
{
|
527 |
+
$tableVendorInventory = Mage::getSingleton ( 'core/resource' )->getTableName ( 'dropship/inventory' );
|
528 |
+
$inventoryCollectionResult = $this->getInventoryCollection($data);
|
529 |
+
$qtyArray = $this->calculateProductQty($data);
|
530 |
+
|
531 |
+
switch($inventoryCollectionResult['operationType'])
|
532 |
+
{
|
533 |
+
case 'update':
|
534 |
+
$productId = Mage::getModel('catalog/product')->getIdBySku(trim($data['magento_sku']));
|
535 |
+
if($productId){
|
536 |
+
|
537 |
+
$update = $this->_prepareUpdateQuery($data,$qtyArray,$inventoryCollectionResult,$tableVendorInventory,false);
|
538 |
+
|
539 |
+
try {
|
540 |
+
if(!$this->updateProductInventory(trim($data['magento_sku']),$qtyArray['final_qty']))
|
541 |
+
{
|
542 |
+
$this->_UploadCsvErrors[] = array('error_type'=>'inventory_update_error','value'=>array('magento_sku'=>$data['magento_sku'],'qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
543 |
+
return false;
|
544 |
+
}
|
545 |
+
if($update){
|
546 |
+
$this->conn->beginTransaction ();
|
547 |
+
$this->conn->query($update);
|
548 |
+
$this->conn->commit ();
|
549 |
+
}
|
550 |
+
return true;
|
551 |
+
} catch ( Exception $e ) {
|
552 |
+
$this->conn->rollBack ();
|
553 |
+
$this->_errors[] = $e->getMessage();
|
554 |
+
$this->_errors[] = $e->getTrace();
|
555 |
+
Mage::log($e->getMessage(), Zend_Log::ERR);
|
556 |
+
Mage::logException($e);
|
557 |
+
echo $e->getMessage();
|
558 |
+
}
|
559 |
+
|
560 |
+
}else
|
561 |
+
{
|
562 |
+
$this->_UploadCsvErrors[] = array('error_type'=>'magento_sku_exists','value'=>array('magento_sku'=>$data['magento_sku'],'qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
563 |
+
return false;
|
564 |
+
}
|
565 |
+
break;
|
566 |
+
case 'productsetup' :
|
567 |
+
$productId = Mage::getModel('catalog/product')->getIdBySku($data['magento_sku']);
|
568 |
+
if($productId){
|
569 |
+
$qtyInsert = $qtyArray['upload_qty'];
|
570 |
+
$costInsert = $data['cost'];
|
571 |
+
$insert = 'INSERT INTO '.$tableVendorInventory.' (amosoft_vendor_code,amosoft_vendor_name,product_sku,amosoft_vendor_sku,stock,cost,created_at,updated_at) VALUES ("'.$data['amosoft_vendor_code'].'","'.$this->getVendorName($data['amosoft_vendor_code']).'","'.$data['magento_sku'].'","'.$data['vendor_sku'].'",'.$qtyInsert.','.$costInsert.',"'.now().'","'.now().'")';
|
572 |
+
try {
|
573 |
+
if(!$this->updateProductInventory($data['magento_sku'],$qtyArray['final_qty']))
|
574 |
+
{
|
575 |
+
$this->_UploadCsvErrors[] = array('error_type'=>'inventory_add_error','value'=>array('magento_sku'=>$data['magento_sku'],'qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
576 |
+
return false;
|
577 |
+
}
|
578 |
+
$this->conn->beginTransaction ();
|
579 |
+
$this->conn->query($insert);
|
580 |
+
$this->conn->commit ();
|
581 |
+
return true;
|
582 |
+
} catch ( Exception $e ) {
|
583 |
+
$this->conn->rollBack ();
|
584 |
+
$this->_errors[] = $e->getMessage();
|
585 |
+
$this->_errors[] = $e->getTrace();
|
586 |
+
Mage::log($e->getMessage(), Zend_Log::ERR);
|
587 |
+
Mage::logException($e);
|
588 |
+
echo $e->getMessage();
|
589 |
+
}
|
590 |
+
}
|
591 |
+
break;
|
592 |
+
case 'addnotallowed':
|
593 |
+
|
594 |
+
//$this->_UploadCsvErrors['general_error'][] = 'Add error: Cannot create new entry for vendor sku <b>' .$data['vendor_sku'].'</b>';
|
595 |
+
return false;
|
596 |
+
break;
|
597 |
+
}
|
598 |
+
return true;
|
599 |
+
|
600 |
+
}
|
601 |
+
|
602 |
+
protected function _prepareUpdateQuery($data,$qtyArray,$inventoryCollectionResult,$tableVendorInventory,$isFtp)
|
603 |
+
{
|
604 |
+
$update;
|
605 |
+
(!is_numeric($data['cost']) || $data['cost'] < 0 || trim($data['cost']) =="") ? $costUpdate = '' : $costUpdate = 'cost ='. $data['cost'] . ',';
|
606 |
+
($qtyArray['upload_qty'] == .999999999 || trim($data['qty']) =="" ) ? $qtyUpdate = '' : $qtyUpdate = ' stock = '.$qtyArray['upload_qty']. ',';
|
607 |
+
if(!$isFtp){
|
608 |
+
($costUpdate=='' && $qtyUpdate =='' && !$this->_isProductSetupMode) ? $timeUpdate = "" : $timeUpdate = ' updated_at = "'.now(). '",';
|
609 |
+
$vSkuUpdate = ' amosoft_vendor_sku = "'.$data['vendor_sku']. '"';
|
610 |
+
$update = 'update '.$tableVendorInventory.' set '.$costUpdate.$qtyUpdate.$timeUpdate.$vSkuUpdate.' where id = '.$inventoryCollectionResult['vendor_id'];
|
611 |
+
}else
|
612 |
+
{
|
613 |
+
if(trim($data['qty'])!='' || trim($data['cost']) !='')
|
614 |
+
$update = 'update '.$tableVendorInventory.' set '.$costUpdate. $qtyUpdate.' updated_at = "'.now().'" where id = '.$inventoryCollectionResult['vendor_id'];
|
615 |
+
}
|
616 |
+
return $update;
|
617 |
+
}
|
618 |
+
protected function getInventoryLogQuery($data,$type,$qty,$updateBy=null,$ignoreData)
|
619 |
+
{
|
620 |
+
if(count($ignoreData)>0){
|
621 |
+
if($type=='update'){
|
622 |
+
(in_array('qty', $ignoreData)) ? $type = 'Cost Updated, Qty Ignored' : '';
|
623 |
+
(in_array('cost', $ignoreData)) ? $type = 'Qty Updated, Cost Ignored' : '';
|
624 |
+
}else{
|
625 |
+
(in_array('qty', $ignoreData)) ? $type = 'Cost Added, Qty Ignored' : '';
|
626 |
+
(in_array('cost', $ignoreData)) ? $type = 'Qty Added, Cost Ignored' : '';
|
627 |
+
}
|
628 |
+
if(count($ignoreData)==2){
|
629 |
+
$type = 'ignore';
|
630 |
+
}
|
631 |
+
}
|
632 |
+
if($qty==0.999999999)
|
633 |
+
$qty = 0;
|
634 |
+
$vendorRankModel = Mage::getModel('dropship/ranking')->load($data['amosoft_vendor_code'],'amosoft_vendor_code');
|
635 |
+
$vendorName = $vendorRankModel->getAmosoftVendorName();
|
636 |
+
|
637 |
+
$tableName = Mage::getSingleton("core/resource")->getTableName('dropship/inventorylog');
|
638 |
+
if(!$updateBy){
|
639 |
+
$updateBy = Mage::getSingleton('admin/session')->getUser()->getUsername();
|
640 |
+
}
|
641 |
+
if(isset($data["pucost"]) && isset($data["puqty"])){
|
642 |
+
$data['cost']= $data["pucost"];
|
643 |
+
$qty = $data["puqty"];
|
644 |
+
}
|
645 |
+
if(isset($data["pucost"]) && isset($data["puqty"])){
|
646 |
+
$data['cost']= $data["pucost"];
|
647 |
+
$qty = $data["puqty"];
|
648 |
+
}
|
649 |
+
return 'INSERT INTO '.$tableName.' (amosoft_vendor_code,amosoft_vendor_name,product_sku,cost,stock,updated_by,activity,updated_at,created_at) VALUES ("'.$data['amosoft_vendor_code'].'","'.$vendorName.'","'.$data['magento_sku'].'","'.$data['cost'].'","'.$qty.'","'.$updateBy.'","'.$type.'","'.now().'","'.now().'")';
|
650 |
+
}
|
651 |
+
|
652 |
+
protected function getInventoryCollection($data,$isFtp = false,$log = false)
|
653 |
+
{
|
654 |
+
$spacesTrimmedSku = $this->getTrimmedSku();
|
655 |
+
$searchedSku = array_search(trim($data['vendor_sku']), $spacesTrimmedSku);
|
656 |
+
$vendorCollection = $this->_inventoryModel->getCollection()->addFieldTofilter('amosoft_vendor_code',$data['amosoft_vendor_code'])->addFieldTofilter('amosoft_vendor_sku',trim($data['vendor_sku']));
|
657 |
+
if(isset($data['operationType'])){
|
658 |
+
if($this->_isProductSetupMode && $data['operationType'] == 'update'){
|
659 |
+
if($data['operationType'] == 'update')
|
660 |
+
$vendorCollection = $this->_inventoryModel->getCollection()->addFieldTofilter('amosoft_vendor_code',$data['amosoft_vendor_code'])->addFieldTofilter('product_sku',trim($data['magento_sku']));
|
661 |
+
}
|
662 |
+
}
|
663 |
+
if($searchedSku){
|
664 |
+
$vendorCollection = $this->_inventoryModel->getCollection()->addFieldTofilter('amosoft_vendor_code',$data['amosoft_vendor_code'])->addFieldTofilter('amosoft_vendor_sku',$searchedSku);
|
665 |
+
}
|
666 |
+
if($vendorCollection->getSize() > 0 || (isset($data['operationType']) && $data['operationType']=="update")){
|
667 |
+
$result = array('operationType'=> 'update','vendor_id'=>$vendorCollection->getFirstItem ()->getId(),'magento_sku'=>$vendorCollection->getFirstItem ()->getProductSku());
|
668 |
+
$data['magento_sku'] = $vendorCollection->getFirstItem ()->getProductSku();
|
669 |
+
}else{
|
670 |
+
if($log){
|
671 |
+
$isDuplicate = false;
|
672 |
+
if(in_array($data['vendor_sku'],$this->_vendorSkuFlag)){
|
673 |
+
$isDuplicate = true;
|
674 |
+
}
|
675 |
+
else{
|
676 |
+
$this->_vendorSkuFlag[] = $data['vendor_sku'];
|
677 |
+
}
|
678 |
+
if($isDuplicate){
|
679 |
+
$result = array('operationType'=> 'ignore','vendor_id'=>'');
|
680 |
+
}else{
|
681 |
+
$result = ($this->_isProductSetupMode) ? array('operationType'=> 'productsetup','vendor_id'=>'','magento_sku'=>$data['magento_sku']) :
|
682 |
+
array('operationType'=> 'addnotallowed','vendor_id'=>'','magento_sku'=>null);
|
683 |
+
}
|
684 |
+
}else{
|
685 |
+
$result = ($this->_isProductSetupMode) ? array('operationType'=> 'productsetup','vendor_id'=>'','magento_sku'=>$data['magento_sku']) :
|
686 |
+
array('operationType'=> 'addnotallowed','vendor_id'=>'','magento_sku'=>null);
|
687 |
+
}
|
688 |
+
}
|
689 |
+
return $result;
|
690 |
+
}
|
691 |
+
|
692 |
+
protected function updateProductInventory($sku,$qty)
|
693 |
+
{
|
694 |
+
if($qty == .999999999){
|
695 |
+
return true;
|
696 |
+
}
|
697 |
+
$productId = Mage::getModel('catalog/product')->getIdBySku($sku);
|
698 |
+
if($productId){
|
699 |
+
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
|
700 |
+
if (!$stockItem->getId()) {
|
701 |
+
$stockItem->setData('product_id', $productId);
|
702 |
+
$stockItem->setData('stock_id', 1);
|
703 |
+
}
|
704 |
+
|
705 |
+
if ($stockItem->getQty() != $qty) {
|
706 |
+
$stockItem->setData('qty', $qty);
|
707 |
+
$stockItem->setData('is_in_stock', $qty ? 1 : 0);
|
708 |
+
try {
|
709 |
+
$stockItem->save();
|
710 |
+
return true;
|
711 |
+
} catch (Exception $e) {
|
712 |
+
echo $e->getMessage();
|
713 |
+
}
|
714 |
+
|
715 |
+
}
|
716 |
+
}else{
|
717 |
+
return false;
|
718 |
+
}
|
719 |
+
return true;
|
720 |
+
}
|
721 |
+
|
722 |
+
/* prepare downloadable sample CSV file for user */
|
723 |
+
public function getCsvFile($isProductSetupMode = false)
|
724 |
+
{
|
725 |
+
$io = new Varien_Io_File();
|
726 |
+
$path = Mage::getBaseDir('var') . DS . 'export' . DS;
|
727 |
+
$name = md5(microtime());
|
728 |
+
$file = $path . DS . $name;
|
729 |
+
|
730 |
+
$io->setAllowCreateFolders(true);
|
731 |
+
$io->open(array('path' => $path));
|
732 |
+
$io->streamOpen($file, 'w+');
|
733 |
+
$io->streamLock(true);
|
734 |
+
($isProductSetupMode) ? $io->streamWriteCsv(array('magento_sku','vendor_sku')) : $io->streamWriteCsv(array('vendor_sku','qty','cost'));
|
735 |
+
$io->streamUnlock();
|
736 |
+
$io->streamClose();
|
737 |
+
return array(
|
738 |
+
'type' => 'filename',
|
739 |
+
'value' => $file,
|
740 |
+
'rm' => true // can delete file after use
|
741 |
+
);
|
742 |
+
}
|
743 |
+
|
744 |
+
protected function getVendorName($vendorCode)
|
745 |
+
{
|
746 |
+
return Mage::getModel('dropship/ranking')->load($vendorCode,'amosoft_vendor_code')->getAmosoftVendorName();
|
747 |
+
}
|
748 |
+
|
749 |
+
|
750 |
+
/*
|
751 |
+
*
|
752 |
+
* logic to Import CSV file from amosoft FTP for vendor inventory cost
|
753 |
+
*
|
754 |
+
*
|
755 |
+
*/
|
756 |
+
public function testFtpConnection($request,$isFtp = false)
|
757 |
+
{
|
758 |
+
$ftpServer = $request['ftp_site'];
|
759 |
+
$ftpUserName = $request['ftp_username'];
|
760 |
+
$ftpPassword = $request['ftp_password'];
|
761 |
+
$ftpType = $request['ftp_type'];
|
762 |
+
try {
|
763 |
+
if($ftpType['value'] == 'ftp'){
|
764 |
+
$ftpcon = ftp_connect($ftpServer['value']);
|
765 |
+
}else{
|
766 |
+
if(function_exists('ftp_ssl_connect'))
|
767 |
+
$ftpcon = ftp_ssl_connect($ftpServer['value']);
|
768 |
+
else
|
769 |
+
return array('error'=>true,'message' => 'System does not support secure ftp');
|
770 |
+
}
|
771 |
+
if (false === $ftpcon) {
|
772 |
+
|
773 |
+
return array('error'=>true,'message' => 'Unable to connect');
|
774 |
+
}
|
775 |
+
$loggedIn = @ftp_login($ftpcon, $ftpUserName['value'], $ftpPassword['value']);
|
776 |
+
ftp_pasv($ftpcon, true);
|
777 |
+
if (false === $loggedIn) {
|
778 |
+
return array('error'=>true,'message' => 'Unable to log in');
|
779 |
+
}
|
780 |
+
if(!$isFtp)
|
781 |
+
ftp_close($ftpcon);
|
782 |
+
} catch (Exception $e) {
|
783 |
+
return array('error'=>true,'message' => $e->getMessage());
|
784 |
+
|
785 |
+
}
|
786 |
+
if($isFtp)
|
787 |
+
return array('error'=>false,'message' => null,'object'=>$ftpcon);
|
788 |
+
else
|
789 |
+
return array('error'=>false,'message' => null);
|
790 |
+
}
|
791 |
+
|
792 |
+
/*
|
793 |
+
*
|
794 |
+
* Ftp function call by observer from where program execution started
|
795 |
+
*
|
796 |
+
*/
|
797 |
+
public function ftpParseCsv()
|
798 |
+
{
|
799 |
+
if(Mage::helper('dropship')->isProcessRunning('bulk_assign')){
|
800 |
+
$message = 'Bulk product setup is currently running hence cannot run ftp import';
|
801 |
+
Mage::log($message, null, 'amosoft_log_report.log');
|
802 |
+
return;
|
803 |
+
}
|
804 |
+
$ftpfileName = array();
|
805 |
+
$this->ftpRequestPram = array('ftp_site'=>array('value'=> $this->getConfigValue(self::XML_PATH_UPLOAD_FTP_SITE)),'ftp_username'=>array('value'=> $this->getConfigValue(self::XML_PATH_UPLOAD_FTP_USERNAME)),'ftp_password'=>array('value'=> Mage::helper('core')->decrypt($this->getConfigValue(self::XML_PATH_UPLOAD_FTP_PASSWORD))),'ftp_type'=>array('value'=> $this->getConfigValue(self::XML_PATH_UPLOAD_FTP_TYPE)));
|
806 |
+
|
807 |
+
if (! Mage::getStoreConfigFlag ( self::XML_PATH_UPLOAD_ENABLED )) {
|
808 |
+
return $this;
|
809 |
+
}
|
810 |
+
$connectionResult = $this->testFtpConnection($this->ftpRequestPram,true);
|
811 |
+
if($connectionResult['error']){
|
812 |
+
$this->sendMail(array('subject'=>'Your magento site has failed to connect FTP site','message' => 'Connection Failure','bcc'=>trim(Mage::helper('dropship')->getConfigObject('apiconfig/email/bcc'))));
|
813 |
+
$this->genrateLogEntry(array('ftp_error'=>'Connection error','ftp_error_desc'=>$connectionResult['message'],'error'=> 1));
|
814 |
+
Mage::log($connectionResult['message'], null, 'amosoft_ftp_vendor_inventory_import.log');
|
815 |
+
ftp_close($connectionResult['object']);
|
816 |
+
return $this;
|
817 |
+
}
|
818 |
+
|
819 |
+
$rankCollection = Mage::getModel('dropship/ranking')->getCollection()->addFieldToFilter('is_dropship','yes');
|
820 |
+
/* file path format <ftp site>/<Amosoft Account Number>_MagVendID<number>/Inventory/ */
|
821 |
+
|
822 |
+
if($rankCollection->getSize() > 0){
|
823 |
+
foreach($rankCollection as $ranks){
|
824 |
+
$path = $this->getConfigValue(self::XML_PATH_UPLOAD_FTP_ACCNUMBER).'_'.$ranks->getAmosoftVendorCode().'/'.'Inventory';
|
825 |
+
$ftpFiles = array();
|
826 |
+
$ftpFilesList = ftp_nlist($connectionResult['object'],$path);
|
827 |
+
//patch for sort ftp files by time
|
828 |
+
if($ftpFilesList){
|
829 |
+
foreach ($ftpFilesList as $value) {
|
830 |
+
if(preg_match("/.csv$/i", $value, $match)){
|
831 |
+
$fileTime = ftp_mdtm($connectionResult['object'], $value);
|
832 |
+
if(array_key_exists($fileTime,$ftpFiles))
|
833 |
+
$ftpFiles[$fileTime+20] = $value; // if timestamp same for files
|
834 |
+
else
|
835 |
+
$ftpFiles[$fileTime] = $value;
|
836 |
+
}
|
837 |
+
}
|
838 |
+
ksort($ftpFiles); // sort associative arrays in acending order, according to the key(time)
|
839 |
+
}
|
840 |
+
if($ftpFiles){
|
841 |
+
foreach($ftpFiles as $file){
|
842 |
+
if($this->downloadFtpFile($connectionResult['object'],$file,$path, $ranks->getAmosoftVendorCode()))
|
843 |
+
$ftpfileName[$ranks->getAmosoftVendorCode()][] = self::getWorkingDir().str_replace("\\","/",$path).DS.$this->downloadFtpFile($connectionResult['object'],$file,$path);
|
844 |
+
}
|
845 |
+
}
|
846 |
+
ftp_chdir($connectionResult['object'],'/');
|
847 |
+
}
|
848 |
+
}else{
|
849 |
+
$this->genrateLogEntry(array('ftp_error'=>'Import Error','ftp_error_desc'=>'No dropship supplier found','error'=> 1));
|
850 |
+
Mage::log('No dropship supplier found', null, 'amosoft_ftp_vendor_inventory_import.log');
|
851 |
+
ftp_close($connectionResult['object']);
|
852 |
+
return $this;
|
853 |
+
}
|
854 |
+
if(!empty($ftpfileName)){
|
855 |
+
$this->initialize();
|
856 |
+
$this->_csvParserObj->emptyTable();
|
857 |
+
$this->_csvDataCache = array();
|
858 |
+
Mage::helper('dropship')->turnOnReadUncommittedMode(); //dirty read patch
|
859 |
+
foreach($ftpfileName as $vendorCode=>$fileinfo)
|
860 |
+
{
|
861 |
+
$this->_vendorCode = $vendorCode;
|
862 |
+
foreach($fileinfo as $path){
|
863 |
+
if($this->validateCsvHeader($this->_getCsvData($path,true),true)){
|
864 |
+
Mage::helper('dropship')->turnOnReadUncommittedMode(); // dirty read patch
|
865 |
+
$this->ftpUpdateVendorProduct($this->_getCsvData($path),$path,$vendorCode);
|
866 |
+
Mage::helper('dropship')->turnOnReadCommittedMode(); //restore to orignal trasectional level
|
867 |
+
$this->_csvDataCache = array();//for more than one csv file on FTP server
|
868 |
+
|
869 |
+
}else{
|
870 |
+
$this->_csvDataCache = array();
|
871 |
+
$logPath = explode('amosoftvendorproduct',str_replace("\\","/",$path));
|
872 |
+
$this->sendMail(array('isfailed'=>true,'vendor_code'=>$vendorCode,'subject'=>'dropship failed to update inventory','message' => 'Bad File header,Check header format at following FTP path '.$logPath[1]));
|
873 |
+
$this->genrateLogEntry(array('amosoft_vendor_code'=>$vendorCode,'ftp_error'=>'Bad File header','ftp_error_desc'=>'Check header format at following FTP path '.$logPath[1],'error'=> 1));
|
874 |
+
Mage::log('Please check header format', null, 'amosoft_ftp_vendor_inventory_import.log');
|
875 |
+
}
|
876 |
+
//fix move file to archive folder in all cases
|
877 |
+
$this->archiveFtpFile(array('object'=>$connectionResult['object'],'path'=>$path));
|
878 |
+
}
|
879 |
+
}
|
880 |
+
$this->finalize();
|
881 |
+
}else{
|
882 |
+
Mage::log('No files found on ftp server', null, 'amosoft_ftp_vendor_inventory_import.log');
|
883 |
+
ftp_close($connectionResult['object']);
|
884 |
+
return $this;
|
885 |
+
}
|
886 |
+
ftp_close($connectionResult['object']);
|
887 |
+
$this->_csvParserObj->emptyTable();
|
888 |
+
$this->_csvDataCache = array();
|
889 |
+
Mage::helper('dropship')->turnOnReadCommittedMode(); //restore to orignal transection level
|
890 |
+
return $this;
|
891 |
+
}
|
892 |
+
|
893 |
+
protected function initialize(){
|
894 |
+
Mage::helper('dropship')->startProcess('manual_upload');
|
895 |
+
Mage::log('Ftp upload started', null, 'amosoft_ftp_vendor_inventory_import.log');
|
896 |
+
}
|
897 |
+
|
898 |
+
protected function finalize(){
|
899 |
+
Mage::helper('dropship')->finishProcess('manual_upload');
|
900 |
+
Mage::log('Ftp upload finished', null, 'amosoft_ftp_vendor_inventory_import.log');
|
901 |
+
}
|
902 |
+
|
903 |
+
protected function archiveFtpFile($object)
|
904 |
+
{
|
905 |
+
$path = str_replace("\\","/",$object['path']);
|
906 |
+
$patharr = explode('amosoftvendorproduct',$path);
|
907 |
+
$dirname = pathinfo($patharr[1],PATHINFO_DIRNAME);
|
908 |
+
$basename = pathinfo($patharr[1],PATHINFO_BASENAME );
|
909 |
+
$newname = Mage::getModel('core/date')->date('Ymd-his').'_'.$basename;
|
910 |
+
$connection = $this->testFtpConnection($this->ftpRequestPram,true);
|
911 |
+
if($connection['error'])
|
912 |
+
{
|
913 |
+
$this->sendMail(array('subject'=>'Your magento site has failed to connect FTP site','message' => "Connection Failure--Can not archive file -".$basename,'bcc'=>trim(Mage::helper('dropship')->getConfigObject('apiconfig/email/bcc'))));
|
914 |
+
Mage::log($connection['message'] ."--Can not archive file -".$basename, null, 'amosoft_ftp_vendor_inventory_import.log');
|
915 |
+
}
|
916 |
+
else
|
917 |
+
{
|
918 |
+
$object['object'] = $connection['object'];
|
919 |
+
}
|
920 |
+
ftp_chdir($object['object'],$dirname);
|
921 |
+
ftp_mkdir($object['object'], 'Archive');
|
922 |
+
ftp_chdir($object['object'],'Archive');
|
923 |
+
ftp_put($object['object'], $basename, $path, FTP_ASCII);
|
924 |
+
ftp_rename ($object['object'],$basename,$newname);
|
925 |
+
ftp_chdir($object['object'],'/');
|
926 |
+
$this->fileObj()->rm($object['path']);
|
927 |
+
ftp_delete($object['object'], $dirname.'/'.$basename);
|
928 |
+
ftp_close($connection['object']);
|
929 |
+
return;
|
930 |
+
|
931 |
+
}
|
932 |
+
protected function validateFtpFile($file, $vendorCode = null)
|
933 |
+
{
|
934 |
+
$file = str_replace("/","\\",$file);
|
935 |
+
$extension = pathinfo($file, PATHINFO_EXTENSION);
|
936 |
+
return true;
|
937 |
+
}
|
938 |
+
|
939 |
+
protected function downloadFtpFile($ftpRequest,$file,$path, $vendorCode = null)
|
940 |
+
{
|
941 |
+
if(!file_exists(self::getWorkingDir().$path)){
|
942 |
+
$patharr = explode('/',$path);
|
943 |
+
$this->fileObj()->mkdir(self::getWorkingDir().$patharr[0]);
|
944 |
+
$this->fileObj()->chmod(self::getWorkingDir().$patharr[0],0777);
|
945 |
+
$this->fileObj()->mkdir(self::getWorkingDir().$patharr[0].'/'.$patharr[1]);
|
946 |
+
$this->fileObj()->chmod(self::getWorkingDir().$patharr[0].'/'.$patharr[1],0777);
|
947 |
+
}
|
948 |
+
$fileName = explode('/',$file);
|
949 |
+
|
950 |
+
ftp_chdir($ftpRequest,'/'.$fileName[0].'/'.$fileName[1]);
|
951 |
+
$server_file = $fileName[2];
|
952 |
+
$local_file = self::getWorkingDir().$path.DS.$fileName[2];
|
953 |
+
// download server file
|
954 |
+
if (ftp_get($ftpRequest, $local_file, $server_file, FTP_ASCII)){
|
955 |
+
|
956 |
+
return $fileName[2];
|
957 |
+
}else{
|
958 |
+
return false;
|
959 |
+
}
|
960 |
+
}
|
961 |
+
|
962 |
+
protected function uploadReport($file,$vendorCode){
|
963 |
+
$path = $this->getConfigValue(self::XML_PATH_UPLOAD_FTP_ACCNUMBER).'_'.$vendorCode.'/'.'Inventory';
|
964 |
+
$reprotPath = 'report'.Mage::getModel('core/date')->date('Ymd-his').'.csv';
|
965 |
+
$connection = $this->testFtpConnection($this->ftpRequestPram,true);
|
966 |
+
if($connection['error'])
|
967 |
+
{
|
968 |
+
$this->sendMail(array('subject'=>'Your magento site has failed to connect FTP site','message' => "Connection Failure--Can not upload report file -".$basename,'bcc'=>trim(Mage::helper('dropship')->getConfigObject('apiconfig/email/bcc'))));
|
969 |
+
Mage::log($connection['message'] ."--Can not archive file -".$basename, null, 'amosoft_ftp_vendor_inventory_import.log');
|
970 |
+
}
|
971 |
+
else
|
972 |
+
{
|
973 |
+
$object = $connection['object'];
|
974 |
+
}
|
975 |
+
ftp_chdir($object,'/');
|
976 |
+
ftp_chdir($object,$path);
|
977 |
+
ftp_mkdir($object,'Reports');
|
978 |
+
ftp_chdir($object,'Reports');
|
979 |
+
ftp_put($object, $reprotPath,$file['value'], FTP_ASCII);
|
980 |
+
ftp_chdir($object,'/');
|
981 |
+
$this->fileObj()->rm( $file['value']);
|
982 |
+
ftp_close($connection['object']);
|
983 |
+
return;
|
984 |
+
}
|
985 |
+
protected function ftpUpdateVendorProduct($csvData,$path,$vendorCode = null)
|
986 |
+
{
|
987 |
+
$records = array();
|
988 |
+
$success = array();
|
989 |
+
$failure = array();
|
990 |
+
$itemerroroutput = array();
|
991 |
+
$counter = 0;
|
992 |
+
//$vendorCode = '';
|
993 |
+
$tableVendorImportLog = Mage::getSingleton ( 'core/resource' )->getTableName ( 'dropship/vendor_import_log' );
|
994 |
+
if(count($csvData) <= 1 && Mage::getModel('dropship/csvparser')->isCsvFileEmpty())
|
995 |
+
{
|
996 |
+
$failure[] = 'Sorry,we cant find the record to update inventory';
|
997 |
+
$this->_FtpErrors[] = array('error_type'=>'empty_file','value'=>'Sorry,we cant find the record to update inventory');
|
998 |
+
}
|
999 |
+
$records = Mage::getModel('dropship/csvparser')->generateFtpCsvRow($csvData,$vendorCode);
|
1000 |
+
//$this->conn->beginTransaction ();
|
1001 |
+
if(is_array($records) && !empty($records)){
|
1002 |
+
$requestData = array_chunk($records, 1, true);
|
1003 |
+
|
1004 |
+
foreach($requestData as $dataArr)
|
1005 |
+
{
|
1006 |
+
foreach($dataArr as $data){
|
1007 |
+
$result[] = $this->validateCsvData($data, true);
|
1008 |
+
}
|
1009 |
+
}
|
1010 |
+
foreach($result as $successOrfail){
|
1011 |
+
if($successOrfail['success']!="")
|
1012 |
+
$success[] = $successOrfail['success'];
|
1013 |
+
if($successOrfail['failure']!="")
|
1014 |
+
$failure[] = $successOrfail['failure'];
|
1015 |
+
|
1016 |
+
}
|
1017 |
+
$this->checkDataIntigrity($this->_getCsvData($path),true);
|
1018 |
+
}
|
1019 |
+
$finalResultCounter = (!$this->_isProductSetupMode) ? $this->logForUnprocessedRows($vendorCode,true) : 0;
|
1020 |
+
if(is_array($finalResultCounter))
|
1021 |
+
{
|
1022 |
+
$failed = count($failure)+$finalResultCounter['failure'];
|
1023 |
+
$success = count($success)+$finalResultCounter['success'];
|
1024 |
+
}else
|
1025 |
+
{
|
1026 |
+
$failed = count($failure)+$finalResultCounter;
|
1027 |
+
$success = count($success)+$finalResultCounter;
|
1028 |
+
}
|
1029 |
+
$itemerroroutput = Mage::helper('core')->jsonEncode($this->_FtpErrors);
|
1030 |
+
//$failed = count($failure)+$counter;
|
1031 |
+
$ftp_err = ($failed > 0) ? 'Missing/Bad Data' : '';
|
1032 |
+
$insert = 'INSERT INTO '.$tableVendorImportLog.'(amosoft_vendor_code,updated_by,success,failure,ftp_error,created_at) VALUES ("'.$vendorCode.'","FTP",'.$success.','.$failed.',"'.$ftp_err.'","'.now().'")';
|
1033 |
+
$this->conn->beginTransaction ();
|
1034 |
+
$this->conn->query($insert);
|
1035 |
+
$entityId = $this->conn->lastInsertId($tableVendorImportLog);
|
1036 |
+
try {
|
1037 |
+
$this->conn->commit ();
|
1038 |
+
if(count($this->_FtpErrors) > 0){
|
1039 |
+
$csvFile = Mage::helper('dropship')->generateErrorList(array('ftp_error_desc'=>$itemerroroutput,'amosoft_vendor_code'=>$vendorCode),true);
|
1040 |
+
$this->uploadReport($csvFile,$vendorCode);
|
1041 |
+
}
|
1042 |
+
if($this->sendBadFileAlert){
|
1043 |
+
$logPath = explode('amosoftvendorproduct',str_replace("\\","/",$path));
|
1044 |
+
$this->sendMail(array('isfailed'=>true,'vendor_code'=>$vendorCode,'subject'=>'dropship failed to update inventory','message' => 'Missing/Bad data, check CSV data at following FTP path <br>'.$logPath[1]));
|
1045 |
+
}
|
1046 |
+
$this->prepareInsertAndExeQuery($this->_FtpErrors,$entityId);
|
1047 |
+
$itemerroroutput = array();
|
1048 |
+
$this->_FtpErrors = array();
|
1049 |
+
} catch ( Exception $e ) {
|
1050 |
+
$this->conn->rollBack ();
|
1051 |
+
Mage::log($e->getMessage(), null, 'amosoft_ftp_vendor_inventory_import.log');
|
1052 |
+
echo $e->getMessage();
|
1053 |
+
|
1054 |
+
}
|
1055 |
+
}
|
1056 |
+
|
1057 |
+
protected function ftpVendorProductUpdate($data)
|
1058 |
+
{
|
1059 |
+
$tableVendorInventory = Mage::getSingleton ( 'core/resource' )->getTableName ( 'dropship/inventory' );
|
1060 |
+
$inventoryCollectionResult = $this->getInventoryCollection($data,true);
|
1061 |
+
$qtyArray = $this->calculateProductQty(array('magento_sku'=>$inventoryCollectionResult['magento_sku'],'qty'=>$data['qty'],'amosoft_vendor_code'=>$data['amosoft_vendor_code']));
|
1062 |
+
switch($inventoryCollectionResult['operationType'])
|
1063 |
+
{
|
1064 |
+
case 'update':
|
1065 |
+
$productId = Mage::getModel('catalog/product')->getIdBySku($inventoryCollectionResult['magento_sku']);
|
1066 |
+
if($productId){
|
1067 |
+
$update = $this->_prepareUpdateQuery($data,$qtyArray,$inventoryCollectionResult,$tableVendorInventory,true);
|
1068 |
+
try {
|
1069 |
+
if(!$this->updateProductInventory($inventoryCollectionResult['magento_sku'],$qtyArray['final_qty']))
|
1070 |
+
{
|
1071 |
+
$this->_FtpErrors[] = array('error_type'=>'inventory_update_error','value'=>array('magento_sku'=>$inventoryCollectionResult['magento_sku'],'qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));;
|
1072 |
+
$this->sendBadFileAlert = true;
|
1073 |
+
return false;
|
1074 |
+
}
|
1075 |
+
if($update){
|
1076 |
+
$this->conn->beginTransaction ();
|
1077 |
+
$this->conn->query($update);
|
1078 |
+
$this->conn->commit ();
|
1079 |
+
}
|
1080 |
+
return true;
|
1081 |
+
} catch ( Exception $e ) {
|
1082 |
+
$this->conn->rollBack ();
|
1083 |
+
Mage::log($e->getMessage(), null, 'amosoft_ftp_vendor_inventory_import.log');
|
1084 |
+
echo $e->getMessage();
|
1085 |
+
}
|
1086 |
+
|
1087 |
+
}else{
|
1088 |
+
$this->_FtpErrors[] = array('error_type'=>'combination_notexist','value'=>array('magento_sku'=>'','qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
1089 |
+
$this->sendBadFileAlert = true;
|
1090 |
+
return false;
|
1091 |
+
}
|
1092 |
+
break;
|
1093 |
+
default :
|
1094 |
+
$this->_FtpErrors[] = array('error_type'=>'combination_notexist','value'=>array('magento_sku'=>'','qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));;
|
1095 |
+
$this->sendBadFileAlert = true;
|
1096 |
+
return false;
|
1097 |
+
}
|
1098 |
+
return true;
|
1099 |
+
}
|
1100 |
+
|
1101 |
+
protected function genrateLogEntry($message)
|
1102 |
+
{
|
1103 |
+
$vendorCode = (!empty($message['amosoft_vendor_code'])) ? $message['amosoft_vendor_code'] : '';
|
1104 |
+
$ftp_error = (!empty($message['ftp_error'])) ? $message['ftp_error'] : '';
|
1105 |
+
$ftp_error_desc = (!empty($message['ftp_error_desc'])) ? $message['ftp_error_desc'] : '';
|
1106 |
+
$tableVendorImportLog = Mage::getSingleton ( 'core/resource' )->getTableName ( 'dropship/vendor_import_log' );
|
1107 |
+
$this->conn->beginTransaction ();
|
1108 |
+
$now = now();
|
1109 |
+
$insert = 'INSERT INTO '.$tableVendorImportLog.'(amosoft_vendor_code,updated_by,success,failure,created_at,ftp_error,ftp_error_desc) VALUES ("'.$vendorCode.'","FTP",'.count($success).','.$message['error'].',"'.$now.'","'.$ftp_error.'","'.$ftp_error_desc.'")';
|
1110 |
+
$this->conn->query($insert);
|
1111 |
+
try {
|
1112 |
+
$this->conn->commit ();
|
1113 |
+
} catch ( Exception $e ) {
|
1114 |
+
$this->conn->rollBack ();
|
1115 |
+
Mage::log($e->getMessage(), null, 'amosoft_ftp_vendor_inventory_import.log');
|
1116 |
+
echo $e->getMessage();
|
1117 |
+
|
1118 |
+
}
|
1119 |
+
}
|
1120 |
+
|
1121 |
+
/**
|
1122 |
+
* Check csv data for qty and cost values
|
1123 |
+
* @param array $data, bool $isFtp
|
1124 |
+
* @return array
|
1125 |
+
*/
|
1126 |
+
protected function validateCsvData($data, $isFtp=false){
|
1127 |
+
$invalidData = false;
|
1128 |
+
$success = 0;
|
1129 |
+
$failure = 0;
|
1130 |
+
$ignoreData = array();
|
1131 |
+
|
1132 |
+
$inventoryCollectionResult = $this->getInventoryCollection($data,true,($isFtp) ? false : true);
|
1133 |
+
$data['magento_sku'] = $inventoryCollectionResult['magento_sku'];
|
1134 |
+
|
1135 |
+
if(Mage::getModel('catalog/product')->getIdBySku(trim($data['magento_sku']))){
|
1136 |
+
if(!is_numeric($data['qty']) || $data['qty'] < 0){
|
1137 |
+
$ignoreData[]= 'qty';
|
1138 |
+
}
|
1139 |
+
if(!is_numeric($data['cost']) || $data['cost'] < 0){
|
1140 |
+
$ignoreData[]= 'cost';
|
1141 |
+
}
|
1142 |
+
if((!is_numeric($data['cost']) || $data['cost'] < 0) && (!is_numeric($data['qty']) || $data['qty'] < 0)){
|
1143 |
+
if($data['cost']!="" && $data['qty']!="")
|
1144 |
+
$invalidData = true;
|
1145 |
+
}
|
1146 |
+
|
1147 |
+
if(!$duplicateCombination = $this->chekDuplicateCombination($data)){
|
1148 |
+
$invalidData = true;
|
1149 |
+
if(!$isFtp){
|
1150 |
+
$this->_UploadCsvErrors[] = array('error_type'=>'combination_exist','value'=>array('magento_sku'=>$data['magento_sku'],'qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
1151 |
+
}else{
|
1152 |
+
$this->_FtpErrors[] = array('error_type'=>'combination_exist','value'=>array('magento_sku'=>$data['magento_sku'],'qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
1153 |
+
$this->sendBadFileAlert = true;
|
1154 |
+
}
|
1155 |
+
}
|
1156 |
+
$vendorCollection = $this->_inventoryModel->getCollection()->addFieldTofilter('amosoft_vendor_code',$data['amosoft_vendor_code'])->addFieldTofilter('amosoft_vendor_sku',trim($data['vendor_sku']));
|
1157 |
+
if($vendorCollection->getSize() == 0){
|
1158 |
+
$spacesTrimmedSku = $this->getTrimmedSku();
|
1159 |
+
$searchedSku = array_search(trim($data['vendor_sku']), $spacesTrimmedSku);
|
1160 |
+
if($searchedSku){
|
1161 |
+
$vendorCollection = $this->_inventoryModel->getCollection()->addFieldTofilter('amosoft_vendor_code',$data['amosoft_vendor_code'])->addFieldTofilter('amosoft_vendor_sku',$searchedSku);
|
1162 |
+
}
|
1163 |
+
}
|
1164 |
+
if($vendorCollection->getSize() > 0){
|
1165 |
+
if($data['magento_sku']!=$vendorCollection->getFirstItem ()->getProductSku()){
|
1166 |
+
$invalidData = true;
|
1167 |
+
$this->_UploadCsvErrors[] = array('error_type'=>'already_assigned','value'=>array('magento_sku'=>$data['magento_sku'],'qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
1168 |
+
}
|
1169 |
+
}
|
1170 |
+
if($invalidData){
|
1171 |
+
$failure+=1;
|
1172 |
+
}else{
|
1173 |
+
if($isFtp){
|
1174 |
+
($this->ftpVendorProductUpdate($data)) ? $success += 1 : $failure+=1;
|
1175 |
+
}else{
|
1176 |
+
($this->vendorProductInsert($data)) ? $success += 1 : $failure+=1;
|
1177 |
+
}
|
1178 |
+
|
1179 |
+
}
|
1180 |
+
}else{
|
1181 |
+
$failure+=1;
|
1182 |
+
if(!$isFtp){
|
1183 |
+
if(trim($data['vendor_sku']))
|
1184 |
+
$this->_UploadCsvErrors[] = array('error_type'=>'combination_notexist','value'=>array('magento_sku'=>'','qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
1185 |
+
}else{
|
1186 |
+
if(trim($data['vendor_sku']))
|
1187 |
+
$this->_FtpErrors[] = array('error_type'=>'combination_notexist','value'=>array('magento_sku'=>'','qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
1188 |
+
$this->sendBadFileAlert = true;
|
1189 |
+
}
|
1190 |
+
}
|
1191 |
+
if($data['magento_sku']){
|
1192 |
+
if($isFtp){
|
1193 |
+
$insertInventoryLog = $this->getInventoryLogQuery($data,'update',$data['qty'],'FTP', $ignoreData);
|
1194 |
+
}else{
|
1195 |
+
$insertInventoryLog = $this->getInventoryLogQuery($data, $inventoryCollectionResult['operationType'], $data['qty'], null,$ignoreData);
|
1196 |
+
}
|
1197 |
+
if($insertInventoryLog)
|
1198 |
+
{
|
1199 |
+
$this->conn->beginTransaction ();
|
1200 |
+
$this->conn->query($insertInventoryLog);
|
1201 |
+
try{
|
1202 |
+
$this->conn->commit ();
|
1203 |
+
}catch(Exception $e){
|
1204 |
+
$this->conn->rollBack ();
|
1205 |
+
}
|
1206 |
+
}
|
1207 |
+
}
|
1208 |
+
return array('success'=>$success, 'failure'=>$failure);
|
1209 |
+
}
|
1210 |
+
|
1211 |
+
|
1212 |
+
/**
|
1213 |
+
* Validate product setup data for manual upload
|
1214 |
+
* @param array $data, bool $isFtp
|
1215 |
+
* @return array
|
1216 |
+
*/
|
1217 |
+
protected function validateProductSetupMode($data, $isFtp = false){
|
1218 |
+
$invalidData = false;
|
1219 |
+
$success = 0;
|
1220 |
+
$failure = 0;
|
1221 |
+
$type = "Product Setup";
|
1222 |
+
if(trim($data['vendor_sku'])=="" || trim($data['magento_sku'])==""){
|
1223 |
+
return array('success'=>$success =0, 'failure'=>$failure+=1);
|
1224 |
+
}
|
1225 |
+
if(Mage::getModel('catalog/product')->getIdBySku(trim($data['magento_sku']))){
|
1226 |
+
$collection = $this->_inventoryModel->getCollection()->addFieldTofilter('amosoft_vendor_code',$data['amosoft_vendor_code'])->addFieldTofilter('amosoft_vendor_sku',$data['vendor_sku']);
|
1227 |
+
if($collection->count() > 0){
|
1228 |
+
$existing_product_sku = $collection->getFirstItem()->getProductSku();
|
1229 |
+
if(!empty($existing_product_sku)){
|
1230 |
+
if($data['magento_sku'] != $existing_product_sku){
|
1231 |
+
$invalidData = true;
|
1232 |
+
$this->_UploadCsvErrors[] = array('error_type'=>'duplicate_vendor_sku','value'=>array('magento_sku'=>$data['magento_sku'],'qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
1233 |
+
|
1234 |
+
}else{
|
1235 |
+
$invalidData = true;
|
1236 |
+
$this->_UploadCsvErrors[] = array('error_type'=>'combination_exist','value'=>array('magento_sku'=>$data['magento_sku'],'qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
1237 |
+
}
|
1238 |
+
}
|
1239 |
+
}
|
1240 |
+
$inventoryCollection = $this->_inventoryModel->getCollection()->addFieldTofilter('amosoft_vendor_code',$data['amosoft_vendor_code'])->addFieldTofilter('product_sku',$data['magento_sku']);
|
1241 |
+
if($inventoryCollection->getSize() > 0){
|
1242 |
+
$inventoryCollection = $inventoryCollection->getData();
|
1243 |
+
$inventoryCollection = $inventoryCollection[0];
|
1244 |
+
$existing_vendor_sku = $inventoryCollection['amosoft_vendor_sku'];
|
1245 |
+
if(trim($data['vendor_sku'])!=""){
|
1246 |
+
if($existing_vendor_sku != trim($data['vendor_sku'])){
|
1247 |
+
if($existing_vendor_sku != trim($data['vendor_sku'])){
|
1248 |
+
$data['operationType'] = "update";
|
1249 |
+
$data['cost'] = "";
|
1250 |
+
$data['qty'] = "";
|
1251 |
+
$data['pucost'] = $inventoryCollection['cost'];
|
1252 |
+
$data['puqty'] = $inventoryCollection['stock'];
|
1253 |
+
$type = "Product Update";
|
1254 |
+
}
|
1255 |
+
}
|
1256 |
+
}
|
1257 |
+
}
|
1258 |
+
if($invalidData){
|
1259 |
+
$failure+=1;
|
1260 |
+
}else{
|
1261 |
+
($this->vendorProductInsert($data)) ? $success += 1 : $failure+=1;
|
1262 |
+
if($this->vendorProductInsert($data)){
|
1263 |
+
$insertInventoryLog = $this->getInventoryLogQuery($data, $type, 0, null, null);
|
1264 |
+
if($insertInventoryLog){
|
1265 |
+
$this->conn->beginTransaction ();
|
1266 |
+
$this->conn->query($insertInventoryLog);
|
1267 |
+
try{
|
1268 |
+
$this->conn->commit ();
|
1269 |
+
}catch(Exception $e){
|
1270 |
+
$this->conn->rollBack ();
|
1271 |
+
}
|
1272 |
+
}
|
1273 |
+
}
|
1274 |
+
}
|
1275 |
+
}else{
|
1276 |
+
$failure+=1;
|
1277 |
+
$this->_UploadCsvErrors[] = array('error_type'=>'magento_sku_exists','value'=>array('magento_sku'=>$data['magento_sku'],'qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
1278 |
+
}
|
1279 |
+
return array('success'=>$success, 'failure'=>$failure);
|
1280 |
+
}
|
1281 |
+
|
1282 |
+
/* method for bulk assignment of vendor code to all product*/
|
1283 |
+
public function prepareBulkassignmentCollection($vendorCode)
|
1284 |
+
{
|
1285 |
+
$numberOfRecords = 200;
|
1286 |
+
$Amosoftsku = array();
|
1287 |
+
$magentoSku = array();
|
1288 |
+
$magentoSkuCollection = Mage::getModel('catalog/product');
|
1289 |
+
if(count($Amosoftsku) > 0)
|
1290 |
+
$productCollection = $magentoSkuCollection->getCollection()->addAttributeToSelect('sku')->addAttributeToFilter('sku', array('nin' => $Amosoftsku));
|
1291 |
+
else
|
1292 |
+
$productCollection = $magentoSkuCollection->getCollection()->addAttributeToSelect('sku')->addAttributeToFilter('type_id','simple');
|
1293 |
+
|
1294 |
+
if($productCollection->getSize() > 0){
|
1295 |
+
$chunkSkus = array_chunk($productCollection->getData(), $numberOfRecords);
|
1296 |
+
|
1297 |
+
foreach($chunkSkus as $skus)
|
1298 |
+
{
|
1299 |
+
foreach($skus as $mageSku){
|
1300 |
+
$magentoSku[] = $mageSku['sku'];
|
1301 |
+
}
|
1302 |
+
}
|
1303 |
+
}
|
1304 |
+
return $magentoSku;
|
1305 |
+
}
|
1306 |
+
|
1307 |
+
/**
|
1308 |
+
* Get Varien I/O File class object
|
1309 |
+
* @return object
|
1310 |
+
*/
|
1311 |
+
protected function fileObj()
|
1312 |
+
{
|
1313 |
+
$fileObj = new Varien_Io_File();
|
1314 |
+
return $fileObj;
|
1315 |
+
}
|
1316 |
+
|
1317 |
+
/**
|
1318 |
+
* Get vendor skus with satrting and trailing spaces
|
1319 |
+
* @return array
|
1320 |
+
*/
|
1321 |
+
protected function getTrimmedSku()
|
1322 |
+
{
|
1323 |
+
$read = Mage::getSingleton ('core/resource')->getConnection ('core_read');
|
1324 |
+
$tableName = Mage::getSingleton ('core/resource')->getTableName('amosoft_vendor_inventory');
|
1325 |
+
$trimSpacesQuery = 'SELECT amosoft_vendor_sku FROM '.$tableName.' WHERE amosoft_vendor_sku LIKE '. '"% %"';
|
1326 |
+
$result = $read->fetchAll($trimSpacesQuery);
|
1327 |
+
$trimmedSkus = array();
|
1328 |
+
if(count($result) > 0){
|
1329 |
+
foreach($result as $k=>$v){
|
1330 |
+
foreach($v as $sku)
|
1331 |
+
$trimmedSkus[$sku] = trim($sku);
|
1332 |
+
}
|
1333 |
+
}
|
1334 |
+
return $trimmedSkus;
|
1335 |
+
}
|
1336 |
+
|
1337 |
+
protected function sendMail($mailData = array()){
|
1338 |
+
if (!Mage::getStoreConfigFlag (self::XML_PATH_INVENTORY_NOTIFICATION_EMAIL_ENABLED)) {
|
1339 |
+
return $this;
|
1340 |
+
}
|
1341 |
+
$mailData['datetime'] = Mage::getModel('core/date')->date();
|
1342 |
+
$postObject = new Varien_Object();
|
1343 |
+
$postObject->setData($mailData);
|
1344 |
+
$email = trim(Mage::getStoreConfig(self::XML_PATH_INVENTORY_NOTIFICATION_EMAIL));
|
1345 |
+
$templateId = 'amosoft_ftp_con_fail';
|
1346 |
+
$isMailSent = Mage::helper('dropship')->sendMail($postObject,$email,$templateId);
|
1347 |
+
if(!$isMailSent)
|
1348 |
+
Mage::log('Notification email not sent :'.$email, null, 'amosoft_debug.log');
|
1349 |
+
}
|
1350 |
+
protected function logForUnprocessedRows($vendorCode,$isFtp = false){
|
1351 |
+
$msg = '';
|
1352 |
+
$error = 0;
|
1353 |
+
$success = 0;
|
1354 |
+
$proObj = Mage::getModel('dropship/ranking')->load($vendorCode,'amosoft_vendor_code');
|
1355 |
+
$proLinkAttr = $proObj->getLinkingAttribute();
|
1356 |
+
$proLinkAttr = empty($proLinkAttr) ? 'none' : $proLinkAttr;
|
1357 |
+
$this->supplierName = $proObj->getAmosoftVendorName();
|
1358 |
+
$helper = Mage::helper('dropship');
|
1359 |
+
$csvData = Mage::getModel('dropship/csvparser')->getUnprocessedCsvRows($vendorCode,$isFtp);
|
1360 |
+
if(count($csvData) > 0 ){
|
1361 |
+
foreach($csvData as $data){
|
1362 |
+
$collection = $this->_inventoryModel->getCollection()->addFieldTofilter('amosoft_vendor_code',$vendorCode)->addFieldTofilter('amosoft_vendor_sku',$data['vendor_sku']);
|
1363 |
+
if($collection->getSize() > 0)
|
1364 |
+
{
|
1365 |
+
$msg = array('error_type'=>'data_notchnage','value'=>array('magento_sku'=> $collection->getFirstItem()->getProductSku(),'qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
1366 |
+
(!$isFtp) ? $this->_UploadCsvErrors[] = $msg : $this->_FtpErrors[] = $msg;
|
1367 |
+
$error++;
|
1368 |
+
}else
|
1369 |
+
{
|
1370 |
+
switch ($proLinkAttr) {
|
1371 |
+
case 'none':
|
1372 |
+
$msg = array('error_type'=>'combination_notexist','value'=>array('magento_sku'=>'','qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
1373 |
+
(!$isFtp) ? $this->_UploadCsvErrors[] = $msg : $this->_FtpErrors[] = $msg;
|
1374 |
+
$error++;
|
1375 |
+
break;
|
1376 |
+
default:
|
1377 |
+
$proCol = Mage::getModel('catalog/product')->getCollection();
|
1378 |
+
if(!$this->checkAttributeAval($proLinkAttr,$proCol)){
|
1379 |
+
$msg = array('error_type'=>'attribute_notexist','value'=>array('magento_sku'=>'','qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
1380 |
+
(!$isFtp) ? $this->_UploadCsvErrors[] = $msg : $this->_FtpErrors[] = $msg;
|
1381 |
+
$error++;
|
1382 |
+
}else{
|
1383 |
+
$product = $proCol->addAttributeToFilter($proLinkAttr,$data['vendor_sku']);
|
1384 |
+
if($this->validateGenerateProduct($product,$data,$proLinkAttr,$isFtp)){
|
1385 |
+
$tempArray = $this->genNonExistPro($product,$data,$isFtp);
|
1386 |
+
!empty($tempArray['success']) ? $success++ : '';
|
1387 |
+
!empty($tempArray['failure']) ? $error++ : '';
|
1388 |
+
}else
|
1389 |
+
{
|
1390 |
+
$error++;
|
1391 |
+
}
|
1392 |
+
}
|
1393 |
+
break;
|
1394 |
+
}
|
1395 |
+
}
|
1396 |
+
}
|
1397 |
+
$csvData[0] = $this->_csvDataCache[0];
|
1398 |
+
$this->emptyRecords = array();
|
1399 |
+
$this->result = array();
|
1400 |
+
$this->checkDataIntigrity($csvData,$isFtp);
|
1401 |
+
}
|
1402 |
+
return array('success'=>$success,'failure'=>$error);
|
1403 |
+
}
|
1404 |
+
protected function prepareInsertAndExeQuery($csvData,$entityId){
|
1405 |
+
if(count($csvData) <= 0 || empty($entityId))
|
1406 |
+
return ;
|
1407 |
+
$tableName = Mage::getSingleton ( 'core/resource' )->getTableName ('dropship/vendor_import_log_desc');
|
1408 |
+
|
1409 |
+
foreach($csvData as $data)
|
1410 |
+
{
|
1411 |
+
try {
|
1412 |
+
$this->conn->insertArray($tableName,array('error_id','description'),array(array($entityId,Mage::helper('core')->jsonEncode($data))));
|
1413 |
+
} catch ( Exception $e ) {
|
1414 |
+
Mage::logException($e);
|
1415 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
1416 |
+
}
|
1417 |
+
|
1418 |
+
}
|
1419 |
+
return ;
|
1420 |
+
}
|
1421 |
+
protected function validateGenerateProduct($product,$data,$attr,$isFtp){
|
1422 |
+
$isValid = true;
|
1423 |
+
$helper = Mage::helper('dropship');
|
1424 |
+
if($product->getSize() == 0)
|
1425 |
+
{
|
1426 |
+
$errorType = ($attr == $helper::AMOSOFT_PRODUCT_LINK_CODE_SKU) ? 'magento_sku_exists' : $attr.'_notexist';
|
1427 |
+
$msg = array('error_type'=>$errorType,'value'=>array('magento_sku'=>$data['vendor_sku'],'qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
1428 |
+
(!$isFtp) ? $this->_UploadCsvErrors[] = $msg : $this->_FtpErrors[] = $msg;
|
1429 |
+
$isValid = false;
|
1430 |
+
}elseif($product->getSize() > 1)
|
1431 |
+
{
|
1432 |
+
$msg = array('error_type'=>$attr.'_multiple','value'=>array('magento_sku'=>'','qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
1433 |
+
(!$isFtp) ? $this->_UploadCsvErrors[] = $msg : $this->_FtpErrors[] = $msg;
|
1434 |
+
$isValid = false;
|
1435 |
+
}else{
|
1436 |
+
$data['magento_sku'] = $product->getFirstItem()->getSku();
|
1437 |
+
if(!$this->chekDuplicateCombination($data))
|
1438 |
+
{
|
1439 |
+
$msg = array('error_type'=>'combination_exist','value'=>array('magento_sku'=>$data['magento_sku'],'qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
1440 |
+
(!$isFtp) ? $this->_UploadCsvErrors[] = $msg : $this->_FtpErrors[] = $msg;
|
1441 |
+
$isValid = false;
|
1442 |
+
}
|
1443 |
+
}
|
1444 |
+
|
1445 |
+
return $isValid;
|
1446 |
+
}
|
1447 |
+
|
1448 |
+
protected function genNonExistPro($proObj,$data,$isFtp){
|
1449 |
+
$invalidData = false;
|
1450 |
+
$failure = 0;
|
1451 |
+
$success = 0;
|
1452 |
+
$ignoreData = array();
|
1453 |
+
$data['magento_sku'] = $proObj->getFirstItem()->getSku();
|
1454 |
+
/* LBN - 935 change */
|
1455 |
+
$data['qty'] = (is_numeric($data['qty'])) ? Mage::helper('dropship')->getIsQtyDecimal($data['magento_sku'],$data['qty']) : $data['qty'];
|
1456 |
+
if(!is_numeric($data['qty']) || $data['qty'] < 0){
|
1457 |
+
$ignoreData[]= 'qty';
|
1458 |
+
}
|
1459 |
+
if(!is_numeric($data['cost']) || $data['cost'] < 0){
|
1460 |
+
$ignoreData[]= 'cost';
|
1461 |
+
}
|
1462 |
+
if((!is_numeric($data['cost']) || $data['cost'] < 0) && (!is_numeric($data['qty']) || $data['qty'] < 0)){
|
1463 |
+
if($data['cost']!="" && $data['qty']!="")
|
1464 |
+
$invalidData = true;
|
1465 |
+
}
|
1466 |
+
|
1467 |
+
if($invalidData){
|
1468 |
+
$failure+=1;
|
1469 |
+
}else{
|
1470 |
+
($this->insertNonExistPro($proObj,$data,$isFtp)) ? $success += 1 : $failure += 1;
|
1471 |
+
}
|
1472 |
+
|
1473 |
+
$this->insertInventoryLog($ignoreData,$data,$isFtp);
|
1474 |
+
|
1475 |
+
return array('success'=>$success,'failure'=>$failure);
|
1476 |
+
}
|
1477 |
+
|
1478 |
+
protected function insertNonExistPro($proObj,$data,$isFtp = false){
|
1479 |
+
|
1480 |
+
$vendorCode = ($isFtp) ? $data['amosoft_vendor_code'] : $this->_vendorCode;
|
1481 |
+
$tableVendorInventory = Mage::getSingleton ('core/resource')->getTableName('dropship/inventory');
|
1482 |
+
$qtyArray = $this->calculateProductQty($data);
|
1483 |
+
$costInsert = (!is_numeric($data['cost']) || $data['cost'] < 0 || trim($data['cost']) =="") ? 0 : $data['cost'] ;
|
1484 |
+
$qtyInsert = ($qtyArray['upload_qty'] == .999999999 || trim($data['qty']) =="" ) ? 0 : $qtyArray['upload_qty'];
|
1485 |
+
$dbFields = array('amosoft_vendor_code','amosoft_vendor_name','product_sku','amosoft_vendor_sku','stock','cost','created_at','updated_at');
|
1486 |
+
$dbFieldVal = array(
|
1487 |
+
array($vendorCode,$this->supplierName,$data['magento_sku'],$data['vendor_sku'],$qtyInsert,$costInsert,now(),now())
|
1488 |
+
);
|
1489 |
+
try {
|
1490 |
+
if(!$this->updateProductInventory(trim($data['magento_sku']),$qtyArray['final_qty']))
|
1491 |
+
{
|
1492 |
+
$this->_UploadCsvErrors[] = array('error_type'=>'inventory_update_error','value'=>array('magento_sku'=>$data['magento_sku'],'qty'=>$data['qty'],'vendor_sku'=>$data['vendor_sku'],'cost'=>$data['cost']));
|
1493 |
+
return false;
|
1494 |
+
}
|
1495 |
+
$this->conn->insertArray($tableVendorInventory,$dbFields,$dbFieldVal);
|
1496 |
+
return true;
|
1497 |
+
} catch ( Exception $e ) {
|
1498 |
+
Mage::logException($e);
|
1499 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
1500 |
+
}
|
1501 |
+
|
1502 |
+
|
1503 |
+
}
|
1504 |
+
protected function insertInventoryLog($ignoreData,$data,$isFtp)
|
1505 |
+
{
|
1506 |
+
$type = 'add';
|
1507 |
+
$vendorCode = ($isFtp) ? $data['amosoft_vendor_code'] : $this->_vendorCode;
|
1508 |
+
if(count($ignoreData)>0){
|
1509 |
+
(in_array('qty', $ignoreData)) ? $type = 'Cost Added, Qty Ignored' : '';
|
1510 |
+
(in_array('cost', $ignoreData)) ? $type = 'Qty Added, Cost Ignored' : '';
|
1511 |
+
|
1512 |
+
if(count($ignoreData)==2){
|
1513 |
+
$type = 'ignore';
|
1514 |
+
}
|
1515 |
+
}
|
1516 |
+
if($data['qty']==0.999999999)
|
1517 |
+
$data['qty'] = 0;
|
1518 |
+
$tableName = Mage::getSingleton("core/resource")->getTableName('dropship/inventorylog');
|
1519 |
+
$updatedBy = (!$isFtp) ? Mage::getSingleton('admin/session')->getUser()->getUsername() : 'FTP';
|
1520 |
+
$dbFields = array('amosoft_vendor_code','amosoft_vendor_name','product_sku','cost','stock','updated_by','activity','updated_at','created_at');
|
1521 |
+
$dbFieldVal = array(
|
1522 |
+
array($vendorCode,$this->supplierName,$data['magento_sku'],$data['cost'],$data['qty'],$updatedBy,$type,now(),now())
|
1523 |
+
);
|
1524 |
+
try {
|
1525 |
+
$this->conn->insertArray($tableName,$dbFields,$dbFieldVal);
|
1526 |
+
return true;
|
1527 |
+
} catch ( Exception $e ) {
|
1528 |
+
Mage::logException($e);
|
1529 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
1530 |
+
}
|
1531 |
+
|
1532 |
+
}
|
1533 |
+
protected function checkAttributeAval($attr,$object){
|
1534 |
+
$isExist = false;
|
1535 |
+
$attrEav = Mage::getResourceModel('catalog/eav_attribute')->loadByCode('catalog_product',$attr);
|
1536 |
+
if ($attrEav->getId())
|
1537 |
+
$isExist = true;
|
1538 |
+
return $isExist;
|
1539 |
+
}
|
1540 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Versions/Api.php
ADDED
@@ -0,0 +1,23 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
class Amosoft_Dropship_Model_Versions_Api extends Mage_Api_Model_Resource_Abstract
|
9 |
+
{
|
10 |
+
public function getdropshipversion() {
|
11 |
+
$magento_edition = Mage::getEdition();
|
12 |
+
$dropship_version = Mage::getStoreConfig('amosoft_integration/integration/ds360_version',Mage::app()->getStore());
|
13 |
+
$magento_version = Mage::getStoreConfig('amosoft_integration/integration/magento_version',Mage::app()->getStore());
|
14 |
+
$moduleName = 'Amosoft_Dropship';
|
15 |
+
$moduleVersion = Mage::getConfig()->getNode('modules/' . $moduleName . '/version');
|
16 |
+
$versions = array();
|
17 |
+
$versions['magentoVer'] = $magento_edition ." ".$magento_version;
|
18 |
+
$versions['dropshipVer'] = $dropship_version;
|
19 |
+
$versions['dropshipDbScriptVer'] = $moduleVersion;
|
20 |
+
return $versions;
|
21 |
+
}
|
22 |
+
|
23 |
+
}
|
app/code/local/Amosoft/Dropship/Model/Versions/Api/V2.php
ADDED
@@ -0,0 +1,11 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
class Amosoft_Dropship_Model_Versions_Api_V2 extends Amosoft_Dropship_Model_Versions_Api
|
9 |
+
{
|
10 |
+
//empty
|
11 |
+
}
|
app/code/local/Amosoft/Dropship/controllers/Adminhtml/AmosoftController.php
ADDED
@@ -0,0 +1,264 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Adminhtml_AmosoftController extends Mage_Adminhtml_Controller_Action
|
11 |
+
{
|
12 |
+
|
13 |
+
protected function _initAction() {
|
14 |
+
$this->loadLayout()
|
15 |
+
->_setActiveMenu('dropship/suppliers')
|
16 |
+
->_addBreadcrumb(Mage::helper('adminhtml')->__('Vendor Manager'), Mage::helper('adminhtml')->__('Vendor Manager'));
|
17 |
+
|
18 |
+
return $this;
|
19 |
+
}
|
20 |
+
|
21 |
+
public function indexAction() {
|
22 |
+
$this->_initAction()->renderLayout();
|
23 |
+
}
|
24 |
+
|
25 |
+
public function getapidetailsAction() {
|
26 |
+
$this->loadLayout();
|
27 |
+
$this->getLayout()->getBlock('amosoftnotification')->setConfigValue(array(
|
28 |
+
'scope' => 'default',
|
29 |
+
'scope_id' => '0',
|
30 |
+
'path' => 'amosoft_integration/integration/notificationstatus',
|
31 |
+
'value' => '0',
|
32 |
+
));
|
33 |
+
Mage::app()->getCacheInstance()->cleanType('config');
|
34 |
+
Mage::getSingleton('adminhtml/session')->setNotification(false);
|
35 |
+
$this->_redirectReferer();
|
36 |
+
}
|
37 |
+
|
38 |
+
public function sourcinggridAction() {
|
39 |
+
|
40 |
+
$this->getLayout()->createBlock('dropship/adminhtml_sourcing_grid')->toHtml();
|
41 |
+
$this->loadLayout()->renderLayout();
|
42 |
+
|
43 |
+
}
|
44 |
+
|
45 |
+
public function gridAction() {
|
46 |
+
$this->getResponse()->setBody(
|
47 |
+
$this->getLayout()->createBlock('dropship/adminhtml_amosoft_grid')->toHtml());
|
48 |
+
}
|
49 |
+
public function editAction() {
|
50 |
+
$id = $this->getRequest()->getParam('vendor_id');
|
51 |
+
$model = Mage::getModel('dropship/supplier')->load($id);
|
52 |
+
|
53 |
+
if ($model->getVendorId() || $id == 0) {
|
54 |
+
$data = Mage::getSingleton('adminhtml/session')->getFormData(true);
|
55 |
+
if (!empty($data)) {
|
56 |
+
$model->setData($data);
|
57 |
+
|
58 |
+
}
|
59 |
+
Mage::register('amosoft_data', $model);
|
60 |
+
|
61 |
+
$this->loadLayout();
|
62 |
+
$this->_setActiveMenu('dropship/suppliers');
|
63 |
+
|
64 |
+
$this->_addBreadcrumb(Mage::helper('adminhtml')->__('Vendor Manager'), Mage::helper('adminhtml')->__('Vendor Manager'));
|
65 |
+
$this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
|
66 |
+
|
67 |
+
$this->_addContent($this->getLayout()->createBlock('dropship/adminhtml_amosoft_edit'))
|
68 |
+
->_addLeft($this->getLayout()->createBlock('dropship/adminhtml_amosoft_edit_tabs'));
|
69 |
+
|
70 |
+
$this->renderLayout();
|
71 |
+
} else {
|
72 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('dropship')->__('Vendor does not exist'));
|
73 |
+
$this->_redirect('*/*/');
|
74 |
+
}
|
75 |
+
}
|
76 |
+
|
77 |
+
public function newAction()
|
78 |
+
{
|
79 |
+
$this->loadLayout();
|
80 |
+
$this->_setActiveMenu('dropship/suppliers');
|
81 |
+
$this->_addContent($this->getLayout()->createBlock('dropship/adminhtml_amosoft_edit'))
|
82 |
+
->_addLeft($this->getLayout()->createBlock('dropship/adminhtml_amosoft_edit_tabs'));
|
83 |
+
$this->renderLayout();
|
84 |
+
|
85 |
+
}
|
86 |
+
|
87 |
+
public function saveAction()
|
88 |
+
{
|
89 |
+
if ($data = $this->getRequest()->getPost()) {
|
90 |
+
$model = Mage::getModel('dropship/supplier');
|
91 |
+
if ($id = $this->getRequest()->getParam('vendor_id')) {//the parameter name may be different
|
92 |
+
$model->load($id);
|
93 |
+
}
|
94 |
+
$companyid = $this->getRequest()->getParam('company_id');
|
95 |
+
$message = '';
|
96 |
+
$result = array();
|
97 |
+
if(empty($companyid) || strcmp($model->getCompanyId(),$companyid) == 0 )
|
98 |
+
$validate = 0;
|
99 |
+
else{
|
100 |
+
$result = $model->validateCompany($companyid,$data);
|
101 |
+
$validate = $result['validate'];
|
102 |
+
$data = $result['data'];
|
103 |
+
if(!$validate){
|
104 |
+
$model->load($data['id']);
|
105 |
+
}
|
106 |
+
}
|
107 |
+
$message = ($result['message']) ? 'Vendor Recovered Successfully -'.$data['company_id'] : 'Vendor was successfully saved';
|
108 |
+
$model->addData($data);
|
109 |
+
try {
|
110 |
+
if(!empty($data['addnewoption'])){
|
111 |
+
$model->setData('magento_vendor_code',strtolower($data['addnewoption']));
|
112 |
+
}
|
113 |
+
//validate compny id as unique
|
114 |
+
if($validate == 1){
|
115 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('dropship')->__('Duplicate Company ID'));
|
116 |
+
Mage::getSingleton('adminhtml/session')->setFormData($data);
|
117 |
+
$this->_redirect('*/*/edit', array('vendor_id' => $model->getVendorId()));
|
118 |
+
return;
|
119 |
+
}
|
120 |
+
$model->save();
|
121 |
+
|
122 |
+
if(!empty($data['addnewoption'])){
|
123 |
+
Mage::getModel('dropship/amosoft')->createOptionValueOnSave($model->getMagentoVendorCode());
|
124 |
+
}
|
125 |
+
Mage::getSingleton('adminhtml/session')->setFormData(false);
|
126 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('dropship')->__($message));
|
127 |
+
|
128 |
+
if ($this->getRequest()->getParam('back')) {
|
129 |
+
$this->_redirect('*/*/edit', array('vendor_id' => $model->getVendorId()));
|
130 |
+
return;
|
131 |
+
}
|
132 |
+
$this->_redirect('*/*/');
|
133 |
+
return;
|
134 |
+
} catch (Exception $e) {
|
135 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
136 |
+
Mage::getSingleton('adminhtml/session')->setFormData($data);
|
137 |
+
$this->_redirect('*/*/edit', array('vendor_id'=>$model->getVendorId(), '_current'=>true));
|
138 |
+
return;
|
139 |
+
}
|
140 |
+
}
|
141 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('dropship')->__('Unable to find Vendor to save'));
|
142 |
+
$this->_redirect('*/*/');
|
143 |
+
}
|
144 |
+
|
145 |
+
public function deleteAction()
|
146 |
+
{
|
147 |
+
if ($id = $this->getRequest()->getParam('vendor_id')) {
|
148 |
+
try {
|
149 |
+
$model = Mage::getModel('dropship/supplier');
|
150 |
+
$model->load($id);
|
151 |
+
$model->setData('status','deleted');
|
152 |
+
$model->save();
|
153 |
+
$collection = Mage::getModel('dropship/ranking')->getCollection()->addFieldToFilter('is_dropship','yes');
|
154 |
+
$collection->getSelect()->order('ranking asc');
|
155 |
+
$rank = Mage::getModel('dropship/ranking')->load($id)->getRanking();
|
156 |
+
foreach($collection as $value){
|
157 |
+
Mage::getModel('dropship/ranking')->rearrangeRank($value, $rank);
|
158 |
+
}
|
159 |
+
Mage::getModel('dropship/ranking')->load($id,'amosoft_vendor_id')->setRanking('')->setIsDropship('no')->setIsActive('no')->save();
|
160 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('dropship')->__('The Vendor has been deleted.'));
|
161 |
+
$this->_redirect('*/*/');
|
162 |
+
return;
|
163 |
+
|
164 |
+
} catch (Exception $e) {
|
165 |
+
|
166 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
167 |
+
|
168 |
+
$this->_redirect('*/*/edit', array('vendor_id' => $id));
|
169 |
+
return;
|
170 |
+
}
|
171 |
+
}
|
172 |
+
|
173 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('dropship')->__('Unable to find a Vendor to delete.'));
|
174 |
+
|
175 |
+
$this->_redirect('*/*/');
|
176 |
+
}
|
177 |
+
|
178 |
+
|
179 |
+
/**
|
180 |
+
* Export vendor in csv format
|
181 |
+
*/
|
182 |
+
public function exportCsvAction()
|
183 |
+
{
|
184 |
+
$fileName = 'supplier.csv';
|
185 |
+
$content = $this->getLayout()->createBlock('dropship/adminhtml_amosoft_grid')->getCsvFile();
|
186 |
+
$this->_prepareDownloadResponse($fileName, $content);
|
187 |
+
}
|
188 |
+
|
189 |
+
/**
|
190 |
+
* Export vendor in Excel format
|
191 |
+
*/
|
192 |
+
public function exportXmlAction()
|
193 |
+
{
|
194 |
+
$fileName = 'supplier.xml';
|
195 |
+
$content = $this->getLayout()->createBlock('dropship/adminhtml_amosoft_grid')->getExcelFile($fileName);
|
196 |
+
$this->_prepareDownloadResponse($fileName, $content);
|
197 |
+
}
|
198 |
+
|
199 |
+
public function validateajaxrequestAction()
|
200 |
+
{
|
201 |
+
$paramsArray = $this->getRequest()->getParams();
|
202 |
+
$validation = Mage::getModel('dropship/amosoft');
|
203 |
+
$result = $validation->validation($paramsArray['groups']['integration']['fields']);
|
204 |
+
$result = Mage::helper('core')->jsonEncode($result);
|
205 |
+
Mage::app()->getResponse()->setBody($result);
|
206 |
+
}
|
207 |
+
|
208 |
+
/**
|
209 |
+
* Change dropship order item status through Ajax request
|
210 |
+
*/
|
211 |
+
public function changeStatusAjaxAction()
|
212 |
+
{
|
213 |
+
$data = $this->getRequest()->getPost();
|
214 |
+
//print_r($data); exit;
|
215 |
+
if($data){
|
216 |
+
if($data['amosoft_item_status']!=""){
|
217 |
+
$order = Mage::getModel('sales/order')->load($data['order_id']);
|
218 |
+
$orderStatus = $order->getStatus();
|
219 |
+
$OrderItemInstance = Mage::getModel('dropship/orderitems')->getCollection()->addFieldToFilter('item_id', $data['amosoft_item_id']);
|
220 |
+
try{
|
221 |
+
if($OrderItemInstance->count() > 0){
|
222 |
+
foreach($OrderItemInstance as $item){
|
223 |
+
$itemStatusHistory = Mage::helper('dropship')->getSerialisedData($item, $data['amosoft_item_status'], $orderStatus);
|
224 |
+
$item->setAmosoftItemStatus($data['amosoft_item_status']);
|
225 |
+
$item->setItemStatusHistory($itemStatusHistory);
|
226 |
+
$item->setUpdatedBy('User');
|
227 |
+
$item->setUpdatedAt(Mage::getModel('core/date')->gmtDate());
|
228 |
+
$item->save();
|
229 |
+
if($data['amosoft_item_status']==$item->getAmosoftItemStatus()){
|
230 |
+
$data['msg'] = $item->getSku().' status successfully changed to '.$data['amosoft_item_status'];
|
231 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('dropship')->__($data['msg']));
|
232 |
+
}else{
|
233 |
+
$data['msg'] = $item->getSku().' status unable to change to '.$data['amosoft_item_status'];
|
234 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('dropship')->__($data['msg']));
|
235 |
+
}
|
236 |
+
|
237 |
+
}
|
238 |
+
}
|
239 |
+
if($data['amosoft_item_status'] == 'Transmitting'){
|
240 |
+
Mage::getModel('dropship/amosoft')->setupNotification();
|
241 |
+
}
|
242 |
+
$result = Mage::helper('core')->jsonEncode($data);
|
243 |
+
echo $result; exit;
|
244 |
+
Mage::app()->getResponse()->setBody($result);
|
245 |
+
}catch(Exception $e){
|
246 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
247 |
+
}
|
248 |
+
}
|
249 |
+
}else{
|
250 |
+
$data['msg'] = 'Unable to perform the required operation';
|
251 |
+
}
|
252 |
+
}
|
253 |
+
|
254 |
+
/**
|
255 |
+
* Acl check for admin
|
256 |
+
*
|
257 |
+
* @return bool
|
258 |
+
*/
|
259 |
+
protected function _isAllowed()
|
260 |
+
{
|
261 |
+
return Mage::getSingleton('admin/session')->isAllowed('dropship/inventory');
|
262 |
+
}
|
263 |
+
|
264 |
+
}
|
app/code/local/Amosoft/Dropship/controllers/Adminhtml/InventoryController.php
ADDED
@@ -0,0 +1,81 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Adminhtml_InventoryController extends Mage_Adminhtml_Controller_Action
|
11 |
+
{
|
12 |
+
|
13 |
+
protected function _initAction()
|
14 |
+
{
|
15 |
+
$this->loadLayout()
|
16 |
+
->_setActiveMenu('dropship/inventory')
|
17 |
+
->_addBreadcrumb(Mage::helper('adminhtml')->__('Inventory Manager'), Mage::helper('adminhtml')->__('Inventory Manager'));
|
18 |
+
return $this;
|
19 |
+
}
|
20 |
+
|
21 |
+
public function indexAction()
|
22 |
+
{
|
23 |
+
$this->_redirect('dropship/adminhtml_upload/index');
|
24 |
+
$this->_initAction()->renderLayout();
|
25 |
+
}
|
26 |
+
|
27 |
+
public function vendorsAction()
|
28 |
+
{
|
29 |
+
$this->loadLayout();
|
30 |
+
$this->getLayout()->getBlock("vendors_product_tab")->setProductId($this->getRequest()->getParam('id'));
|
31 |
+
$this->renderLayout();
|
32 |
+
}
|
33 |
+
|
34 |
+
public function vendorshistoryAction()
|
35 |
+
{
|
36 |
+
$this->loadLayout();
|
37 |
+
$this->getLayout()->getBlock("vendors_product_tab_history")->setProductId($this->getRequest()->getParam('id'));
|
38 |
+
$this->renderLayout();
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* suppplier grid for AJAX request
|
43 |
+
*/
|
44 |
+
public function gridAction()
|
45 |
+
{
|
46 |
+
$this->getResponse()->setBody(
|
47 |
+
$this->getLayout()->createBlock('dropship/adminhtml_inventory_grid')->toHtml()
|
48 |
+
);
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Export vendor in csv format
|
53 |
+
*/
|
54 |
+
public function exportCsvAction()
|
55 |
+
{
|
56 |
+
$fileName = 'vendor_inventory.csv';
|
57 |
+
$content = $this->getLayout()->createBlock('dropship/adminhtml_inventory_grid')->getCsvFile();
|
58 |
+
$this->_prepareDownloadResponse($fileName, $content);
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Export vendor in Excel format
|
63 |
+
*/
|
64 |
+
public function exportXmlAction()
|
65 |
+
{
|
66 |
+
$fileName = 'vendor_inventory.xml';
|
67 |
+
$content = $this->getLayout()->createBlock('dropship/adminhtml_inventory_grid')->getExcelFile($fileName);
|
68 |
+
$this->_prepareDownloadResponse($fileName, $content);
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Acl check for admin
|
73 |
+
*
|
74 |
+
* @return bool
|
75 |
+
*/
|
76 |
+
protected function _isAllowed()
|
77 |
+
{
|
78 |
+
return Mage::getSingleton('admin/session')->isAllowed('dropship/inventory');
|
79 |
+
}
|
80 |
+
|
81 |
+
}
|
app/code/local/Amosoft/Dropship/controllers/Adminhtml/RankingController.php
ADDED
@@ -0,0 +1,210 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
class Amosoft_Dropship_Adminhtml_RankingController extends Mage_Adminhtml_Controller_Action {
|
10 |
+
|
11 |
+
protected function _initAction() {
|
12 |
+
$this->loadLayout ()->_setActiveMenu ( 'dropship/vendor_ranking' )->_addBreadcrumb ( Mage::helper ( 'adminhtml' )->__ ( 'Vendor Management' ), Mage::helper ( 'adminhtml' )->__ ( 'Vendor Management' ) );
|
13 |
+
return $this;
|
14 |
+
}
|
15 |
+
|
16 |
+
public function indexAction() {
|
17 |
+
$layout = $this->_initAction()->_title($this->__('Vendor Management'));
|
18 |
+
$layout->getLayout()->getBlock('head')->setCanLoadExtJs(false);
|
19 |
+
$layout->renderLayout();
|
20 |
+
}
|
21 |
+
|
22 |
+
public function popupAction() {
|
23 |
+
$this->loadLayout ();
|
24 |
+
$this->renderLayout ();
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Ranking grid
|
29 |
+
*/
|
30 |
+
public function gridAction() {
|
31 |
+
$this->getResponse ()->setBody ( $this->getLayout ()->createBlock ( 'dropship/adminhtml_ranking_grid' )->toHtml () );
|
32 |
+
}
|
33 |
+
|
34 |
+
public function showhistoryAction() {
|
35 |
+
$this->loadLayout ();
|
36 |
+
$this->renderLayout ();
|
37 |
+
}
|
38 |
+
|
39 |
+
public function addNewVendorAction() {
|
40 |
+
$isSuccess = false;
|
41 |
+
$data = $this->getRequest ()->getPost ();
|
42 |
+
$arrVendor = array();
|
43 |
+
$vendorRankCollection = Mage::getModel ( 'dropship/ranking' );
|
44 |
+
$genrateVendorCode = $vendorRankCollection->getCollection()->addFieldToFilter('amosoft_vendor_code',array('like'=>'%MagVendID%'));
|
45 |
+
|
46 |
+
foreach($genrateVendorCode as $vendorCode)
|
47 |
+
{
|
48 |
+
if(preg_match('!\d+!', $vendorCode->getAmosoftVendorCode(), $matches)){
|
49 |
+
$arrVendor[] = (int) $matches[0];
|
50 |
+
}
|
51 |
+
|
52 |
+
}
|
53 |
+
$suffix = ((int) max($arrVendor) + 1);
|
54 |
+
$code = 'MagVendID'.$suffix;
|
55 |
+
$vendorRankCollection->setAmosoftVendorCode($code);
|
56 |
+
$vendorRankCollection->setRanking($data['rank']);
|
57 |
+
$vendorRankCollection->setAmosoftVendorName($data['name']);
|
58 |
+
$vendorRankCollection->setAmosoftVendorType('user');
|
59 |
+
$vendorRankCollection->setCreatedAt(now());
|
60 |
+
$vendorRankCollection->setUpdatedAt(now());
|
61 |
+
try{
|
62 |
+
$vendorRankCollection->save();
|
63 |
+
$isSuccess = true;
|
64 |
+
}catch ( Exception $e ) {
|
65 |
+
Mage::getSingleton ( 'adminhtml/session' )->addError( $e->getMessage () );
|
66 |
+
$isSuccess = false;
|
67 |
+
}
|
68 |
+
$result = array('success'=>$isSuccess,'message'=>$code);
|
69 |
+
$result = Mage::helper('core')->jsonEncode($result);
|
70 |
+
Mage::app()->getResponse()->setBody($result);
|
71 |
+
return;
|
72 |
+
}
|
73 |
+
|
74 |
+
|
75 |
+
public function saverankingAction() {
|
76 |
+
$vendorName = array();
|
77 |
+
$data = $this->getRequest ()->getPost ();
|
78 |
+
|
79 |
+
$tableName = $data['partent_save_table_input'];
|
80 |
+
$dropShip = json_decode((urldecode($data['dropship_data'])),true);
|
81 |
+
$nonDropShip = json_decode((urldecode($data['nondropship_data'])),true);
|
82 |
+
$vendorName = json_decode((urldecode($data['vendorname_data'])),true);
|
83 |
+
$vendorProductLink = json_decode((urldecode($data['vendorproductlink_data'])),true);
|
84 |
+
$modelRanking = Mage::getModel ( 'dropship/rankinglog' )->load($tableName,'label');
|
85 |
+
if (!$tableName || $modelRanking->getId()) {
|
86 |
+
Mage::getSingleton ( 'adminhtml/session' )->addError ( Mage::helper ( 'dropship' )->__ ( 'Ranking Table Name Is Empty Or Already Exists' ) );
|
87 |
+
$this->_redirect ( '*/*/' );
|
88 |
+
return;
|
89 |
+
}
|
90 |
+
|
91 |
+
foreach($dropShip as $key=>$val){
|
92 |
+
if(!empty($dropShip)){
|
93 |
+
$this->_saveVendorRanking($key, $val, true);
|
94 |
+
}
|
95 |
+
}
|
96 |
+
foreach($nonDropShip as $k=>$v){
|
97 |
+
if(!empty($nonDropShip)){
|
98 |
+
$this->_saveVendorRanking($k, $v, false);
|
99 |
+
}
|
100 |
+
}
|
101 |
+
foreach($vendorName as $key=>$val){
|
102 |
+
if(!empty($vendorName)){
|
103 |
+
$this->_updateVendorName($val);
|
104 |
+
}
|
105 |
+
}
|
106 |
+
foreach ($vendorProductLink as $value) {
|
107 |
+
$this->saveProductLinking($value);
|
108 |
+
}
|
109 |
+
$result = $this->_saveTableRanking(trim($tableName));
|
110 |
+
|
111 |
+
Mage::getSingleton ( 'adminhtml/session' )->addSuccess ( Mage::helper ( 'dropship' )->__ ( 'Vendor ranking saved successfully' ) );
|
112 |
+
$this->_redirect ( '*/*/' );
|
113 |
+
return;
|
114 |
+
}
|
115 |
+
protected function _saveVendorRanking($key, $val, $rank = false) {
|
116 |
+
try {
|
117 |
+
$model = Mage::getModel ( 'dropship/ranking' )->load ( $val['code'], 'amosoft_vendor_code' );
|
118 |
+
$model->setUpdatedAt(now());
|
119 |
+
|
120 |
+
if($rank)
|
121 |
+
$model->setIsDropship ('yes');
|
122 |
+
else
|
123 |
+
$model->setIsDropship ('no');
|
124 |
+
|
125 |
+
$model->setRanking ( ($rank) ? $key+1:0 );
|
126 |
+
$model->save ();
|
127 |
+
} catch ( Exception $e ) {
|
128 |
+
Mage::getSingleton ( 'adminhtml/session' )->addError ( $e->getMessage () );
|
129 |
+
}
|
130 |
+
}
|
131 |
+
|
132 |
+
protected function _updateVendorName($val) {
|
133 |
+
try {
|
134 |
+
$model = Mage::getModel ( 'dropship/ranking' )->load ( $val['code'], 'amosoft_vendor_code' );
|
135 |
+
if($model->getAmosoftVendorCode())
|
136 |
+
$model->setAmosoftVendorName ($val['name'])->save();
|
137 |
+
Mage::getModel ( 'dropship/inventory' )->upDateVendorName($val);
|
138 |
+
} catch ( Exception $e ) {
|
139 |
+
Mage::getSingleton ( 'adminhtml/session' )->addError ( $e->getMessage () );
|
140 |
+
}
|
141 |
+
}
|
142 |
+
|
143 |
+
protected function _saveTableRanking($tableName) {
|
144 |
+
$serializedArray = array ();
|
145 |
+
$model = Mage::getModel ( 'dropship/ranking' );
|
146 |
+
$modelRanking = Mage::getModel ( 'dropship/rankinglog' );
|
147 |
+
$collection = $model->getCollection ();
|
148 |
+
$collection->getSelect()->order('ranking asc');
|
149 |
+
if($collection->count() > 0){
|
150 |
+
foreach ( $collection as $value ) {
|
151 |
+
$serializedArray [] = array (
|
152 |
+
$value->getAmosoftVendorName (),
|
153 |
+
$value->getAmosoftVendorCode (),
|
154 |
+
$this->getAttributeCode($value->getLinkingAttribute()),
|
155 |
+
$value->getRanking (),
|
156 |
+
$value->getIsDropship()
|
157 |
+
);
|
158 |
+
}
|
159 |
+
$modelRanking->setRankingData ( serialize ( $serializedArray ) );
|
160 |
+
$modelRanking->setLabel ( trim ( $tableName ) );
|
161 |
+
$modelRanking->setCreatedAt(now());
|
162 |
+
try {
|
163 |
+
$modelRanking->save ();
|
164 |
+
} catch ( Exception $e ) {
|
165 |
+
Mage::getSingleton ( 'adminhtml/session' )->addError ( $e->getMessage () );
|
166 |
+
}
|
167 |
+
}
|
168 |
+
return;
|
169 |
+
}
|
170 |
+
protected function getAttributeCode($code)
|
171 |
+
{
|
172 |
+
$helper = Mage::helper('dropship');
|
173 |
+
switch ($code) {
|
174 |
+
case $helper::AMOSOFT_PRODUCT_LINK_CODE_UPC:
|
175 |
+
return $helper::AMOSOFT_PRODUCT_LINK_UPC;
|
176 |
+
break;
|
177 |
+
case $helper::AMOSOFT_PRODUCT_LINK_CODE_MNP:
|
178 |
+
return $helper::AMOSOFT_PRODUCT_LINK_MNP;
|
179 |
+
break;
|
180 |
+
case $helper::AMOSOFT_PRODUCT_LINK_CODE_SKU:
|
181 |
+
return $helper::AMOSOFT_PRODUCT_LINK_SKU;
|
182 |
+
break;
|
183 |
+
default:
|
184 |
+
return $helper::AMOSOFT_PRODUCT_LINK_NONE;
|
185 |
+
}
|
186 |
+
}
|
187 |
+
protected function saveProductLinking($data)
|
188 |
+
{
|
189 |
+
if(empty($data))
|
190 |
+
return ;
|
191 |
+
try {
|
192 |
+
$model = Mage::getModel ( 'dropship/ranking' )->load ( $data['code'], 'amosoft_vendor_code' );
|
193 |
+
$model->setUpdatedAt(now());
|
194 |
+
$model->setLinkingAttribute($data['attr']);
|
195 |
+
$model->save ();
|
196 |
+
} catch ( Exception $e ) {
|
197 |
+
Mage::getSingleton ( 'adminhtml/session' )->addError ( $e->getMessage () );
|
198 |
+
}
|
199 |
+
}
|
200 |
+
|
201 |
+
/**
|
202 |
+
* Acl check for admin
|
203 |
+
*
|
204 |
+
* @return bool
|
205 |
+
*/
|
206 |
+
protected function _isAllowed()
|
207 |
+
{
|
208 |
+
return (Mage::getSingleton('admin/session')->isAllowed('dropship/suppliers') || Mage::getSingleton('admin/session')->isAllowed('dropship/vendor_ranking'));
|
209 |
+
}
|
210 |
+
}
|
app/code/local/Amosoft/Dropship/controllers/Adminhtml/SourcingController.php
ADDED
@@ -0,0 +1,182 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Adminhtml_SourcingController extends Mage_Adminhtml_Controller_Action
|
11 |
+
{
|
12 |
+
|
13 |
+
protected function _initAction() {
|
14 |
+
$this->loadLayout()
|
15 |
+
->_setActiveMenu('dropship/order_sourcing')
|
16 |
+
->_addBreadcrumb(Mage::helper('adminhtml')->__('Order Management'), Mage::helper('adminhtml')->__('Order Management'));
|
17 |
+
|
18 |
+
return $this;
|
19 |
+
}
|
20 |
+
|
21 |
+
public function indexAction() {
|
22 |
+
$this->_initAction()->renderLayout();
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* sourcing grid
|
27 |
+
*/
|
28 |
+
|
29 |
+
public function sourcinggridAction() {
|
30 |
+
$this->_initAction()->_title($this->__('Order Management'));
|
31 |
+
$this->getLayout()->createBlock('dropship/adminhtml_sourcing_grid')->toHtml();
|
32 |
+
//$this->loadLayout()->renderLayout();
|
33 |
+
$this->renderLayout();
|
34 |
+
|
35 |
+
}
|
36 |
+
public function editAction() {
|
37 |
+
$id = $this->getRequest()->getParam('amosoft_item_id');
|
38 |
+
$model = Mage::getModel('dropship/orderitems')->load($id);
|
39 |
+
|
40 |
+
if ($model->getId()) {
|
41 |
+
$data = Mage::getSingleton('adminhtml/session')->getFormData(true);
|
42 |
+
if (!empty($data)) {
|
43 |
+
$model->setData($data);
|
44 |
+
}
|
45 |
+
Mage::register('sourcing_data', $model);
|
46 |
+
|
47 |
+
$this->loadLayout();
|
48 |
+
$this->_setActiveMenu('dropship/order_sourcing');
|
49 |
+
$this->_addBreadcrumb(Mage::helper('adminhtml')->__('Order Sourcing'), Mage::helper('adminhtml')->__('Order Sourcing'));
|
50 |
+
$this->_addContent($this->getLayout()->createBlock('dropship/adminhtml_sourcing_edit'))
|
51 |
+
->_addLeft($this->getLayout()->createBlock('dropship/adminhtml_sourcing_edit_tabs'));
|
52 |
+
$this->renderLayout();
|
53 |
+
} else {
|
54 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('dropship')->__('Sourcing does not exist'));
|
55 |
+
$this->_redirect('*/*/sourcinggrid');
|
56 |
+
}
|
57 |
+
}
|
58 |
+
public function saveAction() {
|
59 |
+
if ($data = $this->getRequest()->getPost()) {
|
60 |
+
$vendorCode = $data['amosoft_vendor_code'];
|
61 |
+
$sku = $data['sku'];
|
62 |
+
$model = Mage::getModel('dropship/orderitems');
|
63 |
+
$model->load($this->getRequest()->getParam('amosoft_item_id'));
|
64 |
+
$order = Mage::getModel('sales/order')->load($model->getItemOrderId());
|
65 |
+
$orderStatus = $order->getStatus();
|
66 |
+
if($this->getRequest()->getParam('cancel') == 'item'){
|
67 |
+
$itemStatusHistory = Mage::helper('dropship')->getSerialisedData($model->load($this->getRequest()->getParam('amosoft_item_id')), 'Cancelled', $orderStatus);
|
68 |
+
$model->setAmosoftItemStatus('Cancelled');
|
69 |
+
$model->setUpdatedBy('User');
|
70 |
+
$model->setItemStatusHistory($itemStatusHistory);
|
71 |
+
try{
|
72 |
+
$model->save();
|
73 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('dropship')->__('Item %s Cancelled Successfully ',$model->getSku()));
|
74 |
+
|
75 |
+
}catch(Exception $e){
|
76 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
77 |
+
}
|
78 |
+
$this->_redirect('*/*/sourcinggrid');
|
79 |
+
return;
|
80 |
+
}
|
81 |
+
if ($id = $this->getRequest()->getParam('amosoft_item_id')) {//the parameter name may be different
|
82 |
+
$model->load($id);
|
83 |
+
}
|
84 |
+
|
85 |
+
if(!$data['amosoft_vendor_code']){
|
86 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('dropship')->__('Under Processing By Amosoft Can Not Update %s Sku',$model->getSku()));
|
87 |
+
$this->_redirect('*/*/sourcinggrid');
|
88 |
+
return;
|
89 |
+
}
|
90 |
+
$itemStatusHistory = Mage::helper('dropship')->getSerialisedData($model->load($this->getRequest()->getParam('amosoft_item_id')), 'Transmitting', $orderStatus);
|
91 |
+
$arrData = $model->updateSourcingByUser(array('amosoft_vendor_code'=>$vendorCode,'product_sku'=>$sku, 'qty'=>$this->getRequest()->getParam('qty'), 'item_status_history'=>$itemStatusHistory));
|
92 |
+
$model->addData($arrData);
|
93 |
+
try {
|
94 |
+
$model->save();
|
95 |
+
Mage::getSingleton('adminhtml/session')->setFormData(false);
|
96 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('dropship')->__('Sourcing Updated For %s',$model->getSku()));
|
97 |
+
|
98 |
+
if ($this->getRequest()->getParam('back')) {
|
99 |
+
$this->_redirect('*/*/edit', array('amosoft_item_id' => $model->getId()));
|
100 |
+
return;
|
101 |
+
}
|
102 |
+
$this->_redirect('*/*/sourcinggrid');
|
103 |
+
return;
|
104 |
+
} catch (Exception $e) {
|
105 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
106 |
+
Mage::getSingleton('adminhtml/session')->setFormData($data);
|
107 |
+
$this->_redirect('*/*/edit', array('amosoft_item_id' => $model->getId(), '_current'=>true));
|
108 |
+
return;
|
109 |
+
}
|
110 |
+
}
|
111 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('dropship')->__('Unable to save sourcing'));
|
112 |
+
$this->_redirect('*/*/sourcinggrid');
|
113 |
+
}
|
114 |
+
|
115 |
+
public function saveSoapApiAction()
|
116 |
+
{
|
117 |
+
$paramsArray = $this->getRequest()->getParams();
|
118 |
+
if(!empty($paramsArray['user_id']) && !empty($paramsArray['api_key'])){
|
119 |
+
Mage::getModel('api/user')->load($paramsArray['user_id'])->setApiKey($paramsArray['api_key'])->save();
|
120 |
+
if(is_null(Mage::getSingleton('adminhtml/session')->getNotification()))
|
121 |
+
Mage::getModel('dropship/amosoft')->send(null,array());
|
122 |
+
$result['message'] = 'password save successfully';
|
123 |
+
}else{
|
124 |
+
$result['message'] = 'can not save password';
|
125 |
+
}
|
126 |
+
$result['success'] = 1;
|
127 |
+
$result = Mage::helper('core')->jsonEncode($result);
|
128 |
+
Mage::app()->getResponse()->setBody($result);
|
129 |
+
}
|
130 |
+
|
131 |
+
|
132 |
+
/**
|
133 |
+
* Export vendor in csv format
|
134 |
+
*/
|
135 |
+
public function exportCsvAction()
|
136 |
+
{
|
137 |
+
$fileName = 'sourcing.csv';
|
138 |
+
$content = $this->getLayout()->createBlock('dropship/adminhtml_sourcing_grid')->getCsvFile();
|
139 |
+
$this->_prepareDownloadResponse($fileName, $content);
|
140 |
+
}
|
141 |
+
|
142 |
+
/**
|
143 |
+
* Export vendor in Excel format
|
144 |
+
*/
|
145 |
+
public function exportXmlAction()
|
146 |
+
{
|
147 |
+
$fileName = 'sourcing.xml';
|
148 |
+
$content = $this->getLayout()->createBlock('dropship/adminhtml_sourcing_grid')->getExcelFile($fileName);
|
149 |
+
$this->_prepareDownloadResponse($fileName, $content);
|
150 |
+
}
|
151 |
+
|
152 |
+
public function viewOrderItemHistoryAction()
|
153 |
+
{
|
154 |
+
$this->_title($this->__('dropship'))->_title($this->__('View History'));
|
155 |
+
|
156 |
+
$this->_initAction();
|
157 |
+
$itemId = $this->getRequest()->getParam('amosoft_item_id');
|
158 |
+
$orderItems = Mage::getModel( 'dropship/orderitems' )->load($itemId, 'item_id');
|
159 |
+
|
160 |
+
$this->_title(sprintf("Item Sku %s", $orderItems->getSku()));
|
161 |
+
|
162 |
+
$this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
|
163 |
+
|
164 |
+
$this->_addContent($this->getLayout()->createBlock('dropship/adminhtml_sourcing_history_view'))
|
165 |
+
->_addLeft($this->getLayout()->createBlock('dropship/adminhtml_sourcing_history_view_tabs'));
|
166 |
+
|
167 |
+
$this->renderLayout();
|
168 |
+
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* Acl check for admin
|
173 |
+
*
|
174 |
+
* @return bool
|
175 |
+
*/
|
176 |
+
protected function _isAllowed()
|
177 |
+
{
|
178 |
+
return Mage::getSingleton('admin/session')->isAllowed('dropship/order_sourcing');
|
179 |
+
}
|
180 |
+
|
181 |
+
|
182 |
+
}
|
app/code/local/Amosoft/Dropship/controllers/Adminhtml/UploadController.php
ADDED
@@ -0,0 +1,389 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Amosoft_Dropship_Adminhtml_UploadController extends Mage_Adminhtml_Controller_Action
|
11 |
+
{
|
12 |
+
|
13 |
+
protected function _initAction()
|
14 |
+
{
|
15 |
+
$this->loadLayout()
|
16 |
+
->_setActiveMenu('dropship/upload_vendor_product')
|
17 |
+
->_addBreadcrumb(Mage::helper('adminhtml')->__('dropship'), Mage::helper('adminhtml')->__('Vendor Inventory'));
|
18 |
+
return $this;
|
19 |
+
}
|
20 |
+
|
21 |
+
public function indexAction()
|
22 |
+
{
|
23 |
+
$maxUploadSize = Mage::helper('importexport')->getMaxUploadSize();
|
24 |
+
$this->_getSession()->addNotice(
|
25 |
+
$this->__('Total size of uploadable files must not exceed %s', $maxUploadSize)
|
26 |
+
);
|
27 |
+
$this->_initAction()
|
28 |
+
->_title($this->__('Vendor Inventory'))
|
29 |
+
->_addBreadcrumb($this->__('Amosoft'), $this->__('Vendor Inventory'));
|
30 |
+
$this->renderLayout();
|
31 |
+
}
|
32 |
+
/**
|
33 |
+
* sourcing grid
|
34 |
+
*/
|
35 |
+
public function gridAction()
|
36 |
+
{
|
37 |
+
$this->getResponse()->setBody(
|
38 |
+
$this->getLayout()->createBlock('dropship/adminhtml_inventory_grid')->toHtml()
|
39 |
+
);
|
40 |
+
}
|
41 |
+
public function uploadFileAction()
|
42 |
+
{
|
43 |
+
$data = $this->getRequest()->getPost();
|
44 |
+
$productSetupMode = ($data['productsetupmode']) ? $data['productsetupmode'] : 0;
|
45 |
+
if($productSetupMode)
|
46 |
+
{
|
47 |
+
$redirectUrl = '*/adminhtml_ranking/index';
|
48 |
+
}
|
49 |
+
else
|
50 |
+
{
|
51 |
+
$redirectUrl = '*/*/index';
|
52 |
+
}
|
53 |
+
if(Mage::helper('dropship')->isProcessRunning('bulk_assign')){
|
54 |
+
$this->_getSession()->addError($this->__('Bulk product setup is currently running please try again later'));
|
55 |
+
$this->_redirect($redirectUrl);
|
56 |
+
return;
|
57 |
+
}
|
58 |
+
if ($data) {
|
59 |
+
try {
|
60 |
+
$import = Mage::getModel('dropship/uploadvendor');
|
61 |
+
$validationResult = $import->setData($data)->uploadSource();
|
62 |
+
if(!$validationResult){
|
63 |
+
$this->initialize();
|
64 |
+
$import->parseCsv(Mage::registry('file_name'),$data['vendor']);
|
65 |
+
$this->_getSession()->addSuccess(Mage::helper('dropship')->__('File upload successfully '));
|
66 |
+
$this->finalize();
|
67 |
+
}else{
|
68 |
+
$this->_getSession()->addError(Mage::helper('dropship')->__('File cannot be uploaded '));
|
69 |
+
}
|
70 |
+
} catch (Exception $e) {
|
71 |
+
$this->_getSession()->addError($e->getMessage());
|
72 |
+
$this->_redirect($redirectUrl);
|
73 |
+
}
|
74 |
+
} elseif ($this->getRequest()->isPost() && empty($_FILES)) {
|
75 |
+
$this->_getSession()->addError($this->__('File was not uploaded'));
|
76 |
+
} else {
|
77 |
+
$this->_getSession()->addError($this->__('Data is invalid or file is not uploaded'));
|
78 |
+
}
|
79 |
+
$this->_redirect($redirectUrl);
|
80 |
+
}
|
81 |
+
|
82 |
+
protected function initialize(){
|
83 |
+
Mage::helper('dropship')->startProcess('manual_upload');
|
84 |
+
}
|
85 |
+
|
86 |
+
protected function finalize(){
|
87 |
+
Mage::helper('dropship')->finishProcess('manual_upload');
|
88 |
+
}
|
89 |
+
|
90 |
+
public function vendorsuploadhistoryAction()
|
91 |
+
{
|
92 |
+
$this->loadLayout();
|
93 |
+
$this->getLayout()->getBlock("vendors_product_upload_history");
|
94 |
+
$this->renderLayout();
|
95 |
+
}
|
96 |
+
|
97 |
+
|
98 |
+
public function editAction()
|
99 |
+
{
|
100 |
+
$id = $this->getRequest()->getParam('amosoft_item_id');
|
101 |
+
$model = Mage::getModel('dropship/orderitems')->load($id);
|
102 |
+
if ($model->getId()) {
|
103 |
+
$data = Mage::getSingleton('adminhtml/session')->getFormData(true);
|
104 |
+
if (!empty($data)) {
|
105 |
+
$model->setData($data);
|
106 |
+
}
|
107 |
+
Mage::register('sourcing_data', $model);
|
108 |
+
$this->loadLayout();
|
109 |
+
$this->_setActiveMenu('dropship/order_sourcing');
|
110 |
+
$this->_addBreadcrumb(Mage::helper('adminhtml')->__('Order Sourcing'), Mage::helper('adminhtml')->__('Order Sourcing'));
|
111 |
+
$this->_addContent($this->getLayout()->createBlock('dropship/adminhtml_sourcing_edit'))
|
112 |
+
->_addLeft($this->getLayout()->createBlock('dropship/adminhtml_sourcing_edit_tabs'));
|
113 |
+
$this->renderLayout();
|
114 |
+
} else {
|
115 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('dropship')->__('Sourcing does not exist'));
|
116 |
+
$this->_redirect('*/*/sourcinggrid');
|
117 |
+
}
|
118 |
+
}
|
119 |
+
|
120 |
+
|
121 |
+
public function validateftpconnectionAction()
|
122 |
+
{
|
123 |
+
$paramsArray = $this->getRequest()->getParams();
|
124 |
+
$validateConnection = Mage::getModel('dropship/uploadvendor');
|
125 |
+
$result = $validateConnection->testFtpConnection($paramsArray['groups']['cron_settings_upload']['fields']);
|
126 |
+
$result = Mage::helper('core')->jsonEncode($result);
|
127 |
+
Mage::app()->getResponse()->setBody($result);
|
128 |
+
|
129 |
+
}
|
130 |
+
|
131 |
+
public function saveAction()
|
132 |
+
{
|
133 |
+
if ($data = $this->getRequest()->getPost()) {
|
134 |
+
$vendorCode = $data['amosoft_vendor_code'];
|
135 |
+
$sku = $data['sku'];
|
136 |
+
$model = Mage::getModel('dropship/orderitems');
|
137 |
+
|
138 |
+
if($this->getRequest()->getParam('cancel') == 'item'){
|
139 |
+
$model->load($this->getRequest()->getParam('amosoft_item_id'));
|
140 |
+
$model->setAmosoftItemStatus('Cancelled');
|
141 |
+
try{
|
142 |
+
$model->save();
|
143 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('dropship')->__('Item %s Cancelled Successfully ',$model->getSku()));
|
144 |
+
|
145 |
+
}catch(Exception $e){
|
146 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
147 |
+
}
|
148 |
+
$this->_redirect('*/*/sourcinggrid');
|
149 |
+
return;
|
150 |
+
}
|
151 |
+
if ($id = $this->getRequest()->getParam('amosoft_item_id')) {//the parameter name may be different
|
152 |
+
$model->load($id);
|
153 |
+
}
|
154 |
+
|
155 |
+
if(!$data['amosoft_vendor_code']){
|
156 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('dropship')->__('Under Processing By Amosoft Can Not Update %s Sku',$model->getSku()));
|
157 |
+
$this->_redirect('*/*/sourcinggrid');
|
158 |
+
return;
|
159 |
+
}
|
160 |
+
$arrData = $model->updateSourcingByUser(array('amosoft_vendor_code'=>$vendorCode,'product_sku'=>$sku));
|
161 |
+
$model->addData($arrData);
|
162 |
+
try {
|
163 |
+
$model->save();
|
164 |
+
$model->updateOrderStatus($model->getItemOrderId(),$model->getItemId());
|
165 |
+
Mage::getSingleton('adminhtml/session')->setFormData(false);
|
166 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('dropship')->__('Sourcing Updated For %s',$model->getSku()));
|
167 |
+
if ($this->getRequest()->getParam('back')) {
|
168 |
+
$this->_redirect('*/*/edit', array('amosoft_item_id' => $model->getId()));
|
169 |
+
return;
|
170 |
+
}
|
171 |
+
$this->_redirect('*/*/sourcinggrid');
|
172 |
+
return;
|
173 |
+
} catch (Exception $e) {
|
174 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
175 |
+
Mage::getSingleton('adminhtml/session')->setFormData($data);
|
176 |
+
$this->_redirect('*/*/edit', array('amosoft_item_id' => $model->getId(), '_current'=>true));
|
177 |
+
return;
|
178 |
+
}
|
179 |
+
}
|
180 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('dropship')->__('Unable to save sourcing'));
|
181 |
+
$this->_redirect('*/*/sourcinggrid');
|
182 |
+
}
|
183 |
+
|
184 |
+
public function saveSoapApiAction()
|
185 |
+
{
|
186 |
+
$paramsArray = $this->getRequest()->getParams();
|
187 |
+
if(!empty($paramsArray['user_id']) && !empty($paramsArray['api_key'])){
|
188 |
+
$data = array(
|
189 |
+
'scope' => 'default',
|
190 |
+
'scope_id' => '0',
|
191 |
+
'path' => 'amosoft_integration/integration/apipassword',
|
192 |
+
'value' => $paramsArray['api_key'],
|
193 |
+
|
194 |
+
);
|
195 |
+
Mage::getModel('api/user')->load($paramsArray['user_id'])->setApiKey($paramsArray['api_key'])->save();
|
196 |
+
Mage::getModel('core/config_data')->setData($data)->save();
|
197 |
+
$result['message'] = 'password save successfully';
|
198 |
+
}else{
|
199 |
+
$result['message'] = 'can not save password';
|
200 |
+
|
201 |
+
}
|
202 |
+
$result['success'] = 1;
|
203 |
+
$result = Mage::helper('core')->jsonEncode($result);
|
204 |
+
Mage::app()->getResponse()->setBody($result);
|
205 |
+
|
206 |
+
}
|
207 |
+
|
208 |
+
/**
|
209 |
+
* download vendor product import file in csv format
|
210 |
+
*/
|
211 |
+
public function DownloadAction()
|
212 |
+
{
|
213 |
+
$paramsArray = $this->getRequest()->getParams();
|
214 |
+
$isProductSetupMode = (isset($paramsArray['isproductsetupmode']) && $paramsArray['isproductsetupmode']) ? true : false;
|
215 |
+
$type = ($isProductSetupMode) ? 'setup' : 'upload';
|
216 |
+
$fileName = 'amosoft_supplier_product_'.$type.'.csv';
|
217 |
+
$content = Mage::getModel('dropship/uploadvendor')->getCsvFile($isProductSetupMode);
|
218 |
+
$this->_prepareDownloadResponse($fileName, $content);
|
219 |
+
$this->_redirect('*/*/index');
|
220 |
+
|
221 |
+
}
|
222 |
+
|
223 |
+
/* Bulk assignment vendor code to all product */
|
224 |
+
|
225 |
+
protected function _initSystem()
|
226 |
+
{
|
227 |
+
$this->_title($this->__('dropship'))
|
228 |
+
->_title($this->__('Bulk vendor assignment'));
|
229 |
+
$vendorCode = $this->getRequest()->getParam('amosoft_vendor_code');
|
230 |
+
if (!$vendorCode) {
|
231 |
+
Mage::getSingleton('adminhtml/session')->addError(
|
232 |
+
$this->__('Please select a supplier code'));
|
233 |
+
$this->_redirect('*/*');
|
234 |
+
return false;
|
235 |
+
}
|
236 |
+
Mage::register('bulk_vendor_Code', $vendorCode);
|
237 |
+
return $this;
|
238 |
+
}
|
239 |
+
public function runAction()
|
240 |
+
{
|
241 |
+
$this->_initSystem();
|
242 |
+
$this->loadLayout();
|
243 |
+
$this->renderLayout();
|
244 |
+
}
|
245 |
+
public function batchRunAction()
|
246 |
+
{
|
247 |
+
if ($this->getRequest()->isPost()) {
|
248 |
+
$vendorCode = $this->getRequest()->getPost('vendor_code');
|
249 |
+
$rowIds = $this->getRequest()->getPost('rows');
|
250 |
+
if (!is_array($rowIds) || count($rowIds) < 1) {
|
251 |
+
return;
|
252 |
+
}
|
253 |
+
$vendorName = Mage::getModel('dropship/ranking')->load($vendorCode,'amosoft_vendor_code');
|
254 |
+
$errors = array();
|
255 |
+
$saved = 0;
|
256 |
+
$skuError = array();
|
257 |
+
$skuSuccuess = array();
|
258 |
+
if(!Mage::getSingleton('adminhtml/session')->getTerminateExecution()){
|
259 |
+
Mage::helper('dropship')->startProcess('bulk_assign');
|
260 |
+
}else
|
261 |
+
{
|
262 |
+
return;
|
263 |
+
}
|
264 |
+
foreach($rowIds as $sku){
|
265 |
+
$collection = Mage::getModel('dropship/inventory')->getCollection()->addFieldToFilter('product_sku',$sku)->addFieldToFilter('amosoft_vendor_code',$vendorCode);
|
266 |
+
$inventoryId = ($collection->getSize() > 0) ? $collection->getFirstItem()->getId() : '';
|
267 |
+
if(!$inventoryId)
|
268 |
+
{
|
269 |
+
$inventoryCollection = Mage::getModel('dropship/inventory');
|
270 |
+
$inventoryCollection->setAmosoftVendorCode($vendorCode);
|
271 |
+
$inventoryCollection->setAmosoftVendorName(($vendorName) ? $vendorName->getAmosoftVendorName() : '');
|
272 |
+
$inventoryCollection->setProductSku($sku);
|
273 |
+
$inventoryCollection->setAmosoftVendorSku($sku);
|
274 |
+
$inventoryCollection->setStock(0);
|
275 |
+
$inventoryCollection->setCost(0);
|
276 |
+
$inventoryCollection->setUpdatedAt(now());
|
277 |
+
$inventoryCollection->setCreatedAt(now());
|
278 |
+
try {
|
279 |
+
$inventoryCollection->save();
|
280 |
+
Mage::getModel('dropship/inventory')->_saveInventoryLog('add',array('amosoft_vendor_code'=>$vendorCode,'amosoft_vendor_name'=>($vendorName) ? $vendorName->getAmosoftVendorName() : '','product_sku'=>$sku,'cost'=>0,'stock'=>0,'updated_by'=>'bulk_setup'));
|
281 |
+
$saved ++;
|
282 |
+
$skuSuccuess[] = $sku;
|
283 |
+
} catch (Exception $e) {
|
284 |
+
$errors[] = $e->getMessage();
|
285 |
+
$skuError[] = $sku;
|
286 |
+
continue;
|
287 |
+
}
|
288 |
+
}else
|
289 |
+
{
|
290 |
+
$errors[] = Mage::helper('dropship')->__('Skip %s as supplier %s already assigned.',$sku,$vendorCode);
|
291 |
+
$skuError[] = $sku;
|
292 |
+
continue;
|
293 |
+
}
|
294 |
+
}
|
295 |
+
$result = array(
|
296 |
+
'savedRows' => $saved,
|
297 |
+
'errors' => $errors,
|
298 |
+
'skuError' => $skuError,
|
299 |
+
'skuSuccess'=>$skuSuccuess
|
300 |
+
);
|
301 |
+
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
302 |
+
}
|
303 |
+
}
|
304 |
+
public function batchFinishAction()
|
305 |
+
{
|
306 |
+
$exeuctionTerminated = $this->getRequest()->getParam('exeuctionTerminated');
|
307 |
+
if($exeuctionTerminated){
|
308 |
+
Mage::getSingleton('adminhtml/session')->setTerminateExecution(true);
|
309 |
+
Mage::helper('dropship')->finishProcess('bulk_assign');
|
310 |
+
}else
|
311 |
+
{
|
312 |
+
Mage::helper('dropship')->finishProcess('bulk_assign');
|
313 |
+
}
|
314 |
+
$result = array();
|
315 |
+
$data = $this->getRequest()->getPost();
|
316 |
+
Mage::getResourceModel('dropship/vendorimportlog')->insertlog($data['amosoft_vendor_code'],'Bulk-product-setup',$data['sucees_sku'],$data['errorSkuCount']);
|
317 |
+
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
318 |
+
}
|
319 |
+
|
320 |
+
|
321 |
+
public function terminateAction(){
|
322 |
+
|
323 |
+
Mage::helper('dropship')->finishProcess('manual_upload');
|
324 |
+
$result = array();
|
325 |
+
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
326 |
+
}
|
327 |
+
|
328 |
+
/**
|
329 |
+
* Export vendor in csv format
|
330 |
+
*/
|
331 |
+
public function exportCsvAction()
|
332 |
+
{
|
333 |
+
$fileName = 'inventory.csv';
|
334 |
+
$content = $this->getLayout()->createBlock('dropship/adminhtml_inventory_grid')->getCsvFile();
|
335 |
+
$this->_prepareDownloadResponse($fileName, $content);
|
336 |
+
}
|
337 |
+
|
338 |
+
/**
|
339 |
+
* Export vendor in Excel format
|
340 |
+
*/
|
341 |
+
public function exportXmlAction()
|
342 |
+
{
|
343 |
+
$fileName = 'inventory.xml';
|
344 |
+
$content = $this->getLayout()->createBlock('dropship/adminhtml_inventory_grid')->getExcelFile($fileName);
|
345 |
+
$this->_prepareDownloadResponse($fileName, $content);
|
346 |
+
}
|
347 |
+
|
348 |
+
public function exportErrorCsvAction()
|
349 |
+
{
|
350 |
+
$params = $this->getRequest()->getParams();
|
351 |
+
$filename = 'upload_error.csv';
|
352 |
+
$content = Mage::helper('dropship')->generateErrorList($params);
|
353 |
+
if($content['error'])
|
354 |
+
return $this->getResponse()->setRedirect($this->getUrl('*/*/vendorsuploadhistory'));
|
355 |
+
$this->_prepareDownloadResponse($filename, $content);
|
356 |
+
}
|
357 |
+
|
358 |
+
/**
|
359 |
+
* Delete log action
|
360 |
+
*/
|
361 |
+
public function deleteAction()
|
362 |
+
{
|
363 |
+
if ($id = $this->getRequest()->getParam('id')) {
|
364 |
+
$tableName = Mage::getSingleton ( 'core/resource' )->getTableName ('dropship/vendor_import_log');
|
365 |
+
$connection = Mage::getSingleton ('core/resource')->getConnection ('core_read');
|
366 |
+
$select = $connection->select()->from($tableName)->where('error_id=?', $id);
|
367 |
+
$connection->fetchRow($select);
|
368 |
+
try {
|
369 |
+
$connection->delete($tableName,array('error_id'=>$id));
|
370 |
+
$this->_getSession()->addSuccess($this->__('The log has been deleted.'));
|
371 |
+
} catch (Exception $e) {
|
372 |
+
$this->_getSession()->addError($e->getMessage());
|
373 |
+
}
|
374 |
+
}
|
375 |
+
$this->getResponse()
|
376 |
+
->setRedirect($this->getUrl('*/*/vendorsuploadhistory', array('store'=>$this->getRequest()->getParam('store'))));
|
377 |
+
}
|
378 |
+
|
379 |
+
/**
|
380 |
+
* Acl check for admin
|
381 |
+
*
|
382 |
+
* @return bool
|
383 |
+
*/
|
384 |
+
protected function _isAllowed()
|
385 |
+
{
|
386 |
+
return Mage::getSingleton('admin/session')->isAllowed('dropship/inventory');
|
387 |
+
}
|
388 |
+
|
389 |
+
}
|
app/code/local/Amosoft/Dropship/data/dropship_setup/data-install-1.0.3.php
ADDED
@@ -0,0 +1,55 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
|
9 |
+
$coreConfigData = array(
|
10 |
+
array(
|
11 |
+
'scope' => 'default',
|
12 |
+
'scope_id' => '0',
|
13 |
+
'path' => 'amosoft_integration/integration/notificationstatus',
|
14 |
+
'value' => '0',
|
15 |
+
|
16 |
+
),
|
17 |
+
array(
|
18 |
+
'scope' => 'default',
|
19 |
+
'scope_id' => '0',
|
20 |
+
'path' => 'amosoft_integration/integration/dateofinstalltion',
|
21 |
+
'value' => date("Y-m-d H:i:s", Mage::getModel('core/date')->timestamp(time())),
|
22 |
+
|
23 |
+
),
|
24 |
+
array(
|
25 |
+
'scope' => 'default',
|
26 |
+
'scope_id' => '0',
|
27 |
+
'path' => 'amosoft_integration/integration/magento_version',
|
28 |
+
'value' => Mage::getVersion()
|
29 |
+
|
30 |
+
));
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Insert default blocks
|
34 |
+
*/
|
35 |
+
foreach ($coreConfigData as $data) {
|
36 |
+
|
37 |
+
Mage::getModel('core/config_data')->setData($data)->save();
|
38 |
+
}
|
39 |
+
|
40 |
+
/* Add attribute to catalog default set */
|
41 |
+
|
42 |
+
/*
|
43 |
+
$eavModel=Mage::getModel('eav/entity_setup','core_setup');
|
44 |
+
$attributeId=$eavModel->getAttribute('catalog_product','manufacturer');
|
45 |
+
$attributeSetId=$eavModel->getAttributeSetId('catalog_product','Default');
|
46 |
+
//Get attribute group info
|
47 |
+
$attributeGroupId=$eavModel->getAttributeGroup('catalog_product',$attributeSetId,'General');
|
48 |
+
//add attribute to a set
|
49 |
+
if(!empty($attributeId) && !empty($attributeId) && $attributeSetId)
|
50 |
+
$eavModel->addAttributeToSet('catalog_product',$attributeSetId,$attributeGroupId['attribute_group_id'],$attributeId['attribute_id']);
|
51 |
+
*/
|
52 |
+
Mage::getModel('dropship/ranking')->addPreDefineVendorList();
|
53 |
+
|
54 |
+
|
55 |
+
|
app/code/local/Amosoft/Dropship/data/dropship_setup/data-upgrade-1.0.3-1.0.4.php
ADDED
@@ -0,0 +1,104 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
|
9 |
+
$updateddata = array(
|
10 |
+
'scope' => 'default',
|
11 |
+
'scope_id' => '0',
|
12 |
+
'path' => 'amosoft_integration/integration/magento_base_url',
|
13 |
+
'value' => Mage::getBaseUrl()
|
14 |
+
|
15 |
+
);
|
16 |
+
|
17 |
+
try {
|
18 |
+
|
19 |
+
Mage::getModel('core/config_data')->load('amosoft_integration/integration/magento_base_url','path')->setData($updateddata)->save();
|
20 |
+
}
|
21 |
+
catch (Exception $e) {
|
22 |
+
echo $e->getMessage();
|
23 |
+
return;
|
24 |
+
}
|
25 |
+
|
26 |
+
/* update order state */
|
27 |
+
|
28 |
+
/* $orderStatuses = array('lb_ready_to_source'=>'Ready to Source');
|
29 |
+
Mage::getModel('dropship/amosoft')->updateOrderState($orderStatuses); */
|
30 |
+
|
31 |
+
|
32 |
+
|
33 |
+
/* If compiler is enabled than we need to run the compilation */
|
34 |
+
|
35 |
+
/*if (defined('COMPILER_INCLUDE_PATH')) {
|
36 |
+
try {
|
37 |
+
Mage::getModel('compiler/process')->run();
|
38 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
39 |
+
Mage::helper('compiler')->__('The compilation has completed.')
|
40 |
+
);
|
41 |
+
} catch (Mage_Core_Exception $e) {
|
42 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
43 |
+
} catch (Exception $e) {
|
44 |
+
Mage::getSingleton('adminhtml/session')->addError(
|
45 |
+
Mage::helper('compiler')->__('Compilation error')
|
46 |
+
);
|
47 |
+
}
|
48 |
+
}
|
49 |
+
*/
|
50 |
+
/* Load default values of Sourcing Schedule Cron Jobs*/
|
51 |
+
$coreConfigData = array(
|
52 |
+
array(
|
53 |
+
'scope' => 'default',
|
54 |
+
'scope_id' => '0',
|
55 |
+
'path' => 'amosoft_sourcing/cron_settings/sourcing_time',
|
56 |
+
'value' => '-2,10',
|
57 |
+
|
58 |
+
),
|
59 |
+
array(
|
60 |
+
'scope' => 'default',
|
61 |
+
'scope_id' => '0',
|
62 |
+
'path' => 'amosoft_sourcing/cron_settings/backorder_time',
|
63 |
+
'value' => '-2,15',
|
64 |
+
|
65 |
+
),
|
66 |
+
array(
|
67 |
+
'scope' => 'default',
|
68 |
+
'scope_id' => '0',
|
69 |
+
'path' => 'crontab/jobs/amosoft_dropship/schedule/cron_expr',
|
70 |
+
'value' => '*/10 * * * *',
|
71 |
+
|
72 |
+
),
|
73 |
+
array(
|
74 |
+
'scope' => 'default',
|
75 |
+
'scope_id' => '0',
|
76 |
+
'path' => 'crontab/jobs/amosoft_dropship/run/model',
|
77 |
+
'value' => 'dropship/observer::amosoftSourcing',
|
78 |
+
),
|
79 |
+
array(
|
80 |
+
'scope' => 'default',
|
81 |
+
'scope_id' => '0',
|
82 |
+
'path' => 'crontab/jobs/amosoft_backorder/schedule/cron_expr',
|
83 |
+
'value' => '*/15 * * * *',
|
84 |
+
),
|
85 |
+
array(
|
86 |
+
'scope' => 'default',
|
87 |
+
'scope_id' => '0',
|
88 |
+
'path' => 'crontab/jobs/amosoft_backorder/run/model',
|
89 |
+
'value' => 'dropship/observer::amosoftBackorder',
|
90 |
+
)
|
91 |
+
|
92 |
+
|
93 |
+
|
94 |
+
);
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Insert default blocks
|
98 |
+
*/
|
99 |
+
foreach ($coreConfigData as $data) {
|
100 |
+
if(!Mage::getModel('core/config_data')->load($data['path'],'path')->getData()){
|
101 |
+
Mage::getModel('core/config_data')->setData($data)->save();
|
102 |
+
}
|
103 |
+
}
|
104 |
+
|
app/code/local/Amosoft/Dropship/data/dropship_setup/data-upgrade-1.0.4-1.0.5.php
ADDED
@@ -0,0 +1,49 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
$coreConfigData = array(
|
9 |
+
array(
|
10 |
+
'scope' => 'default',
|
11 |
+
'scope_id' => '0',
|
12 |
+
'path' => 'amosoft_sourcing/cron_settings/backorder_time',
|
13 |
+
'value' => '-1,0',
|
14 |
+
|
15 |
+
),
|
16 |
+
array(
|
17 |
+
'scope' => 'default',
|
18 |
+
'scope_id' => '0',
|
19 |
+
'path' => 'amosoft_sourcing/cron_settings_upload/time',
|
20 |
+
'value' => '23,59',
|
21 |
+
|
22 |
+
),
|
23 |
+
array(
|
24 |
+
'scope' => 'default',
|
25 |
+
'scope_id' => '0',
|
26 |
+
'path' => 'crontab/jobs/amosoft_backorder/schedule/cron_expr',
|
27 |
+
'value' => '0 * * * *',
|
28 |
+
),
|
29 |
+
array(
|
30 |
+
'scope' => 'default',
|
31 |
+
'scope_id' => '0',
|
32 |
+
'path' => 'crontab/jobs/amosoft_uploadvendor/schedule/cron_expr',
|
33 |
+
'value' => '59 23 * * *',
|
34 |
+
),
|
35 |
+
array(
|
36 |
+
'scope' => 'default',
|
37 |
+
'scope_id' => '0',
|
38 |
+
'path' => 'crontab/jobs/amosoft_uploadvendor/run/model',
|
39 |
+
'value' => 'dropship/observer::ftpParseCsv',
|
40 |
+
)
|
41 |
+
|
42 |
+
);
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Insert default blocks
|
46 |
+
*/
|
47 |
+
foreach ($coreConfigData as $data) {
|
48 |
+
Mage::getModel('core/config_data')->setData($data)->save();
|
49 |
+
}
|
app/code/local/Amosoft/Dropship/data/dropship_setup/data-upgrade-1.0.5-1.0.6.php
ADDED
@@ -0,0 +1,25 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
$collectionSize = (Mage::getModel('dropship/inventory')->getCollection()->getSize() >= 1) ? 1 : '';
|
9 |
+
$coreConfigData = array(
|
10 |
+
array(
|
11 |
+
'scope' => 'default',
|
12 |
+
'scope_id' => '0',
|
13 |
+
'path' => 'amosoft/notification/vendor_setup',
|
14 |
+
'value' => $collectionSize,
|
15 |
+
|
16 |
+
)
|
17 |
+
|
18 |
+
);
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Insert default blocks
|
22 |
+
*/
|
23 |
+
foreach ($coreConfigData as $data) {
|
24 |
+
Mage::getModel('core/config_data')->setData($data)->save();
|
25 |
+
}
|
app/code/local/Amosoft/Dropship/etc/adminhtml.xml
ADDED
@@ -0,0 +1,99 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<acl>
|
4 |
+
<resources>
|
5 |
+
<admin>
|
6 |
+
<children>
|
7 |
+
<system>
|
8 |
+
<children>
|
9 |
+
<config>
|
10 |
+
<children>
|
11 |
+
<amosoft_integration translate="title" module="dropship">
|
12 |
+
<title>General Information</title>
|
13 |
+
<sort_order>1</sort_order>
|
14 |
+
</amosoft_integration>
|
15 |
+
<amosoft_sourcing translate="title" module="dropship">
|
16 |
+
<title>Sourcing Section</title>
|
17 |
+
<sort_order>2</sort_order>
|
18 |
+
</amosoft_sourcing>
|
19 |
+
<amosoft_cron translate="title" module="dropship">
|
20 |
+
<title>Cron Settings</title>
|
21 |
+
<sort_order>2</sort_order>
|
22 |
+
</amosoft_cron>
|
23 |
+
</children>
|
24 |
+
</config>
|
25 |
+
</children>
|
26 |
+
</system>
|
27 |
+
<dropship translate="title" module="dropship">
|
28 |
+
<title>amosoft</title>
|
29 |
+
<sort_order>91</sort_order>
|
30 |
+
<children>
|
31 |
+
<suppliers translate="title">
|
32 |
+
<title>Vendor</title>
|
33 |
+
</suppliers>
|
34 |
+
<inventory translate="title">
|
35 |
+
<title>Vendor/Supplier Inventory</title>
|
36 |
+
</inventory>
|
37 |
+
<vendor_ranking translate="title">
|
38 |
+
<title>Vendor/Supplier Ranking</title>
|
39 |
+
</vendor_ranking>
|
40 |
+
<order_sourcing translate="title">
|
41 |
+
<title>Vendor/Supplier Sourcing</title>
|
42 |
+
</order_sourcing>
|
43 |
+
<!-- <bar_report>
|
44 |
+
<title>Activity Report</title>
|
45 |
+
</bar_report> -->
|
46 |
+
<integration translate="title">
|
47 |
+
<title>Vendor/Supplier Information</title>
|
48 |
+
</integration>
|
49 |
+
</children>
|
50 |
+
</dropship>
|
51 |
+
</children>
|
52 |
+
</admin>
|
53 |
+
</resources>
|
54 |
+
</acl>
|
55 |
+
|
56 |
+
<menu>
|
57 |
+
<dropship translate="title" module="dropship">
|
58 |
+
<title>NET Dropship</title>
|
59 |
+
<sort_order>91</sort_order>
|
60 |
+
<children>
|
61 |
+
<inventory translate="title">
|
62 |
+
<title>Vendor/Supplier Inventory</title>
|
63 |
+
<action>amosoft/adminhtml_upload</action>
|
64 |
+
<sort_order>12</sort_order>
|
65 |
+
</inventory>
|
66 |
+
<vendor_ranking translate="title">
|
67 |
+
<title>Vendor/Supplier Management</title>
|
68 |
+
<action>amosoft/adminhtml_ranking</action>
|
69 |
+
<sort_order>13</sort_order>
|
70 |
+
</vendor_ranking>
|
71 |
+
<order_sourcing translate="title">
|
72 |
+
<title>Order Management</title>
|
73 |
+
<action>amosoft/adminhtml_sourcing/sourcinggrid</action>
|
74 |
+
<sort_order>11</sort_order>
|
75 |
+
</order_sourcing>
|
76 |
+
<!-- <bar_report translate="title">
|
77 |
+
<title>Activity Monitor</title>
|
78 |
+
<action>amosoft/adminhtml_report/activitymonitor</action>
|
79 |
+
<sort_order>14</sort_order>
|
80 |
+
</bar_report> -->
|
81 |
+
<amosoft_integration translate="title">
|
82 |
+
<title>Getting Started</title>
|
83 |
+
<action>adminhtml/system_config/edit/section/amosoft_integration</action>
|
84 |
+
<sort_order>16</sort_order>
|
85 |
+
</amosoft_integration>
|
86 |
+
<amosoft_sourcing translate="title">
|
87 |
+
<title>Configuration/Setup</title>
|
88 |
+
<action>adminhtml/system_config/edit/section/amosoft_sourcing</action>
|
89 |
+
<sort_order>15</sort_order>
|
90 |
+
</amosoft_sourcing>
|
91 |
+
<!-- <upload_vendor_product translate="title">
|
92 |
+
<title>Upload Vendor Product</title>
|
93 |
+
<action>dropship/adminhtml_upload/index</action>
|
94 |
+
<sort_order>17</sort_order>
|
95 |
+
</upload_vendor_product> -->
|
96 |
+
</children>
|
97 |
+
</dropship>
|
98 |
+
</menu>
|
99 |
+
</config>
|
app/code/local/Amosoft/Dropship/etc/api.xml
ADDED
@@ -0,0 +1,442 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Magento
|
5 |
+
*
|
6 |
+
* @category Mage
|
7 |
+
* @package Mage_Sales
|
8 |
+
*/
|
9 |
+
-->
|
10 |
+
<config>
|
11 |
+
<api>
|
12 |
+
<resources>
|
13 |
+
<sales_order translate="title" module="sales">
|
14 |
+
<model>sales/order_api</model>
|
15 |
+
<title>Order API</title>
|
16 |
+
<acl>sales/order</acl>
|
17 |
+
<methods>
|
18 |
+
<list translate="title" module="sales">
|
19 |
+
<title>Retrieve list of orders by filters</title>
|
20 |
+
<method>items</method>
|
21 |
+
<acl>sales/order/info</acl>
|
22 |
+
</list>
|
23 |
+
<info translate="title" module="sales">
|
24 |
+
<title>Retrieve order information</title>
|
25 |
+
<acl>sales/order/info</acl>
|
26 |
+
</info>
|
27 |
+
<addComment translate="title" module="sales">
|
28 |
+
<title>Add comment to order</title>
|
29 |
+
<acl>sales/order/change</acl>
|
30 |
+
</addComment>
|
31 |
+
<hold translate="title" module="sales">
|
32 |
+
<title>Hold order</title>
|
33 |
+
<acl>sales/order/change</acl>
|
34 |
+
</hold>
|
35 |
+
<unhold translate="title" module="sales">
|
36 |
+
<title>Unhold order</title>
|
37 |
+
<acl>sales/order/change</acl>
|
38 |
+
</unhold>
|
39 |
+
<updateItemStatus translate="title" module="fulfillment">
|
40 |
+
<title>updateItemStatus</title>
|
41 |
+
<acl>sales/order/updateitemstatus</acl>
|
42 |
+
</updateItemStatus>
|
43 |
+
<getAmosoftOrderByItemStatus>
|
44 |
+
<title>getAmosoftOrderByItemStatus</title>
|
45 |
+
<acl>sales/order/getamosoftorderbyitemstatus</acl>
|
46 |
+
</getAmosoftOrderByItemStatus>
|
47 |
+
<setAmosoftOrderItemStatus>
|
48 |
+
<title>setAmosoftOrderItemStatus</title>
|
49 |
+
<acl>sales/order/setamosoftorderitemstatus</acl>
|
50 |
+
</setAmosoftOrderItemStatus>
|
51 |
+
|
52 |
+
</methods>
|
53 |
+
<faults module="sales">
|
54 |
+
<not_exists>
|
55 |
+
<code>100</code>
|
56 |
+
<message>Requested order not exists.</message>
|
57 |
+
</not_exists>
|
58 |
+
<filters_invalid>
|
59 |
+
<code>101</code>
|
60 |
+
<message>Invalid filters given. Details in error message.</message>
|
61 |
+
</filters_invalid>
|
62 |
+
<data_invalid>
|
63 |
+
<code>102</code>
|
64 |
+
<message>Invalid data given. Details in error message.</message>
|
65 |
+
</data_invalid>
|
66 |
+
<status_not_changed>
|
67 |
+
<code>103</code>
|
68 |
+
<message>Order status not changed. Details in error message.</message>
|
69 |
+
</status_not_changed>
|
70 |
+
<invaild_store>
|
71 |
+
<code>104</code>
|
72 |
+
<message>Invaild Store Id</message>
|
73 |
+
</invaild_store>
|
74 |
+
</faults>
|
75 |
+
</sales_order>
|
76 |
+
<dropship translate="title" module="dropship">
|
77 |
+
<model>dropship/order_dropship_api</model>
|
78 |
+
<title>Custom API </title>
|
79 |
+
<methods>
|
80 |
+
<getAmosoftInvoices translate="title" module="dropship">
|
81 |
+
<title>Amosoft Invoices</title>
|
82 |
+
<method>getAmosoftInvoices</method>
|
83 |
+
</getAmosoftInvoices>
|
84 |
+
<createAmosoftShipment translate="title" module="dropship">
|
85 |
+
<title>Amosoft Shipment</title>
|
86 |
+
</createAmosoftShipment>
|
87 |
+
<getAmosoftShipments translate="title" module="dropship">
|
88 |
+
<title>Amosoft Shipment</title>
|
89 |
+
</getAmosoftShipments>
|
90 |
+
<addShippingCharges translate="title" module="dropship">
|
91 |
+
<title>Amosoft Invoice</title>
|
92 |
+
</addShippingCharges>
|
93 |
+
<getAmosoftSupplierInventory translate="title" module="dropship">
|
94 |
+
<title>Amosoft Supplier Inventory</title>
|
95 |
+
</getAmosoftSupplierInventory>
|
96 |
+
<updateAmosoftInventory translate="title" module="dropship">
|
97 |
+
<title>Amosoft Update Supplier Inventory</title>
|
98 |
+
</updateAmosoftInventory>
|
99 |
+
<addSupplierToProduct translate="title" module="dropship">
|
100 |
+
<title>Amosoft Add Supplier to Product</title>
|
101 |
+
</addSupplierToProduct>
|
102 |
+
</methods>
|
103 |
+
<faults module="dropship">
|
104 |
+
<data_invalid>100
|
105 |
+
<message>Invalid data</message>
|
106 |
+
</data_invalid>
|
107 |
+
</faults>
|
108 |
+
</dropship>
|
109 |
+
<sales_order_shipment>
|
110 |
+
<title>Shipment API</title>
|
111 |
+
<model>sales/order_shipment_api</model>
|
112 |
+
<acl>sales/order/shipment</acl>
|
113 |
+
<methods>
|
114 |
+
<list translate="title" module="sales">
|
115 |
+
<title>Retrieve list of shipments by filters</title>
|
116 |
+
<method>items</method>
|
117 |
+
<acl>sales/order/shipment/info</acl>
|
118 |
+
</list>
|
119 |
+
<info translate="title" module="sales">
|
120 |
+
<title>Retrieve shipment information</title>
|
121 |
+
<acl>sales/order/shipment/info</acl>
|
122 |
+
</info>
|
123 |
+
<sendInfo translate="title" module="sales">
|
124 |
+
<title>Send shipment info</title>
|
125 |
+
<acl>sales/order/shipment/send</acl>
|
126 |
+
</sendInfo>
|
127 |
+
<create translate="title" module="sales">
|
128 |
+
<title>Create new shipment for order</title>
|
129 |
+
<acl>sales/order/shipment/create</acl>
|
130 |
+
</create>
|
131 |
+
<addComment translate="title" module="sales">
|
132 |
+
<title>Add new comment to shipment</title>
|
133 |
+
<acl>sales/order/shipment/comment</acl>
|
134 |
+
</addComment>
|
135 |
+
<addTrack translate="title" module="sales">
|
136 |
+
<title>Add new tracking number</title>
|
137 |
+
<acl>sales/order/shipment/track</acl>
|
138 |
+
</addTrack>
|
139 |
+
<removeTrack translate="title" module="sales">
|
140 |
+
<title>Remove tracking number</title>
|
141 |
+
<acl>sales/order/shipment/track</acl>
|
142 |
+
</removeTrack>
|
143 |
+
<getCarriers>
|
144 |
+
<title>Retrieve list of allowed carriers for order</title>
|
145 |
+
</getCarriers>
|
146 |
+
</methods>
|
147 |
+
<faults module="sales">
|
148 |
+
<not_exists>
|
149 |
+
<code>100</code>
|
150 |
+
<message>Requested shipment not exists.</message>
|
151 |
+
</not_exists>
|
152 |
+
<filters_invalid>
|
153 |
+
<code>101</code>
|
154 |
+
<message>Invalid filters given. Details in error message.</message>
|
155 |
+
</filters_invalid>
|
156 |
+
<data_invalid>
|
157 |
+
<code>102</code>
|
158 |
+
<message>Invalid data given. Details in error message.</message>
|
159 |
+
</data_invalid>
|
160 |
+
<order_not_exists>
|
161 |
+
<code>103</code>
|
162 |
+
<message>Requested order not exists.</message>
|
163 |
+
</order_not_exists>
|
164 |
+
<track_not_exists>
|
165 |
+
<code>104</code>
|
166 |
+
<message>Requested tracking not exists.</message>
|
167 |
+
</track_not_exists>
|
168 |
+
<track_not_deleted>
|
169 |
+
<code>105</code>
|
170 |
+
<message>Tracking not deleted. Details in error message.</message>
|
171 |
+
</track_not_deleted>
|
172 |
+
</faults>
|
173 |
+
</sales_order_shipment>
|
174 |
+
<sales_order_invoice>
|
175 |
+
<title>Invoice API</title>
|
176 |
+
<model>sales/order_invoice_api</model>
|
177 |
+
<acl>sales/order/invoice</acl>
|
178 |
+
<methods>
|
179 |
+
<list translate="title" module="sales">
|
180 |
+
<title>Retrieve list of invoices by filters</title>
|
181 |
+
<method>items</method>
|
182 |
+
<acl>sales/order/invoice/info</acl>
|
183 |
+
</list>
|
184 |
+
<info translate="title" module="sales">
|
185 |
+
<title>Retrieve invoice information</title>
|
186 |
+
<acl>sales/order/invoice/info</acl>
|
187 |
+
</info>
|
188 |
+
<create translate="title" module="sales">
|
189 |
+
<title>Create new invoice for order</title>
|
190 |
+
<acl>sales/order/invoice/create</acl>
|
191 |
+
</create>
|
192 |
+
<addComment translate="title" module="sales">
|
193 |
+
<title>Add new comment to shipment</title>
|
194 |
+
<acl>sales/order/invoice/comment</acl>
|
195 |
+
</addComment>
|
196 |
+
<capture translate="title" module="sales">
|
197 |
+
<title>Capture invoice</title>
|
198 |
+
<acl>sales/order/invoice/capture</acl>
|
199 |
+
</capture>
|
200 |
+
<void translate="title" module="sales">
|
201 |
+
<title>Void invoice</title>
|
202 |
+
<acl>sales/order/invoice/void</acl>
|
203 |
+
</void>
|
204 |
+
<cancel translate="title" module="sales">
|
205 |
+
<title>Cancel invoice</title>
|
206 |
+
<acl>sales/order/invoice/cancel</acl>
|
207 |
+
</cancel>
|
208 |
+
</methods>
|
209 |
+
<faults module="sales">
|
210 |
+
<not_exists>
|
211 |
+
<code>100</code>
|
212 |
+
<message>Requested invoice does not exist.</message>
|
213 |
+
</not_exists>
|
214 |
+
<invalid_filter>
|
215 |
+
<code>101</code>
|
216 |
+
<message>Invalid filter given. Details in error message.</message>
|
217 |
+
</invalid_filter>
|
218 |
+
<data_invalid>
|
219 |
+
<code>102</code>
|
220 |
+
<message>Invalid data given. Details in error message.</message>
|
221 |
+
</data_invalid>
|
222 |
+
<order_not_exists>
|
223 |
+
<code>103</code>
|
224 |
+
<message>Requested order not exists.</message>
|
225 |
+
</order_not_exists>
|
226 |
+
<status_not_changed>
|
227 |
+
<code>104</code>
|
228 |
+
<message>Invoice status not changed</message>
|
229 |
+
</status_not_changed>
|
230 |
+
</faults>
|
231 |
+
</sales_order_invoice>
|
232 |
+
<sales_order_creditmemo>
|
233 |
+
<title>Credit memo API</title>
|
234 |
+
<model>sales/order_creditmemo_api</model>
|
235 |
+
<acl>sales/order/creditmemo</acl>
|
236 |
+
<methods>
|
237 |
+
<list translate="title" module="sales">
|
238 |
+
<title>Retrieve list of credit memos by filters</title>
|
239 |
+
<method>items</method>
|
240 |
+
<acl>sales/order/creditmemo/list</acl>
|
241 |
+
</list>
|
242 |
+
<info translate="title" module="sales">
|
243 |
+
<title>Retrieve credit memo information</title>
|
244 |
+
<acl>sales/order/creditmemo/info</acl>
|
245 |
+
</info>
|
246 |
+
<create translate="title" module="sales">
|
247 |
+
<title>Create new credit memo for order</title>
|
248 |
+
<acl>sales/order/creditmemo/create</acl>
|
249 |
+
</create>
|
250 |
+
<addComment translate="title" module="sales">
|
251 |
+
<title>Add new comment to credit memo</title>
|
252 |
+
<acl>sales/order/creditmemo/comment</acl>
|
253 |
+
</addComment>
|
254 |
+
<cancel translate="title" module="sales">
|
255 |
+
<title>Cancel credit memo</title>
|
256 |
+
<acl>sales/order/creditmemo/cancel</acl>
|
257 |
+
</cancel>
|
258 |
+
</methods>
|
259 |
+
<faults module="sales">
|
260 |
+
<not_exists>
|
261 |
+
<code>100</code>
|
262 |
+
<message>Requested credit memo does not exist</message>
|
263 |
+
</not_exists>
|
264 |
+
<invalid_filter>
|
265 |
+
<code>101</code>
|
266 |
+
<message>Invalid filter given. Details in error message</message>
|
267 |
+
</invalid_filter>
|
268 |
+
<data_invalid>
|
269 |
+
<code>102</code>
|
270 |
+
<message>Invalid data given. Details in error message</message>
|
271 |
+
</data_invalid>
|
272 |
+
<order_not_exists>
|
273 |
+
<code>103</code>
|
274 |
+
<message>Requested order does not exist</message>
|
275 |
+
</order_not_exists>
|
276 |
+
<status_not_changed>
|
277 |
+
<code>104</code>
|
278 |
+
<message>Credit memo status not changed</message>
|
279 |
+
</status_not_changed>
|
280 |
+
<cannot_refund_to_storecredit>
|
281 |
+
<code>105</code>
|
282 |
+
<message>Money can not be refunded to the store credit account as order was created by guest</message>
|
283 |
+
</cannot_refund_to_storecredit>
|
284 |
+
<cannot_create_creditmemo>
|
285 |
+
<code>106</code>
|
286 |
+
<message>Credit memo for requested order can not be created.</message>
|
287 |
+
</cannot_create_creditmemo>
|
288 |
+
</faults>
|
289 |
+
</sales_order_creditmemo>
|
290 |
+
<dropship_versions>
|
291 |
+
<title>dropship</title>
|
292 |
+
<model>dropship/versions_api</model>
|
293 |
+
<acl>dropship/versions</acl>
|
294 |
+
<methods>
|
295 |
+
|
296 |
+
<getdropshipversion translate="title" module="dropship">
|
297 |
+
<title>getdropshipversion</title>
|
298 |
+
<title>get dropship vesion</title>
|
299 |
+
<method>getdropshipversion</method>
|
300 |
+
|
301 |
+
</getdropshipversion>
|
302 |
+
|
303 |
+
</methods>
|
304 |
+
</dropship_versions>
|
305 |
+
</resources>
|
306 |
+
<resources_alias>
|
307 |
+
<order>sales_order</order>
|
308 |
+
<order_shipment>sales_order_shipment</order_shipment>
|
309 |
+
<order_invoice>sales_order_invoice</order_invoice>
|
310 |
+
<order_creditmemo>sales_order_creditmemo</order_creditmemo>
|
311 |
+
<versions>dropship_versions</versions>
|
312 |
+
</resources_alias>
|
313 |
+
<v2>
|
314 |
+
<resources_function_prefix>
|
315 |
+
<order>salesOrder</order>
|
316 |
+
<order_shipment>salesOrderShipment</order_shipment>
|
317 |
+
<order_invoice>salesOrderInvoice</order_invoice>
|
318 |
+
<order_creditmemo>salesOrderCreditmemo</order_creditmemo>
|
319 |
+
<dropship_versions>versions</dropship_versions>
|
320 |
+
</resources_function_prefix>
|
321 |
+
</v2>
|
322 |
+
<rest>
|
323 |
+
<mapping>
|
324 |
+
<sales_order>
|
325 |
+
<delete>
|
326 |
+
<method>cancel</method>
|
327 |
+
</delete>
|
328 |
+
<post>
|
329 |
+
<resource>cart</resource>
|
330 |
+
<method>order</method>
|
331 |
+
</post>
|
332 |
+
</sales_order>
|
333 |
+
<sales_order_invoice>
|
334 |
+
<delete>
|
335 |
+
<method>cancel</method>
|
336 |
+
</delete>
|
337 |
+
</sales_order_invoice>
|
338 |
+
<sales_order_creditmemo>
|
339 |
+
<delete>
|
340 |
+
<method>cancel</method>
|
341 |
+
</delete>
|
342 |
+
</sales_order_creditmemo>
|
343 |
+
</mapping>
|
344 |
+
</rest>
|
345 |
+
<acl>
|
346 |
+
<resources>
|
347 |
+
<sales translate="title" module="sales">
|
348 |
+
<title>Sales</title>
|
349 |
+
<sort_order>2</sort_order>
|
350 |
+
<order translate="title" module="sales">
|
351 |
+
<title>Order</title>
|
352 |
+
<change translate="title" module="sales">
|
353 |
+
<title>Change status, add comments</title>
|
354 |
+
</change>
|
355 |
+
<info translate="title" module="sales">
|
356 |
+
<title>Retrieve orders info</title>
|
357 |
+
</info>
|
358 |
+
<updateitemstatus translate="title" module="sales">
|
359 |
+
<title>update Item Status</title>
|
360 |
+
</updateitemstatus>
|
361 |
+
<getamosoftorderbyitemstatus translate="title" module="sales">
|
362 |
+
<title>Retrive orders by item status</title>
|
363 |
+
</getamosoftorderbyitemstatus>
|
364 |
+
<setamosoftorderitemstatus translate="title" module="sales">
|
365 |
+
<title>Set order item status</title>
|
366 |
+
</setamosoftorderitemstatus>
|
367 |
+
|
368 |
+
<shipment translate="title" module="sales">
|
369 |
+
<title>Order shipments</title>
|
370 |
+
<create translate="title" module="sales">
|
371 |
+
<title>Create</title>
|
372 |
+
</create>
|
373 |
+
<comment translate="title" module="sales">
|
374 |
+
<title>Comments</title>
|
375 |
+
</comment>
|
376 |
+
<track translate="title" module="sales">
|
377 |
+
<title>Tracking</title>
|
378 |
+
</track>
|
379 |
+
<info translate="title" module="sales">
|
380 |
+
<title>Retrieve shipment info</title>
|
381 |
+
</info>
|
382 |
+
<send translate="title" module="sales">
|
383 |
+
<title>Send shipment info</title>
|
384 |
+
</send>
|
385 |
+
|
386 |
+
</shipment>
|
387 |
+
<invoice translate="title" module="sales">
|
388 |
+
<title>Order invoice</title>
|
389 |
+
<create translate="title" module="sales">
|
390 |
+
<title>Create</title>
|
391 |
+
</create>
|
392 |
+
<comment translate="title" module="sales">
|
393 |
+
<title>Comments</title>
|
394 |
+
</comment>
|
395 |
+
<capture translate="title" module="sales">
|
396 |
+
<title>Capture</title>
|
397 |
+
</capture>
|
398 |
+
<void translate="title" module="sales">
|
399 |
+
<title>Void</title>
|
400 |
+
</void>
|
401 |
+
<cancel translate="title" module="sales">
|
402 |
+
<title>Cancel</title>
|
403 |
+
</cancel>
|
404 |
+
<info translate="title" module="sales">
|
405 |
+
<title>Retrieve invoice info</title>
|
406 |
+
</info>
|
407 |
+
</invoice>
|
408 |
+
<creditmemo translate="title" module="sales">
|
409 |
+
<title>Order credit memo</title>
|
410 |
+
<create translate="title" module="sales">
|
411 |
+
<title>Create</title>
|
412 |
+
</create>
|
413 |
+
<comment translate="title" module="sales">
|
414 |
+
<title>Comments</title>
|
415 |
+
</comment>
|
416 |
+
<cancel translate="title" module="sales">
|
417 |
+
<title>Cancel</title>
|
418 |
+
</cancel>
|
419 |
+
<info translate="title" module="sales">
|
420 |
+
<title>Retrieve credit memo info</title>
|
421 |
+
</info>
|
422 |
+
<list translate="title" module="sales">
|
423 |
+
<title>Retrieve credit memo list</title>
|
424 |
+
</list>
|
425 |
+
</creditmemo>
|
426 |
+
</order>
|
427 |
+
</sales>
|
428 |
+
<dropship translate="title" module="dropship">
|
429 |
+
<title>dropship</title>
|
430 |
+
<sort_order>1</sort_order>
|
431 |
+
<versions translate="title" module="dropship">
|
432 |
+
<title>versions</title>
|
433 |
+
<sort_order>2000</sort_order>
|
434 |
+
<dropship translate="title" module="dropship">
|
435 |
+
<title>dropship</title>
|
436 |
+
</dropship>
|
437 |
+
</versions>
|
438 |
+
</dropship>
|
439 |
+
</resources>
|
440 |
+
</acl>
|
441 |
+
</api>
|
442 |
+
</config>
|
app/code/local/Amosoft/Dropship/etc/api2.xml
ADDED
@@ -0,0 +1,167 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Magento
|
5 |
+
*
|
6 |
+
* @category Mage
|
7 |
+
* @package Mage_Catalog
|
8 |
+
*/
|
9 |
+
-->
|
10 |
+
<config>
|
11 |
+
<api2>
|
12 |
+
<resource_groups>
|
13 |
+
<dropship translate="title" module="api2">
|
14 |
+
<title>Amosoft</title>
|
15 |
+
<sort_order>30</sort_order>
|
16 |
+
<children>
|
17 |
+
<product_import translate="title" module="api2">
|
18 |
+
<title>Catalog</title>
|
19 |
+
<sort_order>50</sort_order>
|
20 |
+
</product_import>
|
21 |
+
<inventory_import translate="title" module="api2">
|
22 |
+
<title>Inventory</title>
|
23 |
+
<sort_order>51</sort_order>
|
24 |
+
</inventory_import>
|
25 |
+
</children>
|
26 |
+
</dropship>
|
27 |
+
</resource_groups>
|
28 |
+
<resources>
|
29 |
+
<import translate="title" module="api2">
|
30 |
+
<group>product_import</group>
|
31 |
+
<model>dropship/api2_product</model>
|
32 |
+
<working_model>catalog/product</working_model>
|
33 |
+
<title>Catalog Import</title>
|
34 |
+
<sort_order>10</sort_order>
|
35 |
+
<privileges>
|
36 |
+
<admin>
|
37 |
+
<create>1</create>
|
38 |
+
</admin>
|
39 |
+
<guest>
|
40 |
+
<create>1</create>
|
41 |
+
</guest>
|
42 |
+
</privileges>
|
43 |
+
<attributes translate="entity_id type_id attribute_set_id stock_data image_url is_saleable total_reviews_count url buy_now_url has_custom_options is_in_stock regular_price_with_tax regular_price_without_tax final_price_with_tax final_price_without_tax use_config_gift_message_available use_config_gift_wrapping_available url_key_create_redirect" module="api2">
|
44 |
+
<entity_id>Product ID</entity_id>
|
45 |
+
</attributes>
|
46 |
+
<entity_only_attributes>
|
47 |
+
<customer>
|
48 |
+
<read>
|
49 |
+
<has_custom_options>1</has_custom_options>
|
50 |
+
</read>
|
51 |
+
</customer>
|
52 |
+
<guest>
|
53 |
+
<read>
|
54 |
+
<has_custom_options>1</has_custom_options>
|
55 |
+
<tier_price>1</tier_price>
|
56 |
+
<total_reviews_count>1</total_reviews_count>
|
57 |
+
<url>1</url>
|
58 |
+
<buy_now_url>1</buy_now_url>
|
59 |
+
<has_custom_options>1</has_custom_options>
|
60 |
+
<is_in_stock>1</is_in_stock>
|
61 |
+
</read>
|
62 |
+
</guest>
|
63 |
+
</entity_only_attributes>
|
64 |
+
<exclude_attributes>
|
65 |
+
<customer>
|
66 |
+
<read>
|
67 |
+
<attribute_set_id>1</attribute_set_id>
|
68 |
+
</read>
|
69 |
+
</customer>
|
70 |
+
<guest>
|
71 |
+
<read>
|
72 |
+
<attribute_set_id>1</attribute_set_id>
|
73 |
+
</read>
|
74 |
+
</guest>
|
75 |
+
<admin>
|
76 |
+
<read>
|
77 |
+
<allow_open_amount>1</allow_open_amount>
|
78 |
+
</read>
|
79 |
+
<write>
|
80 |
+
<allow_open_amount>1</allow_open_amount>
|
81 |
+
</write>
|
82 |
+
</admin>
|
83 |
+
</exclude_attributes>
|
84 |
+
<routes>
|
85 |
+
<route_entity>
|
86 |
+
<route>/productsimport/:id</route>
|
87 |
+
<action_type>collection</action_type>
|
88 |
+
</route_entity>
|
89 |
+
<route_collection>
|
90 |
+
<route>/productsimport</route>
|
91 |
+
<action_type>collection</action_type>
|
92 |
+
</route_collection>
|
93 |
+
|
94 |
+
</routes>
|
95 |
+
<versions>1</versions>
|
96 |
+
</import>
|
97 |
+
<inventory_import translate="title" module="api2">
|
98 |
+
<group>inventory_import</group>
|
99 |
+
<model>dropship/api2_inventory</model>
|
100 |
+
<working_model>dropship/inventory</working_model>
|
101 |
+
<title>Inventory Import</title>
|
102 |
+
<sort_order>10</sort_order>
|
103 |
+
<privileges>
|
104 |
+
<admin>
|
105 |
+
<create>1</create>
|
106 |
+
</admin>
|
107 |
+
<guest>
|
108 |
+
<create>1</create>
|
109 |
+
</guest>
|
110 |
+
</privileges>
|
111 |
+
<attributes translate="entity_id type_id attribute_set_id stock_data image_url is_saleable total_reviews_count url buy_now_url has_custom_options is_in_stock regular_price_with_tax regular_price_without_tax final_price_with_tax final_price_without_tax use_config_gift_message_available use_config_gift_wrapping_available url_key_create_redirect" module="api2">
|
112 |
+
<id>id</id>
|
113 |
+
</attributes>
|
114 |
+
<entity_only_attributes>
|
115 |
+
<customer>
|
116 |
+
<read>
|
117 |
+
<has_custom_options>1</has_custom_options>
|
118 |
+
</read>
|
119 |
+
</customer>
|
120 |
+
<guest>
|
121 |
+
<read>
|
122 |
+
<has_custom_options>1</has_custom_options>
|
123 |
+
<tier_price>1</tier_price>
|
124 |
+
<total_reviews_count>1</total_reviews_count>
|
125 |
+
<url>1</url>
|
126 |
+
<buy_now_url>1</buy_now_url>
|
127 |
+
<has_custom_options>1</has_custom_options>
|
128 |
+
<is_in_stock>1</is_in_stock>
|
129 |
+
</read>
|
130 |
+
</guest>
|
131 |
+
</entity_only_attributes>
|
132 |
+
<exclude_attributes>
|
133 |
+
<customer>
|
134 |
+
<read>
|
135 |
+
<attribute_set_id>1</attribute_set_id>
|
136 |
+
</read>
|
137 |
+
</customer>
|
138 |
+
<guest>
|
139 |
+
<read>
|
140 |
+
<attribute_set_id>1</attribute_set_id>
|
141 |
+
</read>
|
142 |
+
</guest>
|
143 |
+
<admin>
|
144 |
+
<read>
|
145 |
+
<allow_open_amount>1</allow_open_amount>
|
146 |
+
</read>
|
147 |
+
<write>
|
148 |
+
<allow_open_amount>1</allow_open_amount>
|
149 |
+
</write>
|
150 |
+
</admin>
|
151 |
+
</exclude_attributes>
|
152 |
+
<routes>
|
153 |
+
<route_entity>
|
154 |
+
<route>/inventoryimport/:id</route>
|
155 |
+
<action_type>collection</action_type>
|
156 |
+
</route_entity>
|
157 |
+
<route_collection>
|
158 |
+
<route>/inventoryimport</route>
|
159 |
+
<action_type>collection</action_type>
|
160 |
+
</route_collection>
|
161 |
+
|
162 |
+
</routes>
|
163 |
+
<versions>1</versions>
|
164 |
+
</inventory_import>
|
165 |
+
</resources>
|
166 |
+
</api2>
|
167 |
+
</config>
|
app/code/local/Amosoft/Dropship/etc/config.xml
ADDED
@@ -0,0 +1,310 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Amosoft_Dropship>
|
5 |
+
<version>1.0.7</version>
|
6 |
+
</Amosoft_Dropship>
|
7 |
+
</modules>
|
8 |
+
<global>
|
9 |
+
<blocks>
|
10 |
+
<dropship>
|
11 |
+
<class>Amosoft_Dropship_Block</class>
|
12 |
+
</dropship>
|
13 |
+
<adminhtml>
|
14 |
+
<rewrite>
|
15 |
+
<sales_order_view_items>Amosoft_Dropship_Block_Adminhtml_Sales_Order_View_Items</sales_order_view_items>
|
16 |
+
</rewrite>
|
17 |
+
</adminhtml>
|
18 |
+
</blocks>
|
19 |
+
|
20 |
+
<helpers>
|
21 |
+
<dropship>
|
22 |
+
<class>Amosoft_Dropship_Helper</class>
|
23 |
+
</dropship>
|
24 |
+
</helpers>
|
25 |
+
<models>
|
26 |
+
<dropship>
|
27 |
+
<class>Amosoft_Dropship_Model</class>
|
28 |
+
<resourceModel>dropship_resource</resourceModel>
|
29 |
+
</dropship>
|
30 |
+
<dropship_resource>
|
31 |
+
<class>Amosoft_Dropship_Model_Resource</class>
|
32 |
+
<entities>
|
33 |
+
<supplier>
|
34 |
+
<table>amosoft_vendor</table>
|
35 |
+
</supplier>
|
36 |
+
<inventory>
|
37 |
+
<table>amosoft_vendor_inventory</table>
|
38 |
+
</inventory>
|
39 |
+
<inventorylog>
|
40 |
+
<table>amosoft_vendor_inventory_log</table>
|
41 |
+
</inventorylog>
|
42 |
+
<ranking>
|
43 |
+
<table>amosoft_vendor_ranking</table>
|
44 |
+
</ranking>
|
45 |
+
<rankinglog>
|
46 |
+
<table>amosoft_vendor_rankinglog</table>
|
47 |
+
</rankinglog>
|
48 |
+
<ordersourcing>
|
49 |
+
<table>amosoft_sales_orders</table>
|
50 |
+
</ordersourcing>
|
51 |
+
<orderitems>
|
52 |
+
<table>amosoft_sales_orders_items</table>
|
53 |
+
</orderitems>
|
54 |
+
<uploadvendor>
|
55 |
+
<table>amosoft_vendor_product_import</table>
|
56 |
+
</uploadvendor>
|
57 |
+
<vendor_import_log>
|
58 |
+
<table>amosoft_vendor_product_import_log</table>
|
59 |
+
</vendor_import_log>
|
60 |
+
<tmpdata>
|
61 |
+
<table>amosoft_tmp_data</table>
|
62 |
+
</tmpdata>
|
63 |
+
<csvtmpdata>
|
64 |
+
<table>amosoft_tmp_csv_dump</table>
|
65 |
+
</csvtmpdata>
|
66 |
+
<vendor_import_log_desc>
|
67 |
+
<table>amosoft_vendor_product_import_log_description</table>
|
68 |
+
</vendor_import_log_desc>
|
69 |
+
</entities>
|
70 |
+
</dropship_resource>
|
71 |
+
<sales>
|
72 |
+
<rewrite>
|
73 |
+
<order_api>Amosoft_Dropship_Model_Order_Api</order_api>
|
74 |
+
</rewrite>
|
75 |
+
</sales>
|
76 |
+
<sales>
|
77 |
+
<rewrite>
|
78 |
+
<order_invoice>Amosoft_Dropship_Model_Order_Invoice</order_invoice>
|
79 |
+
</rewrite>
|
80 |
+
</sales>
|
81 |
+
<!-- <sales>
|
82 |
+
<rewrite>
|
83 |
+
<order_invoice_total_shipping>Amosoft_Dropship_Model_Sales_Order_Invoice_Total_Shipping</order_invoice_total_shipping>
|
84 |
+
</rewrite>
|
85 |
+
</sales> -->
|
86 |
+
</models>
|
87 |
+
<resources>
|
88 |
+
<dropship_setup>
|
89 |
+
<setup>
|
90 |
+
<module>Amosoft_Dropship</module>
|
91 |
+
<class>Amosoft_Dropship_Model_Resource_Setup</class>
|
92 |
+
</setup>
|
93 |
+
<connection>
|
94 |
+
<use>core_setup</use>
|
95 |
+
</connection>
|
96 |
+
</dropship_setup>
|
97 |
+
<dropship_write>
|
98 |
+
<connection>
|
99 |
+
<use>core_write</use>
|
100 |
+
</connection>
|
101 |
+
</dropship_write>
|
102 |
+
<dropship_read>
|
103 |
+
<connection>
|
104 |
+
<use>core_read</use>
|
105 |
+
</connection>
|
106 |
+
</dropship_read>
|
107 |
+
</resources>
|
108 |
+
<events>
|
109 |
+
<sales_order_place_after>
|
110 |
+
<observers>
|
111 |
+
<amosoft_invoice>
|
112 |
+
<class>dropship/observer</class>
|
113 |
+
<method>insertProcessOrder</method>
|
114 |
+
</amosoft_invoice>
|
115 |
+
</observers>
|
116 |
+
</sales_order_place_after>
|
117 |
+
<sales_order_shipment_save_before>
|
118 |
+
<observers>
|
119 |
+
<amosoft_shipmentemail_sales_order_shipment_save_before>
|
120 |
+
<type>singleton</type>
|
121 |
+
<class>dropship/observer</class>
|
122 |
+
<method>salesOrderShipmentSaveBefore</method>
|
123 |
+
</amosoft_shipmentemail_sales_order_shipment_save_before>
|
124 |
+
</observers>
|
125 |
+
</sales_order_shipment_save_before>
|
126 |
+
<sales_order_shipment_save_after>
|
127 |
+
<observers>
|
128 |
+
<amosoft_shipmentemail_sales_order_shipment_save_after>
|
129 |
+
<type>singleton</type>
|
130 |
+
<class>dropship/observer</class>
|
131 |
+
<method>salesOrderShipmentSaveAfter</method>
|
132 |
+
</amosoft_shipmentemail_sales_order_shipment_save_after>
|
133 |
+
</observers>
|
134 |
+
</sales_order_shipment_save_after>
|
135 |
+
<catalog_product_delete_after>
|
136 |
+
<observers>
|
137 |
+
<amosoft_catalog_product_delete_after>
|
138 |
+
<type>singleton</type>
|
139 |
+
<class>dropship/observer</class>
|
140 |
+
<method>catalogProductDeleteAfter</method>
|
141 |
+
</amosoft_catalog_product_delete_after>
|
142 |
+
</observers>
|
143 |
+
</catalog_product_delete_after>
|
144 |
+
</events>
|
145 |
+
<template>
|
146 |
+
<email>
|
147 |
+
<amosoft_email_email_template translate="label" module="dropship">
|
148 |
+
<label>amosoft</label>
|
149 |
+
<file>amosoft/amosoft.html</file>
|
150 |
+
<type>html</type>
|
151 |
+
</amosoft_email_email_template>
|
152 |
+
<amosoft_ftp_con_fail translate="label" module="dropship">
|
153 |
+
<label>amosoft ftp connection fail</label>
|
154 |
+
<file>amosoft/amosoft_ftp_con_fail.html</file>
|
155 |
+
<type>html</type>
|
156 |
+
</amosoft_ftp_con_fail>
|
157 |
+
<amosoft_order_notification translate="label" module="dropship">
|
158 |
+
<label>amosoft first order notification</label>
|
159 |
+
<file>amosoft/first_order_notification.html</file>
|
160 |
+
<type>html</type>
|
161 |
+
</amosoft_order_notification>
|
162 |
+
<amosoft_activty_report_staticstatus translate="label" module="dropship">
|
163 |
+
<label>static status report notification</label>
|
164 |
+
<file>amosoft/activity_report_staticstatus.html</file>
|
165 |
+
<type>html</type>
|
166 |
+
</amosoft_activty_report_staticstatus>
|
167 |
+
<amosoft_outdated_product_inventory>
|
168 |
+
<label>Outdated product inventory notification</label>
|
169 |
+
<file>amosoft/oudated_product_inventory_notification.html</file>
|
170 |
+
<type>html</type>
|
171 |
+
</amosoft_outdated_product_inventory>
|
172 |
+
<amosoft_productsetup_notification translate="label" module="dropship">
|
173 |
+
<label>amosoft first productsetup notification</label>
|
174 |
+
<file>amosoft/first_productsetup_notification.html</file>
|
175 |
+
<type>html</type>
|
176 |
+
</amosoft_productsetup_notification>
|
177 |
+
</email>
|
178 |
+
</template>
|
179 |
+
|
180 |
+
</global>
|
181 |
+
|
182 |
+
<admin>
|
183 |
+
<routers>
|
184 |
+
<amosoft>
|
185 |
+
<use>admin</use>
|
186 |
+
<args>
|
187 |
+
<module>Amosoft_Dropship</module>
|
188 |
+
<frontName>amosoft</frontName>
|
189 |
+
</args>
|
190 |
+
</amosoft>
|
191 |
+
</routers>
|
192 |
+
</admin>
|
193 |
+
<adminhtml>
|
194 |
+
<layout>
|
195 |
+
<updates>
|
196 |
+
<dropship>
|
197 |
+
<file>amosoftdropship.xml</file>
|
198 |
+
</dropship>
|
199 |
+
</updates>
|
200 |
+
</layout>
|
201 |
+
<translate>
|
202 |
+
<modules>
|
203 |
+
<Amosoft_Dropship>
|
204 |
+
<files>
|
205 |
+
<default>Amosoft_Dropship.csv</default>
|
206 |
+
</files>
|
207 |
+
</Amosoft_Dropship>
|
208 |
+
</modules>
|
209 |
+
</translate>
|
210 |
+
<events>
|
211 |
+
<catalog_product_save_after>
|
212 |
+
<observers>
|
213 |
+
<amosoft_save_product_data>
|
214 |
+
<type>singleton</type>
|
215 |
+
<class>dropship/observer</class>
|
216 |
+
<method>saveProductTabData</method>
|
217 |
+
</amosoft_save_product_data>
|
218 |
+
</observers>
|
219 |
+
</catalog_product_save_after>
|
220 |
+
</events>
|
221 |
+
</adminhtml>
|
222 |
+
<default>
|
223 |
+
<carriers>
|
224 |
+
<suppliershippingcostperproduct>
|
225 |
+
<active>1</active>
|
226 |
+
<model>dropship/carrier_flatrateperproduct</model>
|
227 |
+
<title>Shipping</title>
|
228 |
+
<name>Supplier Cost</name>
|
229 |
+
<price>5.00</price>
|
230 |
+
<specificerrmsg>This shipping method is currently unavailable. If you would like to ship using this shipping method, please contact us.</specificerrmsg>
|
231 |
+
</suppliershippingcostperproduct>
|
232 |
+
</carriers>
|
233 |
+
<amosoft_integration>
|
234 |
+
<integration>
|
235 |
+
<api_user_name>AmosoftIntegration</api_user_name>
|
236 |
+
<processing_status>proceesing</processing_status>
|
237 |
+
<error_status>error</error_status>
|
238 |
+
<sentto_warehouse_status>sent_to_warehouse</sentto_warehouse_status>
|
239 |
+
<ds360_version>3.1.1</ds360_version>
|
240 |
+
</integration>
|
241 |
+
</amosoft_integration>
|
242 |
+
<amosoft_cron>
|
243 |
+
</amosoft_cron>
|
244 |
+
<amosoft_sourcing>
|
245 |
+
<rank>
|
246 |
+
<ranktype>cost</ranktype>
|
247 |
+
<defaultbackorder>none</defaultbackorder>
|
248 |
+
<email_shipment>0</email_shipment>
|
249 |
+
<sourcing_type>1</sourcing_type>
|
250 |
+
</rank>
|
251 |
+
<inventory>
|
252 |
+
<buffer>0</buffer>
|
253 |
+
</inventory>
|
254 |
+
<cron_settings>
|
255 |
+
<sourcing_time>-2,10</sourcing_time>
|
256 |
+
<backorder_time>-1,0</backorder_time>
|
257 |
+
</cron_settings>
|
258 |
+
<cron_settings_upload>
|
259 |
+
<enabled>0</enabled>
|
260 |
+
<time>23,59</time>
|
261 |
+
</cron_settings_upload>
|
262 |
+
</amosoft_sourcing>
|
263 |
+
</default>
|
264 |
+
|
265 |
+
|
266 |
+
<apiconfig>
|
267 |
+
<termsandconditions>
|
268 |
+
<link>http://www.amosoft.com/magento-edi-connector-agreement/</link>
|
269 |
+
</termsandconditions>
|
270 |
+
<helpurl>
|
271 |
+
<link>http://help.netdropship.amosoft.com/</link>
|
272 |
+
</helpurl>
|
273 |
+
<email>
|
274 |
+
<toaddress>magentoext@amosoft.com</toaddress>
|
275 |
+
<bcc>support@amosoft.com</bcc>
|
276 |
+
<toname>amosoft</toname>
|
277 |
+
<subject>amosoft new extesnion Installation</subject>
|
278 |
+
</email>
|
279 |
+
<soap_role>__root__,dropship,dropship/versions,dropship/versions/dropship,core,core/magento,core/magento/info,core/store,core/store/list,core/store/info,catalog,catalog/product,catalog/product/create,catalog/product/info,catalog/product/attributes,catalog/product/update_tier_price,catalog/product/delete,catalog/product/update,catalog/product/attribute,catalog/product/attribute/info,catalog/product/attribute/option,catalog/product/attribute/option/remove,catalog/product/attribute/option/add,catalog/product/attribute/set,catalog/product/attribute/set/group_add,catalog/product/attribute/set/group_rename,catalog/product/attribute/set/group_remove,catalog/product/attribute/set/attribute_remove,catalog/product/attribute/set/attribute_add,catalog/product/attribute/set/create,catalog/product/attribute/set/remove,catalog/product/attribute/set/list,catalog/product/attribute/remove,catalog/product/attribute/update,catalog/product/attribute/write,catalog/product/attribute/types,catalog/product/attribute/create,catalog/product/attribute/read,catalog/product/link,catalog/product/link/remove,catalog/product/link/update,catalog/product/link/assign,catalog/product/media,catalog/product/media/remove,catalog/product/media/update,catalog/product/media/create,catalog/product/tag,catalog/product/tag/remove,catalog/product/tag/update,catalog/product/tag/add,catalog/product/tag/info,catalog/product/tag/list,catalog/product/option,catalog/product/option/list,catalog/product/option/remove,catalog/product/option/add,catalog/product/option/info,catalog/product/option/types,catalog/product/option/update,catalog/product/option/value,catalog/product/option/value/remove,catalog/product/option/value/update,catalog/product/option/value/add,catalog/product/option/value/info,catalog/product/option/value/list,sales,sales/order,sales/order/updateitemstatus,sales/order/getamosoftorderbyitemstatus,sales/order/setamosoftorderitemstatus,sales/order/creditmemo,sales/order/creditmemo/list,sales/order/creditmemo/info,sales/order/creditmemo/cancel,sales/order/creditmemo/comment,sales/order/creditmemo/create,sales/order/invoice,sales/order/invoice/cancel,sales/order/invoice/info,sales/order/invoice/void,sales/order/invoice/capture,sales/order/invoice/comment,sales/order/invoice/create,sales/order/info,sales/order/shipment,sales/order/shipment/send,sales/order/shipment/info,sales/order/shipment/track,sales/order/shipment/comment,sales/order/shipment/create,sales/order/change,cataloginventory,cataloginventory/update</soap_role>
|
280 |
+
</apiconfig>
|
281 |
+
<crontab>
|
282 |
+
<jobs>
|
283 |
+
<amosoft_dropship>
|
284 |
+
<run>
|
285 |
+
<model>dropship/observer::amosoftSourcing</model>
|
286 |
+
</run>
|
287 |
+
</amosoft_dropship>
|
288 |
+
<amosoft_backorder>
|
289 |
+
<run>
|
290 |
+
<model>dropship/observer::amosoftBackorder</model>
|
291 |
+
</run>
|
292 |
+
</amosoft_backorder>
|
293 |
+
<amosoft_uploadvendor>
|
294 |
+
<run>
|
295 |
+
<model>dropship/uploadvendor::ftpParseCsv</model>
|
296 |
+
</run>
|
297 |
+
</amosoft_uploadvendor>
|
298 |
+
<amosoft_report_email>
|
299 |
+
<run>
|
300 |
+
<model>dropship/report::sendNotification</model>
|
301 |
+
</run>
|
302 |
+
</amosoft_report_email>
|
303 |
+
<amosoft_oudated_product_inventory_cron>
|
304 |
+
<run>
|
305 |
+
<model>dropship/observer::notifyForProductUpdateInventory</model>
|
306 |
+
</run>
|
307 |
+
</amosoft_oudated_product_inventory_cron>
|
308 |
+
</jobs>
|
309 |
+
</crontab>
|
310 |
+
</config>
|
app/code/local/Amosoft/Dropship/etc/jstranslator.xml
ADDED
@@ -0,0 +1,17 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Magento
|
5 |
+
*
|
6 |
+
* @category Mage
|
7 |
+
* @package Mage_Core
|
8 |
+
*/
|
9 |
+
-->
|
10 |
+
<jstranslator>
|
11 |
+
<validate-url-amosoft translate="message" module="dropship">
|
12 |
+
<message>Please enter a valid URL. Protocol is required (http://, https:// or ftp://)</message>
|
13 |
+
</validate-url-amosoft>
|
14 |
+
<validate-one-required-by-name-amosoft translate="message" module="dropship">
|
15 |
+
<message>Please select one of the options.</message>
|
16 |
+
</validate-one-required-by-name-amosoft>
|
17 |
+
</jstranslator>
|
app/code/local/Amosoft/Dropship/etc/system.xml
ADDED
@@ -0,0 +1,247 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<sections>
|
4 |
+
<carriers>
|
5 |
+
<groups>
|
6 |
+
<suppliershippingcostperproduct translate="label" module="dropship">
|
7 |
+
<label>Supplier Cost Per Product</label>
|
8 |
+
<frontend_type>text</frontend_type>
|
9 |
+
<sort_order>99</sort_order>
|
10 |
+
<show_in_default>1</show_in_default>
|
11 |
+
<show_in_website>1</show_in_website>
|
12 |
+
<show_in_store>1</show_in_store>
|
13 |
+
<fields>
|
14 |
+
<active translate="label">
|
15 |
+
<label>Enabled</label>
|
16 |
+
<frontend_type>select</frontend_type>
|
17 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
18 |
+
<sort_order>1</sort_order>
|
19 |
+
<show_in_default>1</show_in_default>
|
20 |
+
<show_in_website>1</show_in_website>
|
21 |
+
<show_in_store>1</show_in_store>
|
22 |
+
</active>
|
23 |
+
<title translate="label">
|
24 |
+
<label>Title</label>
|
25 |
+
<frontend_type>text</frontend_type>
|
26 |
+
<sort_order>2</sort_order>
|
27 |
+
<show_in_default>1</show_in_default>
|
28 |
+
<show_in_website>1</show_in_website>
|
29 |
+
<show_in_store>1</show_in_store>
|
30 |
+
</title>
|
31 |
+
<name translate="label">
|
32 |
+
<label>Method Name</label>
|
33 |
+
<frontend_type>text</frontend_type>
|
34 |
+
<sort_order>2</sort_order>
|
35 |
+
<show_in_default>1</show_in_default>
|
36 |
+
<show_in_website>1</show_in_website>
|
37 |
+
<show_in_store>1</show_in_store>
|
38 |
+
</name>
|
39 |
+
<price translate="label">
|
40 |
+
<label>Price</label>
|
41 |
+
<frontend_type>text</frontend_type>
|
42 |
+
<sort_order>3</sort_order>
|
43 |
+
<show_in_default>1</show_in_default>
|
44 |
+
<show_in_website>1</show_in_website>
|
45 |
+
<show_in_store>0</show_in_store>
|
46 |
+
</price>
|
47 |
+
<specificerrmsg translate="label">
|
48 |
+
<label>Displayed Error Message</label>
|
49 |
+
<frontend_type>textarea</frontend_type>
|
50 |
+
<sort_order>4</sort_order>
|
51 |
+
<show_in_default>1</show_in_default>
|
52 |
+
<show_in_website>1</show_in_website>
|
53 |
+
<show_in_store>1</show_in_store>
|
54 |
+
</specificerrmsg>
|
55 |
+
<sallowspecific translate="label">
|
56 |
+
<label>Ship to Applicable Countries</label>
|
57 |
+
<frontend_type>select</frontend_type>
|
58 |
+
<sort_order>90</sort_order>
|
59 |
+
<frontend_class>shipping-applicable-country</frontend_class>
|
60 |
+
<source_model>adminhtml/system_config_source_shipping_allspecificcountries</source_model>
|
61 |
+
<show_in_default>1</show_in_default>
|
62 |
+
<show_in_website>1</show_in_website>
|
63 |
+
<show_in_store>0</show_in_store>
|
64 |
+
</sallowspecific>
|
65 |
+
<specificcountry translate="label">
|
66 |
+
<label>Ship to Specific Countries</label>
|
67 |
+
<frontend_type>multiselect</frontend_type>
|
68 |
+
<sort_order>91</sort_order>
|
69 |
+
<source_model>adminhtml/system_config_source_country</source_model>
|
70 |
+
<show_in_default>1</show_in_default>
|
71 |
+
<show_in_website>1</show_in_website>
|
72 |
+
<show_in_store>0</show_in_store>
|
73 |
+
<can_be_empty>1</can_be_empty>
|
74 |
+
</specificcountry>
|
75 |
+
<sort_order translate="label">
|
76 |
+
<label>Sort Order</label>
|
77 |
+
<frontend_type>text</frontend_type>
|
78 |
+
<sort_order>100</sort_order>
|
79 |
+
<show_in_default>1</show_in_default>
|
80 |
+
<show_in_website>1</show_in_website>
|
81 |
+
<show_in_store>0</show_in_store>
|
82 |
+
</sort_order>
|
83 |
+
</fields>
|
84 |
+
</suppliershippingcostperproduct>
|
85 |
+
</groups>
|
86 |
+
</carriers>
|
87 |
+
</sections>
|
88 |
+
<tabs>
|
89 |
+
<dropship translate="label" module="dropship">
|
90 |
+
<label>dropship</label>
|
91 |
+
<sort_order>500</sort_order>
|
92 |
+
</dropship>
|
93 |
+
</tabs>
|
94 |
+
<sections>
|
95 |
+
<amosoft_integration translate="label" module="dropship">
|
96 |
+
<label>General Setup</label>
|
97 |
+
<tab>dropship</tab>
|
98 |
+
<frontend_type>text</frontend_type>
|
99 |
+
<sort_order>40</sort_order>
|
100 |
+
<show_in_default>1</show_in_default>
|
101 |
+
<show_in_website>0</show_in_website>
|
102 |
+
<show_in_store>0</show_in_store>
|
103 |
+
<groups>
|
104 |
+
<integration translate="label">
|
105 |
+
<label>Getting Started</label>
|
106 |
+
<page_heading>Suppliers</page_heading>
|
107 |
+
<expanded>1</expanded>
|
108 |
+
<frontend_type>text</frontend_type>
|
109 |
+
<sort_order>10</sort_order>
|
110 |
+
<show_in_default>1</show_in_default>
|
111 |
+
<show_in_website>0</show_in_website>
|
112 |
+
<show_in_store>0</show_in_store>
|
113 |
+
<fields>
|
114 |
+
<notificationstatus translate="label">
|
115 |
+
<frontend_type>hidden</frontend_type>
|
116 |
+
</notificationstatus>
|
117 |
+
<getstarted translate="label">
|
118 |
+
<frontend_type>text</frontend_type>
|
119 |
+
<frontend_model>dropship/adminhtml_system_config_fieldset_hint</frontend_model>
|
120 |
+
<sort_order>6</sort_order>
|
121 |
+
<show_in_default>1</show_in_default>
|
122 |
+
<show_in_website>0</show_in_website>
|
123 |
+
<show_in_store>0</show_in_store>
|
124 |
+
</getstarted>
|
125 |
+
</fields>
|
126 |
+
</integration>
|
127 |
+
</groups>
|
128 |
+
</amosoft_integration>
|
129 |
+
|
130 |
+
<amosoft_sourcing translate="label" module="dropship">
|
131 |
+
<label>Configuration/Setup</label>
|
132 |
+
<tab>dropship</tab>
|
133 |
+
<frontend_type>text</frontend_type>
|
134 |
+
<sort_order>42</sort_order>
|
135 |
+
<show_in_default>1</show_in_default>
|
136 |
+
<show_in_website>0</show_in_website>
|
137 |
+
<show_in_store>0</show_in_store>
|
138 |
+
<groups>
|
139 |
+
|
140 |
+
<rank translate="label">
|
141 |
+
<label>Sourcing Logic</label>
|
142 |
+
<page_heading>Sourcing</page_heading>
|
143 |
+
<expanded>1</expanded>
|
144 |
+
<frontend_type>text</frontend_type>
|
145 |
+
<sort_order>1</sort_order>
|
146 |
+
<show_in_default>1</show_in_default>
|
147 |
+
<show_in_website>0</show_in_website>
|
148 |
+
<show_in_store>0</show_in_store>
|
149 |
+
<fields>
|
150 |
+
<ranktype translate="label">
|
151 |
+
<label>Sourcing Rule</label>
|
152 |
+
<frontend_type>select</frontend_type>
|
153 |
+
<source_model>dropship/system_config_source_ranktype</source_model>
|
154 |
+
<sort_order>0</sort_order>
|
155 |
+
<show_in_default>1</show_in_default>
|
156 |
+
<show_in_website>0</show_in_website>
|
157 |
+
<show_in_store>0</show_in_store>
|
158 |
+
|
159 |
+
</ranktype>
|
160 |
+
<defaultbackorder translate="label">
|
161 |
+
<label>Default Supplier</label>
|
162 |
+
<frontend_type>select</frontend_type>
|
163 |
+
<source_model>dropship/system_config_source_vendorlist</source_model>
|
164 |
+
<comment>Selected Supplier will override the backorder logic.</comment>
|
165 |
+
<sort_order>1</sort_order>
|
166 |
+
<show_in_default>1</show_in_default>
|
167 |
+
<show_in_website>0</show_in_website>
|
168 |
+
<show_in_store>0</show_in_store>
|
169 |
+
|
170 |
+
</defaultbackorder>
|
171 |
+
<email_shipment translate="label">
|
172 |
+
<label>Email customer when tracking is added</label>
|
173 |
+
<frontend_type>select</frontend_type>
|
174 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
175 |
+
<comment>Shipping information will automatically be sent when tracking is added.</comment>
|
176 |
+
<sort_order>2</sort_order>
|
177 |
+
<show_in_default>1</show_in_default>
|
178 |
+
<show_in_website>0</show_in_website>
|
179 |
+
<show_in_store>0</show_in_store>
|
180 |
+
</email_shipment>
|
181 |
+
<sourcing_type>
|
182 |
+
<label>Event Driven Sourcing</label>
|
183 |
+
<frontend_type>select</frontend_type>
|
184 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
185 |
+
<comment>Select "Yes" to trigger sourcing logic in the sales_order_place_after event.</comment>
|
186 |
+
<sort_order>3</sort_order>
|
187 |
+
<show_in_default>1</show_in_default>
|
188 |
+
<show_in_website>0</show_in_website>
|
189 |
+
<show_in_store>0</show_in_store>
|
190 |
+
</sourcing_type>
|
191 |
+
|
192 |
+
</fields>
|
193 |
+
|
194 |
+
</rank>
|
195 |
+
|
196 |
+
<inventory translate="label">
|
197 |
+
<label>Inventory</label>
|
198 |
+
<page_heading>Inventory</page_heading>
|
199 |
+
<expanded>1</expanded>
|
200 |
+
<frontend_type>text</frontend_type>
|
201 |
+
<sort_order>2</sort_order>
|
202 |
+
<show_in_default>1</show_in_default>
|
203 |
+
<show_in_website>0</show_in_website>
|
204 |
+
<show_in_store>0</show_in_store>
|
205 |
+
<fields>
|
206 |
+
<buffer translate="label">
|
207 |
+
<label>Buffer</label>
|
208 |
+
<frontend_type>text</frontend_type>
|
209 |
+
<sort_order>0</sort_order>
|
210 |
+
<comment>Buffer value will be subtracted from each Supplier's inventory</comment>
|
211 |
+
<validate>required-entry validate-digits</validate>
|
212 |
+
<show_in_default>1</show_in_default>
|
213 |
+
<show_in_website>0</show_in_website>
|
214 |
+
<show_in_store>0</show_in_store>
|
215 |
+
|
216 |
+
</buffer>
|
217 |
+
|
218 |
+
</fields>
|
219 |
+
|
220 |
+
</inventory>
|
221 |
+
|
222 |
+
<integration translate="label">
|
223 |
+
<label>Help</label>
|
224 |
+
<page_heading>Help</page_heading>
|
225 |
+
<expanded>1</expanded>
|
226 |
+
<frontend_type>text</frontend_type>
|
227 |
+
<sort_order>7</sort_order>
|
228 |
+
<show_in_default>1</show_in_default>
|
229 |
+
<show_in_website>0</show_in_website>
|
230 |
+
<show_in_store>0</show_in_store>
|
231 |
+
<fields>
|
232 |
+
<need_help>
|
233 |
+
<label>Need Help?</label>
|
234 |
+
<frontend_type>link</frontend_type>
|
235 |
+
<frontend_model>dropship/adminhtml_system_config_helplink</frontend_model>
|
236 |
+
<href>http://help.netdropship.amosoft.com/dropship</href>
|
237 |
+
<sort_order>31</sort_order>
|
238 |
+
<show_in_default>1</show_in_default>
|
239 |
+
<show_in_website>0</show_in_website>
|
240 |
+
<show_in_store>0</show_in_store>
|
241 |
+
</need_help>
|
242 |
+
</fields>
|
243 |
+
</integration>
|
244 |
+
</groups>
|
245 |
+
</amosoft_sourcing>
|
246 |
+
</sections>
|
247 |
+
</config>
|
app/code/local/Amosoft/Dropship/etc/wsdl.xml
ADDED
@@ -0,0 +1,184 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<definitions xmlns:typens="urn:{{var wsdl.name}}" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
|
3 |
+
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/"
|
4 |
+
name="{{var wsdl.name}}" targetNamespace="urn:{{var wsdl.name}}">
|
5 |
+
<types>
|
6 |
+
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:Magento">
|
7 |
+
<import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/" />
|
8 |
+
|
9 |
+
<complexType name="salesOrderListEntity">
|
10 |
+
<all>
|
11 |
+
<element name="item_details" type="typens:salesOrderListAmosoftItemEntityArray" minOccurs="0" />
|
12 |
+
<element name="dropship_item" type="xsd:int" minOccurs="0" />
|
13 |
+
</all>
|
14 |
+
</complexType>
|
15 |
+
|
16 |
+
<complexType name="salesOrderListAmosoftItemEntityArray">
|
17 |
+
<complexContent>
|
18 |
+
<restriction base="soapenc:Array">
|
19 |
+
<attribute ref="soapenc:arrayType" wsdl:arrayType="typens:salesOrderListAmosoftItemEntity[]" />
|
20 |
+
</restriction>
|
21 |
+
</complexContent>
|
22 |
+
</complexType>
|
23 |
+
|
24 |
+
<complexType name="salesOrderListAmosoftItemEntity">
|
25 |
+
<all>
|
26 |
+
<element name="item_sku" type="xsd:string" minOccurs="0" />
|
27 |
+
<element name="amosoft_vendor_sku" type="xsd:string" minOccurs="0" />
|
28 |
+
<element name="amosoft_vendor_code" type="xsd:string" minOccurs="0" />
|
29 |
+
<element name="amosoft_vendor_cost" type="xsd:string" minOccurs="0" />
|
30 |
+
</all>
|
31 |
+
</complexType>
|
32 |
+
|
33 |
+
<complexType name="salesOrderItemEntity">
|
34 |
+
<all>
|
35 |
+
<element name="amosoft_item_status" type="xsd:string" minOccurs="0" />
|
36 |
+
<element name="amosoft_vendor_sku" type="xsd:string" minOccurs="0" />
|
37 |
+
<element name="amosoft_vendor_code" type="xsd:string" minOccurs="0" />
|
38 |
+
</all>
|
39 |
+
</complexType>
|
40 |
+
<complexType name="salesOrderAmosoftEntity">
|
41 |
+
<all>
|
42 |
+
<element name="ResultCount" type="xsd:int" minOccurs="0" />
|
43 |
+
<element name="orderDetails" type="typens:salesOrderAmosoftStatusEntityArray" minOccurs="0" />
|
44 |
+
<element name="error_message" type="xsd:string" minOccurs="0" />
|
45 |
+
</all>
|
46 |
+
</complexType>
|
47 |
+
<complexType name="salesOrderAmosoftStatusEntityArray">
|
48 |
+
<complexContent>
|
49 |
+
<restriction base="soapenc:Array">
|
50 |
+
<attribute ref="soapenc:arrayType" wsdl:arrayType="typens:salesOrderAmosoftStatusEntity[]" />
|
51 |
+
</restriction>
|
52 |
+
</complexContent>
|
53 |
+
</complexType>
|
54 |
+
|
55 |
+
<complexType name="salesOrderAmosoftStatusEntity">
|
56 |
+
<all>
|
57 |
+
<element name="increment_id" type="xsd:string" minOccurs="0" />
|
58 |
+
<element name="error_message" type="xsd:string" minOccurs="0" />
|
59 |
+
</all>
|
60 |
+
</complexType>
|
61 |
+
|
62 |
+
<complexType name="salesOrderSetAmosoftStatusEntity">
|
63 |
+
<all>
|
64 |
+
<element name="success_message" type="xsd:string" minOccurs="0" />
|
65 |
+
<element name="error_message" type="xsd:string" minOccurs="0" />
|
66 |
+
</all>
|
67 |
+
</complexType>
|
68 |
+
|
69 |
+
<complexType name="salesOrderGetAmosoftStatusConfig">
|
70 |
+
<all>
|
71 |
+
<element name="begin_sourcing" type="xsd:string" minOccurs="0" />
|
72 |
+
<element name="awaiting_transmission" type="xsd:string" minOccurs="0" />
|
73 |
+
<element name="backorder" type="xsd:string" minOccurs="0" />
|
74 |
+
<element name="sourcing_complete" type="xsd:string" minOccurs="0" />
|
75 |
+
</all>
|
76 |
+
</complexType>
|
77 |
+
|
78 |
+
<complexType name="versionsGetdropshipversion">
|
79 |
+
<all>
|
80 |
+
<element name="magentoVer" type="xsd:string" minOccurs="0" />
|
81 |
+
<element name="dropshipVer" type="xsd:string" minOccurs="0" />
|
82 |
+
<element name="dropshipDbScriptVer" type="xsd:string" minOccurs="0" />
|
83 |
+
</all>
|
84 |
+
</complexType>
|
85 |
+
</schema>
|
86 |
+
</types>
|
87 |
+
|
88 |
+
<message name="salesOrderUpdateItemStatusRequest">
|
89 |
+
<part name="sessionId" type="xsd:string"/>
|
90 |
+
<part name="orderId" type="xsd:string"/>
|
91 |
+
<part name="items" type="typens:ArrayOfString"/>
|
92 |
+
<part name="status" type="xsd:string"/>
|
93 |
+
</message>
|
94 |
+
<message name="salesOrderUpdateItemStatusResponse">
|
95 |
+
<part name="result" type="xsd:boolean"/>
|
96 |
+
</message>
|
97 |
+
|
98 |
+
<message name="salesOrderGetAmosoftOrderByItemStatusRequest">
|
99 |
+
<part name="sessionId" type="xsd:string"/>
|
100 |
+
<part name="storeId" type="xsd:string"/>
|
101 |
+
<part name="itemStatus" type="xsd:string"/>
|
102 |
+
</message>
|
103 |
+
<message name="salesOrderGetAmosoftOrderByItemStatusResponse">
|
104 |
+
<part name="result" type="typens:salesOrderAmosoftEntity" />
|
105 |
+
</message>
|
106 |
+
|
107 |
+
<message name="salesOrderSetAmosoftOrderItemStatusRequest">
|
108 |
+
<part name="sessionId" type="xsd:string"/>
|
109 |
+
<part name="orderIncrementId" type="xsd:string"/>
|
110 |
+
<part name="itemStatus" type="xsd:string"/>
|
111 |
+
</message>
|
112 |
+
<message name="salesOrderSetAmosoftOrderItemStatusResponse">
|
113 |
+
<part name="result" type="typens:salesOrderSetAmosoftStatusEntity" />
|
114 |
+
</message>
|
115 |
+
|
116 |
+
<message name="versionsGetdropshipversionRequest">
|
117 |
+
<part name="sessionId" type="xsd:string"/>
|
118 |
+
</message>
|
119 |
+
<message name="versionsGetdropshipversionResponse">
|
120 |
+
<part name="result" type="typens:versionsGetdropshipversion" />
|
121 |
+
</message>
|
122 |
+
|
123 |
+
<portType name="{{var wsdl.handler}}PortType">
|
124 |
+
<operation name="salesOrderUpdateItemStatus">
|
125 |
+
<documentation>Update Amosoft Item Status</documentation>
|
126 |
+
<input message="typens:salesOrderUpdateItemStatusRequest"/>
|
127 |
+
<output message="typens:salesOrderUpdateItemStatusResponse"/>
|
128 |
+
</operation>
|
129 |
+
<operation name="salesOrderGetAmosoftOrderByItemStatus">
|
130 |
+
<documentation>Retrive order by item status</documentation>
|
131 |
+
<input message="typens:salesOrderGetAmosoftOrderByItemStatusRequest"/>
|
132 |
+
<output message="typens:salesOrderGetAmosoftOrderByItemStatusResponse"/>
|
133 |
+
</operation>
|
134 |
+
<operation name="salesOrderSetAmosoftOrderItemStatus">
|
135 |
+
<documentation>Set item Status </documentation>
|
136 |
+
<input message="typens:salesOrderSetAmosoftOrderItemStatusRequest"/>
|
137 |
+
<output message="typens:salesOrderSetAmosoftOrderItemStatusResponse"/>
|
138 |
+
</operation>
|
139 |
+
|
140 |
+
<operation name="versionsGetdropshipversion">
|
141 |
+
<documentation>this is an example of api method</documentation>
|
142 |
+
<input message="typens:versionsGetdropshipversionRequest"/>
|
143 |
+
<output message="typens:versionsGetdropshipversionResponse"/>
|
144 |
+
</operation>
|
145 |
+
</portType>
|
146 |
+
<binding name="{{var wsdl.handler}}Binding" type="typens:{{var wsdl.handler}}PortType">
|
147 |
+
<operation name="salesOrderUpdateItemStatus">
|
148 |
+
<soap:operation soapAction="urn:{{var wsdl.handler}}Action"/>
|
149 |
+
<input>
|
150 |
+
<soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
151 |
+
</input>
|
152 |
+
<output>
|
153 |
+
<soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
154 |
+
</output>
|
155 |
+
</operation>
|
156 |
+
<operation name="salesOrderGetAmosoftOrderByItemStatus">
|
157 |
+
<soap:operation soapAction="urn:{{var wsdl.handler}}Action"/>
|
158 |
+
<input>
|
159 |
+
<soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
160 |
+
</input>
|
161 |
+
<output>
|
162 |
+
<soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
163 |
+
</output>
|
164 |
+
</operation>
|
165 |
+
<operation name="salesOrderSetAmosoftOrderItemStatus">
|
166 |
+
<soap:operation soapAction="urn:{{var wsdl.handler}}Action"/>
|
167 |
+
<input>
|
168 |
+
<soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
169 |
+
</input>
|
170 |
+
<output>
|
171 |
+
<soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
172 |
+
</output>
|
173 |
+
</operation>
|
174 |
+
<operation name="versionsGetdropshipversion">
|
175 |
+
<soap:operation soapAction="urn:{{var wsdl.handler}}Action"/>
|
176 |
+
<input>
|
177 |
+
<soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
178 |
+
</input>
|
179 |
+
<output>
|
180 |
+
<soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
181 |
+
</output>
|
182 |
+
</operation>
|
183 |
+
</binding>
|
184 |
+
</definitions>
|
app/code/local/Amosoft/Dropship/sql/dropship_setup/mysql4-install-1.0.3.php
ADDED
@@ -0,0 +1,105 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Amosoft
|
5 |
+
*
|
6 |
+
* @category Local
|
7 |
+
* @package Amosoft_Dropship
|
8 |
+
*/
|
9 |
+
|
10 |
+
$installer = $this;
|
11 |
+
$installer->startSetup();
|
12 |
+
|
13 |
+
$installer->run("
|
14 |
+
DROP TABLE IF EXISTS {$installer->getTable('dropship/supplier')};
|
15 |
+
-- DROP TABLE IF EXISTS {$installer->getTable('dropship/inventory')};
|
16 |
+
CREATE TABLE IF NOT EXISTS {$installer->getTable('dropship/inventory')} (
|
17 |
+
id INT( 11 ) NOT NULL AUTO_INCREMENT ,
|
18 |
+
amosoft_vendor_code VARCHAR( 50 ) NOT NULL ,
|
19 |
+
amosoft_vendor_name varchar(50) NOT NULL,
|
20 |
+
product_sku VARCHAR( 64 ) NOT NULL ,
|
21 |
+
amosoft_vendor_sku varchar(64) NOT NULL,
|
22 |
+
stock INT( 11 ) NOT NULL ,
|
23 |
+
cost decimal(12,2) NOT NULL,
|
24 |
+
shipping_cost decimal(12,2) NOT NULL,
|
25 |
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
|
26 |
+
updated_at TIMESTAMP NULL ,
|
27 |
+
PRIMARY KEY (id),
|
28 |
+
KEY `id` (`id`),
|
29 |
+
KEY `amosoft_vendor_code` (`amosoft_vendor_code`),
|
30 |
+
KEY `product_sku` (`product_sku`),
|
31 |
+
KEY `stock` (`stock`),
|
32 |
+
KEY `cost` (`cost`)
|
33 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0;
|
34 |
+
|
35 |
+
-- DROP TABLE IF EXISTS {$installer->getTable('dropship/ranking')};
|
36 |
+
CREATE TABLE IF NOT EXISTS {$installer->getTable('dropship/ranking')} (
|
37 |
+
`id` int(11) NOT NULL AUTO_INCREMENT,
|
38 |
+
`amosoft_vendor_code` varchar(50) NOT NULL,
|
39 |
+
amosoft_vendor_name varchar(50) NOT NULL,
|
40 |
+
`ranking` int(11) NOT NULL DEFAULT '0',
|
41 |
+
`amosoft_vendor_type` enum('default','enhanced','user') NOT NULL DEFAULT 'default',
|
42 |
+
`is_dropship` enum('no','yes') NOT NULL DEFAULT 'yes',
|
43 |
+
`is_active` enum('no','yes') NOT NULL DEFAULT 'yes',
|
44 |
+
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
45 |
+
`updated_at` timestamp NULL DEFAULT NULL,
|
46 |
+
PRIMARY KEY (`id`),
|
47 |
+
KEY `id` (`id`),
|
48 |
+
KEY `amosoft_vendor_code` (`amosoft_vendor_code`),
|
49 |
+
KEY `is_dropship` (`is_dropship`),
|
50 |
+
KEY `ranking` (`ranking`)
|
51 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
|
52 |
+
|
53 |
+
-- INSERT INTO `amosoft_vendor_ranking` (`amosoft_vendor_code` ,`amosoft_vendor_name`,`ranking`,`updated_at`)VALUES ('MagVendID1','Vendor 1',1,now()),('MagVendID2','Vendor 2',2,now()),('MagVendID3','Vendor 3',3,now()),('MagVendID4','Vendor 4',4,now()),('MagVendID5','Vendor 5',5,now()),('MagVendID6','Vendor 6',6,now()),('MagVendID7','Vendor 7',7,now()),('MagVendID8','Vendor 8',8,now()),('MagVendID9','Vendor 9',9,now()),('MagVendID10','Vendor 10',10,now()),('MagVendID11','Vendor 11',11,now()),('MagVendID12','Vendor12',12,now()),('MagVendID13','Vendor 13',13,now()),('MagVendID14','Vendor 14',14,now()),('MagVendID15','Vendor15',15,now());
|
54 |
+
|
55 |
+
-- DROP TABLE IF EXISTS {$installer->getTable('dropship/rankinglog')};
|
56 |
+
CREATE TABLE IF NOT EXISTS {$installer->getTable('dropship/rankinglog')} (
|
57 |
+
id INT( 11 ) NOT NULL AUTO_INCREMENT ,
|
58 |
+
label VARCHAR( 50 ) NOT NULL ,
|
59 |
+
ranking_data text NOT NULL ,
|
60 |
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
|
61 |
+
PRIMARY KEY (id),
|
62 |
+
KEY `id` (`id`)
|
63 |
+
|
64 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0;
|
65 |
+
|
66 |
+
-- DROP TABLE IF EXISTS {$installer->getTable('dropship/ordersourcing')};
|
67 |
+
CREATE TABLE IF NOT EXISTS {$installer->getTable('dropship/ordersourcing')} (
|
68 |
+
id int(11) NOT NULL AUTO_INCREMENT,
|
69 |
+
order_id int(10) NOT NULL,
|
70 |
+
sourcing enum('new','resourcing','done') NOT NULL DEFAULT 'new',
|
71 |
+
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
72 |
+
updated_at timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
73 |
+
PRIMARY KEY (`id`),
|
74 |
+
KEY `order_id` (`order_id`),
|
75 |
+
KEY `sourcing` (`sourcing`),
|
76 |
+
KEY `id` (`id`)
|
77 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0;
|
78 |
+
|
79 |
+
-- DROP TABLE IF EXISTS {$installer->getTable('dropship/orderitems')};
|
80 |
+
CREATE TABLE IF NOT EXISTS {$installer->getTable('dropship/orderitems')} (
|
81 |
+
id int(11) NOT NULL AUTO_INCREMENT,
|
82 |
+
item_id int(10) NOT NULL,
|
83 |
+
item_order_id varchar(11) NOT NULL,
|
84 |
+
sku varchar(64) NOT NULL,
|
85 |
+
amosoft_vendor_sku varchar(64) NOT NULL,
|
86 |
+
vendor_cost decimal(12,2) NOT NULL,
|
87 |
+
shipping_cost decimal(12,2) NOT NULL,
|
88 |
+
amosoft_item_status enum('Sourcing','Backorder','Transmitting','Sent to Vendor','Cancelled','No Dropship','Completed') NOT NULL DEFAULT 'Sourcing',
|
89 |
+
amosoft_vendor_code varchar(50) NOT NULL,
|
90 |
+
`updated_by` enum('Pending','User','Cron','Amosoft') NOT NULL DEFAULT 'Pending',
|
91 |
+
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
92 |
+
updated_at timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
93 |
+
PRIMARY KEY (`id`),
|
94 |
+
KEY `item_id` (`item_id`),
|
95 |
+
KEY `amosoft_vendor_code` (`amosoft_vendor_code`),
|
96 |
+
KEY `updated_by` (`updated_by`),
|
97 |
+
KEY `id` (`id`)
|
98 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0;
|
99 |
+
|
100 |
+
");
|
101 |
+
//$installer->installEntities();
|
102 |
+
|
103 |
+
|
104 |
+
$installer->endSetup();
|
105 |
+
|
app/code/local/Amosoft/Dropship/sql/dropship_setup/mysql4-upgrade-1.0.4-1.0.5.php
ADDED
@@ -0,0 +1,50 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
|
3 |
+
$installer = $this;
|
4 |
+
|
5 |
+
$installer->startSetup();
|
6 |
+
|
7 |
+
$installer->run("
|
8 |
+
|
9 |
+
CREATE TABLE IF NOT EXISTS {$installer->getTable('dropship/inventorylog')} (
|
10 |
+
`id` int(11) NOT NULL AUTO_INCREMENT,
|
11 |
+
`amosoft_vendor_code` varchar(50) NOT NULL,
|
12 |
+
`amosoft_vendor_name` varchar(50) NOT NULL,
|
13 |
+
`product_sku` varchar(50) NOT NULL,
|
14 |
+
`cost` decimal(12,2) NOT NULL DEFAULT '0.00',
|
15 |
+
`stock` int(10) NOT NULL DEFAULT '0',
|
16 |
+
`updated_by` varchar(50) NOT NULL,
|
17 |
+
`activity` enum('update','add','delete') NOT NULL DEFAULT 'add',
|
18 |
+
`updated_at` timestamp NULL DEFAULT NULL,
|
19 |
+
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
20 |
+
PRIMARY KEY (`id`)
|
21 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
|
22 |
+
|
23 |
+
CREATE TABLE IF NOT EXISTS {$installer->getTable('dropship/uploadvendor')} (
|
24 |
+
`file_id` int(11) NOT NULL AUTO_INCREMENT,
|
25 |
+
`file_name` varchar(50) NOT NULL,
|
26 |
+
`import_status` enum('pending','done','processing') NOT NULL DEFAULT 'pending',
|
27 |
+
`updated_by` varchar(50) NOT NULL,
|
28 |
+
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
29 |
+
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
30 |
+
`amosoft_vendor_code` varchar(50) NOT NULL,
|
31 |
+
PRIMARY KEY (`file_id`),
|
32 |
+
KEY `import_status` (`import_status`)
|
33 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
|
34 |
+
|
35 |
+
-- DROP TABLE IF EXISTS {$installer->getTable('dropship/vendor_import_log')};
|
36 |
+
CREATE TABLE IF NOT EXISTS {$installer->getTable('dropship/vendor_import_log')} (
|
37 |
+
`amosoft_vendor_code` varchar(50) NOT NULL,
|
38 |
+
`updated_by` text NOT NULL,
|
39 |
+
`success` int(11) NOT NULL,
|
40 |
+
`failure` int(11) NOT NULL,
|
41 |
+
`ftp_error` text,
|
42 |
+
`ftp_error_desc` text,
|
43 |
+
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
44 |
+
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ;
|
45 |
+
");
|
46 |
+
|
47 |
+
$installer->getConnection()->modifyColumn($installer->getTable('dropship/inventorylog'),'cost', 'VARCHAR( 50 ) DEFAULT NULL');
|
48 |
+
$installer->getConnection()->modifyColumn($installer->getTable('dropship/inventorylog'),'stock', 'VARCHAR( 50 ) DEFAULT NULL');
|
49 |
+
$installer->getConnection()->modifyColumn($installer->getTable('dropship/inventorylog'),'activity', 'VARCHAR( 255 ) DEFAULT NULL');
|
50 |
+
$installer->endSetup();
|
app/code/local/Amosoft/Dropship/sql/dropship_setup/mysql4-upgrade-1.0.5-1.0.6.php
ADDED
@@ -0,0 +1,28 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
$installer = $this;
|
9 |
+
$installer->startSetup();
|
10 |
+
$installer->getConnection()->modifyColumn($installer->getTable('dropship/inventory'),'stock', 'VARCHAR(11) NOT NULL');
|
11 |
+
$installer->getConnection()->modifyColumn($installer->getTable('dropship/inventory'),'created_at', 'TIMESTAMP NULL');
|
12 |
+
$installer->getConnection()->modifyColumn($installer->getTable('dropship/inventorylog'),'created_at', 'TIMESTAMP NULL');
|
13 |
+
$installer->getConnection()->modifyColumn($installer->getTable('dropship/uploadvendor'),'created_at', 'TIMESTAMP NULL');
|
14 |
+
$installer->getConnection()->modifyColumn($installer->getTable('dropship/vendor_import_log'),'created_at', 'TIMESTAMP NULL');
|
15 |
+
$installer->getConnection()->modifyColumn($installer->getTable('dropship/ranking'),'created_at', 'TIMESTAMP NULL');
|
16 |
+
$installer->getConnection()->modifyColumn($installer->getTable('dropship/rankinglog'),'created_at', 'TIMESTAMP NULL');
|
17 |
+
$installer->getConnection()->addColumn($installer->getTable('dropship/orderitems'), 'item_status_history', 'TEXT NULL');
|
18 |
+
$installer->run("CREATE TABLE IF NOT EXISTS {$installer->getTable('dropship/tmpdata')} (
|
19 |
+
`id` int(10) NOT NULL AUTO_INCREMENT,
|
20 |
+
`tmpdata` varchar(255) NOT NULL,
|
21 |
+
`created_at` timestamp NULL DEFAULT NULL,
|
22 |
+
`updated_at` timestamp NULL DEFAULT NULL,
|
23 |
+
`status` varchar(255) NOT NULL DEFAULT 'active',
|
24 |
+
PRIMARY KEY (`id`)
|
25 |
+
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;");
|
26 |
+
$installer->getConnection()->modifyColumn($installer->getTable('dropship/orderitems'),'amosoft_item_status', ' ENUM( "Sourcing", "Reprocess", "Backorder", "Transmitting", "Sent to Supplier", "Sent to Vendor", "Cancelled", "No Dropship", "Completed" ) NOT NULL DEFAULT "Sourcing" ');
|
27 |
+
|
28 |
+
$installer->endSetup();
|
app/code/local/Amosoft/Dropship/sql/dropship_setup/mysql4-upgrade-1.0.6-1.0.7.php
ADDED
@@ -0,0 +1,54 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
$installer = $this;
|
9 |
+
$importLog = $installer->getTable('dropship/vendor_import_log');
|
10 |
+
$ranking = $installer->getTable('dropship/ranking');
|
11 |
+
$installer->startSetup();
|
12 |
+
$installer->getConnection()->addColumn($importLog, 'error_id', array(
|
13 |
+
'type' => Varien_Db_Ddl_Table::TYPE_INTEGER,
|
14 |
+
'identity' => true,
|
15 |
+
'nullable' => false,
|
16 |
+
'unsigned' => true,
|
17 |
+
'primary' => true,
|
18 |
+
'comment' => 'Add error id row'
|
19 |
+
)
|
20 |
+
);
|
21 |
+
$installer->getConnection()->addKey($importLog, 'error_id', 'error_id');
|
22 |
+
$installer->getConnection()->addColumn($ranking, 'linking_attribute', array(
|
23 |
+
'type' => Varien_Db_Ddl_Table::TYPE_TEXT,
|
24 |
+
'length' =>255,
|
25 |
+
'nullable' => true,
|
26 |
+
'default' => null,
|
27 |
+
'comment' => 'linking attribute'));
|
28 |
+
$installer->run(
|
29 |
+
"DROP TABLE IF EXISTS {$installer->getTable('dropship/csvtmpdata')};
|
30 |
+
CREATE TABLE IF NOT EXISTS {$installer->getTable('dropship/csvtmpdata')} (
|
31 |
+
`row_id` INT(11) NOT NULL AUTO_INCREMENT ,
|
32 |
+
`vendor_code` varchar(50) NOT NULL,
|
33 |
+
`csv_vendor_sku` varchar(50) NOT NULL,
|
34 |
+
`csv_stock` varchar(11) NOT NULL,
|
35 |
+
`csv_price` varchar(11) NOT NULL,
|
36 |
+
`is_processed` int(1) NOT NULL DEFAULT '0',
|
37 |
+
KEY `row_id` (`row_id`),
|
38 |
+
KEY `vendor_code` (`vendor_code`),
|
39 |
+
KEY `csv_vendor_sku` (`csv_vendor_sku`),
|
40 |
+
KEY `csv_stock` (`csv_stock`),
|
41 |
+
KEY `csv_price` (`csv_price`),
|
42 |
+
KEY `is_processed` (`is_processed`)
|
43 |
+
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
|
44 |
+
CREATE TABLE IF NOT EXISTS {$installer->getTable('dropship/vendor_import_log_desc')} (
|
45 |
+
`id` int(11) NOT NULL AUTO_INCREMENT,
|
46 |
+
`error_id` int(10) unsigned NOT NULL,
|
47 |
+
`description` varchar(255) CHARACTER SET utf8 NOT NULL,
|
48 |
+
PRIMARY KEY (`id`),
|
49 |
+
KEY `error_id` (`error_id`),
|
50 |
+
FOREIGN KEY (`error_id`) REFERENCES {$installer->getTable('dropship/vendor_import_log')} (`error_id`) ON DELETE CASCADE
|
51 |
+
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;");
|
52 |
+
|
53 |
+
|
54 |
+
$installer->endSetup();
|
app/code/local/Amosoft/Dropship/sql/dropship_setup/mysql4-upgrade-1.0.7-1.0.8.php
ADDED
@@ -0,0 +1,12 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
$installer = $this;
|
9 |
+
//apply patch for insert on duplicate
|
10 |
+
$csvTempData = $installer->getTable('dropship/csvtmpdata');
|
11 |
+
$installer->getConnection()->addKey($csvTempData,'csv_vendor_sku_unique','csv_vendor_sku','unique');
|
12 |
+
$installer->endSetup();
|
app/design/adminhtml/default/default/layout/amosoftdropship.xml
ADDED
@@ -0,0 +1,185 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<layout version="0.1.0">
|
3 |
+
|
4 |
+
<default>
|
5 |
+
<reference name="notifications">
|
6 |
+
<block type="dropship/adminhtml_notification" name="amosoftnotification" as="amosoftnotification" template="amosoft/window.phtml" />
|
7 |
+
</reference>
|
8 |
+
</default>
|
9 |
+
<amosoft_adminhtml_amosoft_index>
|
10 |
+
<reference name="head">
|
11 |
+
<action method="addItem"><type>css</type><name>prototype/windows/themes/magento.css</name></action>
|
12 |
+
</reference>
|
13 |
+
<reference name="content">
|
14 |
+
<block type="dropship/adminhtml_amosoft" name="dropship" />
|
15 |
+
</reference>
|
16 |
+
<reference name="js">
|
17 |
+
<block type="core/template" template="amosoft/add_help_js.phtml"/>
|
18 |
+
</reference>
|
19 |
+
</amosoft_adminhtml_amosoft_index>
|
20 |
+
|
21 |
+
<amosoft_adminhtml_sourcing_sourcinggrid>
|
22 |
+
<reference name="head">
|
23 |
+
<action method="addCss"><name>css/amosoft/dropship/custom-style.css</name></action>
|
24 |
+
</reference>
|
25 |
+
<reference name="content">
|
26 |
+
<block type="dropship/adminhtml_sourcing" name="dropship" />
|
27 |
+
</reference>
|
28 |
+
<reference name="js">
|
29 |
+
<block type="core/template" template="amosoft/add_help_js.phtml"/>
|
30 |
+
</reference>
|
31 |
+
</amosoft_adminhtml_sourcing_sourcinggrid>
|
32 |
+
|
33 |
+
<amosoft_adminhtml_ranking_index>
|
34 |
+
<reference name="head">
|
35 |
+
<action method="addItem"><type>js_css</type><name>prototype/windows/themes/default.css</name></action>
|
36 |
+
<action method="addItem"><type>css</type><name>prototype/windows/themes/magento.css</name></action>
|
37 |
+
<action method="addItem"><type>js</type><name>amosoft/extjs/ext-all.js</name></action>
|
38 |
+
<action method="addItem"><type>js_css</type><name>amosoft/extjs/css/ext-all.css</name></action>
|
39 |
+
<action method="addCss"><name>css/amosoft/dropship/custom-style.css</name></action>
|
40 |
+
</reference>
|
41 |
+
<reference name="js">
|
42 |
+
<block type="core/template" template="amosoft/inline-edit.phtml" />
|
43 |
+
<block type="core/template" template="amosoft/add_help_js.phtml"/>
|
44 |
+
</reference>
|
45 |
+
<reference name="content">
|
46 |
+
<block type="dropship/adminhtml_ranking" name="ranking">
|
47 |
+
<block type="dropship/adminhtml_upload" name="upload" as="supplier.upload" template="amosoft/upload_vendor_product.phtml">
|
48 |
+
<action method="setHeaderText"><value>Setup Vendor Products</value></action>
|
49 |
+
<action method="setProductSetupMode"><value>true</value></action>
|
50 |
+
</block>
|
51 |
+
</block>
|
52 |
+
</reference>
|
53 |
+
</amosoft_adminhtml_ranking_index>
|
54 |
+
|
55 |
+
<amosoft_adminhtml_inventory_index>
|
56 |
+
<reference name="head">
|
57 |
+
<action method="addCss"><name>css/amosoft/dropship/custom-style.css</name></action>
|
58 |
+
</reference>
|
59 |
+
<reference name="content">
|
60 |
+
<block type="dropship/adminhtml_inventory" name="inventory" />
|
61 |
+
</reference>
|
62 |
+
<reference name="js">
|
63 |
+
<block type="core/template" template="amosoft/add_help_js.phtml"/>
|
64 |
+
</reference>
|
65 |
+
</amosoft_adminhtml_inventory_index>
|
66 |
+
|
67 |
+
<amosoft_adminhtml_inventory_vendors>
|
68 |
+
<reference name="head">
|
69 |
+
<action method="addCss"><name>css/amosoft/dropship/custom-style.css</name></action>
|
70 |
+
</reference>
|
71 |
+
<reference name="content">
|
72 |
+
<block type="core/text_list" name="root" output="toHtml" >
|
73 |
+
<block type="dropship/adminhtml_inventory_edit_tab_amosoftvendor" name="vendors_product_tab" template="amosoft/vendorproducttab.phtml"/>
|
74 |
+
</block>
|
75 |
+
</reference>
|
76 |
+
</amosoft_adminhtml_inventory_vendors>
|
77 |
+
|
78 |
+
<amosoft_adminhtml_inventory_vendorshistory>
|
79 |
+
<reference name="head">
|
80 |
+
<action method="addCss"><name>css/amosoft/dropship/custom-style.css</name></action>
|
81 |
+
</reference>
|
82 |
+
<reference name="content">
|
83 |
+
<block type="core/text_list" name="root" output="toHtml" >
|
84 |
+
<block type="dropship/adminhtml_inventory_edit_tab_vendortabhistory" name="vendors_product_tab_history" template="amosoft/vendorproducttabhistory.phtml"/>
|
85 |
+
</block>
|
86 |
+
</reference>
|
87 |
+
</amosoft_adminhtml_inventory_vendorshistory>
|
88 |
+
|
89 |
+
<amosoft_adminhtml_upload_vendorsuploadhistory>
|
90 |
+
<reference name="head">
|
91 |
+
<action method="addCss"><name>css/amosoft/dropship/custom-style.css</name></action>
|
92 |
+
</reference>
|
93 |
+
<reference name="content">
|
94 |
+
<block type="dropship/adminhtml_Vendorproductuploadhistory" name="vendors_product_upload_history" template="amosoft/vendor_upload_product_history.phtml"/>
|
95 |
+
</reference>
|
96 |
+
<reference name="js">
|
97 |
+
<block type="core/template" template="amosoft/add_help_js.phtml"/>
|
98 |
+
</reference>
|
99 |
+
</amosoft_adminhtml_upload_vendorsuploadhistory>
|
100 |
+
|
101 |
+
<amosoft_adminhtml_ranking_popup>
|
102 |
+
<remove name="right"/>
|
103 |
+
<remove name="left"/>
|
104 |
+
<remove name="core_profiler"/>
|
105 |
+
<block type="core/template" name="root" output="toHtml" template="amosoft/popup.phtml"/>
|
106 |
+
</amosoft_adminhtml_ranking_popup>
|
107 |
+
|
108 |
+
<amosoft_adminhtml_ranking_showhistory>
|
109 |
+
<reference name="head">
|
110 |
+
<action method="addCss"><name>css/amosoft/dropship/custom-style.css</name></action>
|
111 |
+
</reference>
|
112 |
+
<reference name="content">
|
113 |
+
<block type="dropship/adminhtml_showhistory" name="showhistory" template="amosoft/result.phtml"/>
|
114 |
+
</reference>
|
115 |
+
<reference name="js">
|
116 |
+
<block type="core/template" template="amosoft/add_help_js.phtml"/>
|
117 |
+
</reference>
|
118 |
+
</amosoft_adminhtml_ranking_showhistory>
|
119 |
+
|
120 |
+
<amosoft_adminhtml_upload_index>
|
121 |
+
<reference name="head">
|
122 |
+
<action method="addCss"><name>css/amosoft/dropship/custom-style.css</name></action>
|
123 |
+
</reference>
|
124 |
+
<reference name="content">
|
125 |
+
<block type="dropship/adminhtml_inventory" name="inventory" />
|
126 |
+
<block type="dropship/adminhtml_upload" name="upload" template="amosoft/upload_vendor_product.phtml">
|
127 |
+
<action method="setHeaderText"><value>Vendor/Supplier Inventory</value></action>
|
128 |
+
</block>
|
129 |
+
</reference>
|
130 |
+
<reference name="js">
|
131 |
+
<block type="core/template" template="amosoft/add_help_js.phtml"/>
|
132 |
+
</reference>
|
133 |
+
</amosoft_adminhtml_upload_index>
|
134 |
+
<amosoft_adminhtml_upload_run>
|
135 |
+
<remove name="root"/>
|
136 |
+
<block type="adminhtml/page" name="convert_root" output="toHtml" template="page.phtml">
|
137 |
+
<block type="adminhtml/page_head" name="convert_root_head" as="head" template="page/head.phtml">
|
138 |
+
<action method="addJs"><script>prototype/prototype.js</script></action>
|
139 |
+
<action method="addJs"><script>prototype/validation.js</script></action>
|
140 |
+
<action method="addJs"><script>varien/js.js</script></action>
|
141 |
+
<action method="addJs"><script>mage/translate.js</script></action>
|
142 |
+
<action method="addJs"><script>mage/adminhtml/tools.js</script></action>
|
143 |
+
</block>
|
144 |
+
<block type="dropship/adminhtml_upload_bulkassign" name="amosoft_bulkassign" template="amosoft/process-profile.phtml" output="toHtml"/>
|
145 |
+
</block>
|
146 |
+
</amosoft_adminhtml_upload_run>
|
147 |
+
|
148 |
+
<adminhtml_sales_order_view>
|
149 |
+
<reference name="order_items">
|
150 |
+
<action method="setTemplate">
|
151 |
+
<template>amosoft/sales/items.phtml</template>
|
152 |
+
</action>
|
153 |
+
<action method="addItemRender">
|
154 |
+
<type>default</type>
|
155 |
+
<block>adminhtml/sales_order_view_items_renderer_default</block>
|
156 |
+
<template>amosoft/sales/default.phtml</template>
|
157 |
+
</action>
|
158 |
+
<action method="addItemRender">
|
159 |
+
<type>bundle</type>
|
160 |
+
<block>bundle/adminhtml_sales_order_view_items_renderer</block>
|
161 |
+
<template>amosoft/bundle/renderer.phtml</template>
|
162 |
+
</action>
|
163 |
+
<action method="addItemRender">
|
164 |
+
<type>downloadable</type>
|
165 |
+
<block>adminhtml/sales_order_view_items_renderer_default</block>
|
166 |
+
<template>amosoft/downloadable/downloadable.phtml</template>
|
167 |
+
</action>
|
168 |
+
</reference>
|
169 |
+
</adminhtml_sales_order_view>
|
170 |
+
|
171 |
+
<adminhtml_catalog_product_edit>
|
172 |
+
<reference name="product_tabs">
|
173 |
+
<block type="dropship/adminhtml_inventory_edit_vendortab" name="vendor_tab"/>
|
174 |
+
<action method="addTab">
|
175 |
+
<name>vendor_tab</name>
|
176 |
+
<block>vendor_tab</block>
|
177 |
+
</action>
|
178 |
+
<block type="dropship/adminhtml_inventory_edit_vendortabhistory" name="vendor_tab_history"/>
|
179 |
+
<action method="addTab">
|
180 |
+
<name>vendor_tab_history</name>
|
181 |
+
<block>vendor_tab_history</block>
|
182 |
+
</action>
|
183 |
+
</reference>
|
184 |
+
</adminhtml_catalog_product_edit>
|
185 |
+
</layout>
|
app/design/adminhtml/default/default/template/amosoft/add_help_js.phtml
ADDED
@@ -0,0 +1,26 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
?>
|
9 |
+
|
10 |
+
|
11 |
+
<script type="text/javascript">
|
12 |
+
//<![CDATA[
|
13 |
+
if($$('.form-buttons a#page-help-link').length <= 0 ){
|
14 |
+
if($$('.form-buttons button').length > 0){
|
15 |
+
$$('.form-buttons button')[0].insert({
|
16 |
+
before: "<a style='color:black;padding-right:20px' target='_blank' id='page-help-link' href='<?php echo Mage::helper('dropship')->getConfigObject('apiconfig/helpurl/link'); ?>' target='magento_page_help'>Need help from amosoft?</a>"
|
17 |
+
});
|
18 |
+
}else
|
19 |
+
{
|
20 |
+
$$('.form-buttons')[0].insert({
|
21 |
+
top: "<a style='color:black;padding-right:20px' target='_blank' id='page-help-link' href='<?php echo Mage::helper('dropship')->getConfigObject('apiconfig/helpurl/link'); ?>' target='magento_page_help'>Need help from amosoft?</a>"
|
22 |
+
});
|
23 |
+
}
|
24 |
+
}
|
25 |
+
//]]>
|
26 |
+
</script>
|
app/design/adminhtml/default/default/template/amosoft/addvendorfields.phtml
ADDED
@@ -0,0 +1,142 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
?>
|
9 |
+
|
10 |
+
|
11 |
+
<script type="text/javascript">
|
12 |
+
//<![CDATA[
|
13 |
+
var firstStepTemplate = '<div class="option-box" id="vendor_{{id}}">'+
|
14 |
+
'<table id="<?php echo $this->getFieldId() ?>_{{id}}" class="option-header" cellpadding="0" cellspacing="0">'+
|
15 |
+
'<input type="hidden" id="<?php echo $this->getFieldId() ?>_{{id}}_is_delete" name="<?php echo $this->getFieldName() ?>[{{id}}][is_delete]" value="" />'+
|
16 |
+
'<input type="hidden" id="<?php echo $this->getFieldId() ?>_{{id}}_updated_by" name="<?php echo $this->getFieldName() ?>[{{id}}][updated_by]" value="<?php echo $this->escapeHtml(Mage::getSingleton('admin/session')->getUser()->getUsername()) ?>" />'+
|
17 |
+
'<thead>'+
|
18 |
+
'<tr>'+
|
19 |
+
'<th class="opt-title" style="width:307px;"><?php echo Mage::helper('catalog')->__('Supplier') ?> <span class="required">*</span></th>'+
|
20 |
+
'<th class="opt-type" style="width:75px;"><?php echo Mage::helper('catalog')->__('Cost') ?> <span class="required">*</span></th>'+
|
21 |
+
'<th class="opt-shipcost" style="width:75px;"><?php echo Mage::helper('catalog')->__('Shipping Cost') ?> <span class="required">*</span></th>'+
|
22 |
+
'<th class="opt-req" style="width:75px;"><?php echo $this->jsQuoteEscape(Mage::helper('dropship')->__('Inventory')) ?><span class="required">*</span></th>'+
|
23 |
+
'<th class="opt-order" style="width:75px;"><?php echo Mage::helper('catalog')->__('Supplier Sku') ?><span class="required">*</span></th>'+
|
24 |
+
'<th class="a-right"><?php echo $this->jsQuoteEscape($this->getDeleteButtonHtml()) ?></th>'+
|
25 |
+
'</tr>'+
|
26 |
+
'</thead>'+
|
27 |
+
'<tr>'+
|
28 |
+
'<td style = "padding: 5px 5px;"><?php echo $this->getVendorSelectHtml() ?></td>'+
|
29 |
+
'<td style = "padding: 5px 5px;"><input style="width: 84px;" type="text" class="required-entry validate-number validate-zero-or-greater input-text vendor-input-text" id="<?php echo $this->getFieldId() ?>_{{id}}_cost" name="<?php echo $this->getFieldName() ?>[{{id}}][cost]" value=""></td>'+
|
30 |
+
'<td style = "padding: 5px 5px;"><input style="width: 84px;" type="text" class="required-entry validate-number validate-zero-or-greater input-text vendor-input-text" id="<?php echo $this->getFieldId() ?>_{{id}}_shipping_cost" name="<?php echo $this->getFieldName() ?>[{{id}}][shipping_cost]" value=""></td>'+
|
31 |
+
'<td style = "padding: 5px 5px;"><input style="width: 84px;" type="text" class="required-entry validate-number validate-zero-or-greater input-text vendor-input-text" id="<?php echo $this->getFieldId() ?>_{{id}}_inventory" name="<?php echo $this->getFieldName() ?>[{{id}}][stock]" value=""></td>'+
|
32 |
+
'<td style = "padding: 5px 5px;"><input style="width: 84px;" type="text" class="required-entry input-text vendor-input-text" id="<?php echo $this->getFieldId() ?>_{{id}}amosoft_vendor_sku" name="<?php echo $this->getFieldName() ?>[{{id}}][amosoft_vendor_sku]" value=""></td>'+
|
33 |
+
'<td> </td>'+
|
34 |
+
'</tr></table></div>';
|
35 |
+
|
36 |
+
var productOptionVendor = {
|
37 |
+
div : $('product_options_container_top_vendor'),
|
38 |
+
templateSyntax : /(^|.|\r|\n)({{(\w+)}})/,
|
39 |
+
templateText : firstStepTemplate,
|
40 |
+
itemCount : 1,
|
41 |
+
add : function(data) {
|
42 |
+
this.template = new Template(this.templateText, this.templateSyntax);
|
43 |
+
|
44 |
+
if(!data.id){
|
45 |
+
data = {};
|
46 |
+
data.id = this.itemCount;
|
47 |
+
data.type = '';
|
48 |
+
data.option_id = 0;
|
49 |
+
} else {
|
50 |
+
this.itemCount = data.item_count;
|
51 |
+
}
|
52 |
+
|
53 |
+
Element.insert(this.div, {'after':this.template.evaluate(data)});
|
54 |
+
|
55 |
+
|
56 |
+
this.itemCount++;
|
57 |
+
this.bindRemoveButtons();
|
58 |
+
|
59 |
+
},
|
60 |
+
remove : function(event){
|
61 |
+
var element = $(Event.findElement(event, 'div'));
|
62 |
+
if(element){
|
63 |
+
$('product_'+element.readAttribute('id')+'_'+'is_delete').value = '1';
|
64 |
+
element.addClassName('no-display');
|
65 |
+
element.addClassName('ignore-validate');
|
66 |
+
element.hide();
|
67 |
+
}
|
68 |
+
},
|
69 |
+
bindRemoveButtons : function(){
|
70 |
+
var buttons = $$('div.product-custom-options-vendor .delete-product-option-vendor');
|
71 |
+
for(var i=0;i<buttons.length;i++){
|
72 |
+
if(!$(buttons[i]).binded){
|
73 |
+
$(buttons[i]).binded = true;
|
74 |
+
Event.observe(buttons[i], 'click', this.remove.bind(this));
|
75 |
+
}
|
76 |
+
}
|
77 |
+
this.bindSelectType();
|
78 |
+
this.bindInputType();
|
79 |
+
|
80 |
+
},
|
81 |
+
|
82 |
+
bindSelectType : function(){
|
83 |
+
|
84 |
+
var types = $$('.select-vendor-option-type');
|
85 |
+
for(var i=0;i<types.length;i++){
|
86 |
+
if(!$(types[i]).binded){
|
87 |
+
$(types[i]).binded = true;
|
88 |
+
Event.observe(types[i], 'change', this.changeSelectInput.bind(this));
|
89 |
+
}
|
90 |
+
}
|
91 |
+
},
|
92 |
+
|
93 |
+
bindInputType : function(){
|
94 |
+
|
95 |
+
var types = $$('.vendor-input-text');
|
96 |
+
for(var i=0;i<types.length;i++){
|
97 |
+
if(!$(types[i]).binded){
|
98 |
+
$(types[i]).binded = true;
|
99 |
+
Event.observe(types[i], 'blur', this.changeInput.bind(this));
|
100 |
+
}
|
101 |
+
}
|
102 |
+
},
|
103 |
+
|
104 |
+
changeSelectInput : function(event){
|
105 |
+
var element = $(Event.findElement(event, 'select'));
|
106 |
+
|
107 |
+
var group = '';
|
108 |
+
var previousGroupElm = $(element.readAttribute('id').sub('_type', '_previous_group'));
|
109 |
+
previousGroupElm.value = element.getValue();
|
110 |
+
},
|
111 |
+
|
112 |
+
changeInput : function(event){
|
113 |
+
var element = $(Event.findElement(event, 'input'));
|
114 |
+
|
115 |
+
var group = '';
|
116 |
+
var previousGroupElm = $(element.readAttribute('id').sub('_type', '_previous_group'));
|
117 |
+
}
|
118 |
+
}
|
119 |
+
|
120 |
+
|
121 |
+
|
122 |
+
productOptionVendor.bindRemoveButtons();
|
123 |
+
|
124 |
+
|
125 |
+
if($('<?php echo $this->getAddButtonId() ?>')){
|
126 |
+
Event.observe('<?php echo $this->getAddButtonId() ?>', 'click', productOptionVendor.add.bind(productOptionVendor));
|
127 |
+
}
|
128 |
+
|
129 |
+
//validation for selected input type
|
130 |
+
Validation.addAllThese([
|
131 |
+
['required-option-select', <?php echo $this->helper('core')->jsonEncode(Mage::helper('catalog')->__('Select a vendor')) ?>, function(v, elm) {
|
132 |
+
if (elm.getValue() == '') {
|
133 |
+
return false;
|
134 |
+
}
|
135 |
+
return true;
|
136 |
+
}]]);
|
137 |
+
|
138 |
+
//adding data to templates
|
139 |
+
|
140 |
+
|
141 |
+
//]]>
|
142 |
+
</script>
|
app/design/adminhtml/default/default/template/amosoft/bundle/renderer.phtml
ADDED
@@ -0,0 +1,441 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @see Mage_Bundle_Block_Adminhtml_Sales_Order_View_Items_Renderer
|
4 |
+
*/
|
5 |
+
?>
|
6 |
+
|
7 |
+
<?php $_item = $this->getItem() ?>
|
8 |
+
<?php $items = array_merge(array($_item), $_item->getChildrenItems()); ?>
|
9 |
+
<?php $_count = count ($items) ?>
|
10 |
+
<?php $_index = 0 ?>
|
11 |
+
|
12 |
+
<?php $_prevOptionId = '' ?>
|
13 |
+
|
14 |
+
<?php if($this->getOrderOptions() || $_item->getDescription() || $this->canDisplayGiftmessage()): ?>
|
15 |
+
<?php $_showlastRow = true ?>
|
16 |
+
<?php else: ?>
|
17 |
+
<?php $_showlastRow = false ?>
|
18 |
+
<?php endif; ?>
|
19 |
+
|
20 |
+
<?php foreach ($items as $_item): ?>
|
21 |
+
<?php $this->setPriceDataObject($_item) ?>
|
22 |
+
<?php $attributes = $this->getSelectionAttributes($_item) ?>
|
23 |
+
<?php if ($_item->getParentItem()): ?>
|
24 |
+
<?php if ($_prevOptionId != $attributes['option_id']): ?>
|
25 |
+
<tr>
|
26 |
+
<td><div class="option-label"><?php echo $attributes['option_label'] ?></div></td>
|
27 |
+
<td> </td>
|
28 |
+
<td> </td>
|
29 |
+
<td> </td>
|
30 |
+
<td> </td>
|
31 |
+
<td> </td>
|
32 |
+
<td> </td>
|
33 |
+
<td> </td>
|
34 |
+
<td> </td>
|
35 |
+
<td class="last"> </td>
|
36 |
+
</tr>
|
37 |
+
<?php $_prevOptionId = $attributes['option_id'] ?>
|
38 |
+
<?php endif; ?>
|
39 |
+
<?php endif; ?>
|
40 |
+
<tr<?php echo (++$_index==$_count && !$_showlastRow)?' class="border"':'' ?>>
|
41 |
+
<?php if (!$_item->getParentItem()): ?>
|
42 |
+
<td>
|
43 |
+
<h5 class="title">
|
44 |
+
<span id="order_item_<?php echo $_item->getId() ?>_title"><?php echo $this->escapeHtml($_item->getName()) ?></span>
|
45 |
+
</h5>
|
46 |
+
<div>
|
47 |
+
<strong><?php echo $this->helper('sales')->__('SKU') ?>:</strong>
|
48 |
+
<?php echo implode('<br />', Mage::helper('catalog')->splitSku($this->escapeHtml($_item->getSku()))); ?>
|
49 |
+
</div>
|
50 |
+
</td>
|
51 |
+
<?php else: ?>
|
52 |
+
<td><div class="option-value"><?php echo $this->getValueHtml($_item)?></div></td>
|
53 |
+
<?php endif; ?>
|
54 |
+
<td class="a-center">
|
55 |
+
<?php if ($this->canShowPriceInfo($_item)): ?>
|
56 |
+
<?php echo $_item->getStatus() ?>
|
57 |
+
<?php else: ?>
|
58 |
+
|
59 |
+
<?php endif; ?>
|
60 |
+
</td>
|
61 |
+
<?php
|
62 |
+
$ItemStatus = $_item->getAmosoftItemStatus();
|
63 |
+
?>
|
64 |
+
<td class="a-center">
|
65 |
+
<span id="<?php echo $_item->getItemId() ?>"><?php echo $ItemStatus; ?></span>
|
66 |
+
<?php if($ItemStatus!=""): ?>
|
67 |
+
<p><a id="edit" onclick="respondToClick(<?php echo $_item->getItemId() ?>)" style="cursor:pointer"><?php echo $this->__('Edit') ?></a></p>
|
68 |
+
<span id="change_status-<?php echo $_item->getItemId() ?>" style="display:none;">
|
69 |
+
<select name="status" id="status-<?php echo $_item->getItemId() ?>" onchange="respondToChange(this)">
|
70 |
+
<option value=""><?php echo $this->__('Please select') ?></option>
|
71 |
+
<?php foreach(Mage::helper('dropship')->getAmosoftOrderItemStatus() as $status):?>
|
72 |
+
<?php if($ItemStatus!=$status): ?>
|
73 |
+
<option value="<?php echo $status ?>"><?php echo $status ?></option>
|
74 |
+
<?php endif; ?>
|
75 |
+
<?php endforeach; ?>
|
76 |
+
</select>
|
77 |
+
</span>
|
78 |
+
<?php endif; ?>
|
79 |
+
</td>
|
80 |
+
<td class="a-center"><?php echo $_item->getLbVendorName() ?></td>
|
81 |
+
<td class="a-center"><?php echo $_item->getAmosoftVendorSku() ?></td>
|
82 |
+
<td class="a-right">
|
83 |
+
<?php if ($this->canShowPriceInfo($_item)): ?>
|
84 |
+
<?php echo $this->displayPriceAttribute('original_price') ?>
|
85 |
+
<?php else: ?>
|
86 |
+
|
87 |
+
<?php endif; ?>
|
88 |
+
</td>
|
89 |
+
<td class="a-right">
|
90 |
+
<?php if ($this->canShowPriceInfo($_item)): ?>
|
91 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceExclTax()): ?>
|
92 |
+
<span class="price-excl-tax">
|
93 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
|
94 |
+
<span class="label"><?php echo $this->__('Excl. Tax'); ?>:</span>
|
95 |
+
<?php endif; ?>
|
96 |
+
|
97 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
|
98 |
+
<?php
|
99 |
+
echo $this->displayPrices(
|
100 |
+
$_item->getBasePrice()+$_item->getBaseWeeeTaxAppliedAmount()+$_item->getBaseWeeeTaxDisposition(),
|
101 |
+
$_item->getPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()
|
102 |
+
);
|
103 |
+
?>
|
104 |
+
<?php else: ?>
|
105 |
+
<?php echo $this->displayPrices($_item->getBasePrice(), $_item->getPrice()) ?>
|
106 |
+
<?php endif; ?>
|
107 |
+
|
108 |
+
|
109 |
+
<?php if (Mage::helper('weee')->getApplied($_item)): ?>
|
110 |
+
<br />
|
111 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
|
112 |
+
<small>
|
113 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
114 |
+
<span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></span>
|
115 |
+
<?php endforeach; ?>
|
116 |
+
</small>
|
117 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
|
118 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
119 |
+
<span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></small></span>
|
120 |
+
<?php endforeach; ?>
|
121 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
|
122 |
+
<small>
|
123 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
124 |
+
<span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></span>
|
125 |
+
<?php endforeach; ?>
|
126 |
+
</small>
|
127 |
+
<?php endif; ?>
|
128 |
+
|
129 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
|
130 |
+
<br />
|
131 |
+
<span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br />
|
132 |
+
<?php
|
133 |
+
echo $this->displayPrices(
|
134 |
+
$_item->getBasePrice()+$_item->getBaseWeeeTaxAppliedAmount()+$_item->getBaseWeeeTaxDisposition(),
|
135 |
+
$_item->getPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()
|
136 |
+
);
|
137 |
+
?>
|
138 |
+
</span>
|
139 |
+
<?php endif; ?>
|
140 |
+
<?php endif; ?>
|
141 |
+
</span>
|
142 |
+
<br />
|
143 |
+
<?php endif; ?>
|
144 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceInclTax()): ?>
|
145 |
+
<span class="price-incl-tax">
|
146 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
|
147 |
+
<span class="label"><?php echo $this->__('Incl. Tax'); ?>:</span>
|
148 |
+
<?php endif; ?>
|
149 |
+
<?php $_incl = $this->helper('checkout')->getPriceInclTax($_item); ?>
|
150 |
+
<?php $_baseIncl = $this->helper('checkout')->getBasePriceInclTax($_item); ?>
|
151 |
+
|
152 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
|
153 |
+
<?php echo $this->displayPrices($_baseIncl + Mage::helper('weee')->getBaseWeeeTaxInclTax($_item), $_incl + Mage::helper('weee')->getWeeeTaxInclTax($_item)); ?>
|
154 |
+
<?php else: ?>
|
155 |
+
<?php echo $this->displayPrices($_baseIncl-$_item->getBaseWeeeTaxDisposition(), $_incl-$_item->getWeeeTaxDisposition()) ?>
|
156 |
+
<?php endif; ?>
|
157 |
+
|
158 |
+
<?php if (Mage::helper('weee')->getApplied($_item)): ?>
|
159 |
+
<br />
|
160 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
|
161 |
+
<small>
|
162 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
163 |
+
<span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></span>
|
164 |
+
<?php endforeach; ?>
|
165 |
+
</small>
|
166 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
|
167 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
168 |
+
<span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></small></span>
|
169 |
+
<?php endforeach; ?>
|
170 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
|
171 |
+
<small>
|
172 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
173 |
+
<span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></span>
|
174 |
+
<?php endforeach; ?>
|
175 |
+
</small>
|
176 |
+
<?php endif; ?>
|
177 |
+
|
178 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
|
179 |
+
<br />
|
180 |
+
<span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br /> <?php echo $this->displayPrices($_baseIncl + Mage::helper('weee')->getBaseWeeeTaxInclTax($_item), $_incl + Mage::helper('weee')->getWeeeTaxInclTax($_item)); ?></span>
|
181 |
+
<?php endif; ?>
|
182 |
+
<?php endif; ?>
|
183 |
+
</span>
|
184 |
+
<?php endif; ?>
|
185 |
+
<?php else: ?>
|
186 |
+
|
187 |
+
<?php endif; ?>
|
188 |
+
</td>
|
189 |
+
<td>
|
190 |
+
<?php if ($this->canShowPriceInfo($_item)): ?>
|
191 |
+
<table cellspacing="0" class="qty-table">
|
192 |
+
<tr>
|
193 |
+
<td><?php echo Mage::helper('sales')->__('Ordered') ?></td>
|
194 |
+
<td><strong><?php echo $_item->getQtyOrdered()*1 ?></strong></td>
|
195 |
+
</tr>
|
196 |
+
<?php if ((float) $_item->getQtyInvoiced()): ?>
|
197 |
+
<tr>
|
198 |
+
<td><?php echo Mage::helper('sales')->__('Invoiced') ?></td>
|
199 |
+
<td><strong><?php echo $_item->getQtyInvoiced()*1 ?></strong></td>
|
200 |
+
</tr>
|
201 |
+
<?php endif; ?>
|
202 |
+
<?php if ((float) $_item->getQtyShipped() && $this->isShipmentSeparately($_item)): ?>
|
203 |
+
<tr>
|
204 |
+
<td><?php echo Mage::helper('sales')->__('Shipped') ?></td>
|
205 |
+
<td><strong><?php echo $_item->getQtyShipped()*1 ?></strong></td>
|
206 |
+
</tr>
|
207 |
+
<?php endif; ?>
|
208 |
+
<?php if ((float) $_item->getQtyRefunded()): ?>
|
209 |
+
<tr>
|
210 |
+
<td><?php echo Mage::helper('sales')->__('Refunded') ?></td>
|
211 |
+
<td><strong><?php echo $_item->getQtyRefunded()*1 ?></strong></td>
|
212 |
+
</tr>
|
213 |
+
<?php endif; ?>
|
214 |
+
<?php if ((float) $_item->getQtyCanceled()): ?>
|
215 |
+
<tr>
|
216 |
+
<td><?php echo Mage::helper('sales')->__('Canceled') ?></td>
|
217 |
+
<td><strong><?php echo $_item->getQtyCanceled()*1 ?></strong></td>
|
218 |
+
</tr>
|
219 |
+
<?php endif; ?>
|
220 |
+
</table>
|
221 |
+
<?php elseif ($this->isShipmentSeparately($_item)): ?>
|
222 |
+
<table cellspacing="0" class="qty-table">
|
223 |
+
<tr>
|
224 |
+
<td><?php echo Mage::helper('sales')->__('Ordered') ?></td>
|
225 |
+
<td><strong><?php echo $_item->getQtyOrdered()*1 ?></strong></td>
|
226 |
+
</tr>
|
227 |
+
<?php if ((float) $_item->getQtyShipped()): ?>
|
228 |
+
<tr>
|
229 |
+
<td><?php echo Mage::helper('sales')->__('Shipped') ?></td>
|
230 |
+
<td><strong><?php echo $_item->getQtyShipped()*1 ?></strong></td>
|
231 |
+
</tr>
|
232 |
+
<?php endif; ?>
|
233 |
+
</table>
|
234 |
+
<?php else: ?>
|
235 |
+
|
236 |
+
<?php endif; ?>
|
237 |
+
</td>
|
238 |
+
<td class="a-right">
|
239 |
+
<?php if ($this->canShowPriceInfo($_item)): ?>
|
240 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceExclTax()): ?>
|
241 |
+
<span class="price-excl-tax">
|
242 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
|
243 |
+
<span class="label"><?php echo $this->__('Excl. Tax'); ?>:</span>
|
244 |
+
<?php endif; ?>
|
245 |
+
|
246 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
|
247 |
+
<?php
|
248 |
+
echo $this->displayPrices(
|
249 |
+
$_item->getBaseRowTotal()+$_item->getBaseWeeeTaxAppliedRowAmount()+$_item->getBaseWeeeTaxRowDisposition(),
|
250 |
+
$_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()
|
251 |
+
);
|
252 |
+
?>
|
253 |
+
<?php else: ?>
|
254 |
+
<?php echo $this->displayPrices($_item->getBaseRowTotal(), $_item->getRowTotal()) ?>
|
255 |
+
<?php endif; ?>
|
256 |
+
|
257 |
+
|
258 |
+
<?php if (Mage::helper('weee')->getApplied($_item)): ?>
|
259 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
|
260 |
+
<small>
|
261 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
262 |
+
<span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></span>
|
263 |
+
<?php endforeach; ?>
|
264 |
+
</small>
|
265 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
|
266 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
267 |
+
<span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></small></span>
|
268 |
+
<?php endforeach; ?>
|
269 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
|
270 |
+
<small>
|
271 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
272 |
+
<span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></span>
|
273 |
+
<?php endforeach; ?>
|
274 |
+
</small>
|
275 |
+
<?php endif; ?>
|
276 |
+
|
277 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
|
278 |
+
<br />
|
279 |
+
<span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br />
|
280 |
+
<?php
|
281 |
+
echo $this->displayPrices(
|
282 |
+
$_item->getBaseRowTotal()+$_item->getBaseWeeeTaxAppliedRowAmount()+$_item->getBaseWeeeTaxRowDisposition(),
|
283 |
+
$_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()
|
284 |
+
);
|
285 |
+
?>
|
286 |
+
</span>
|
287 |
+
<?php endif; ?>
|
288 |
+
<?php endif; ?>
|
289 |
+
</span>
|
290 |
+
<br />
|
291 |
+
<?php endif; ?>
|
292 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceInclTax()): ?>
|
293 |
+
<span class="price-incl-tax">
|
294 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
|
295 |
+
<span class="label"><?php echo $this->__('Incl. Tax'); ?>:</span>
|
296 |
+
<?php endif; ?>
|
297 |
+
<?php $_incl = $this->helper('checkout')->getSubtotalInclTax($_item); ?>
|
298 |
+
<?php $_baseIncl = $this->helper('checkout')->getBaseSubtotalInclTax($_item); ?>
|
299 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
|
300 |
+
<?php echo $this->displayPrices($_baseIncl + Mage::helper('weee')->getBaseRowWeeeTaxInclTax($_item), $_incl + Mage::helper('weee')->getRowWeeeTaxInclTax($_item)); ?>
|
301 |
+
<?php else: ?>
|
302 |
+
<?php echo $this->displayPrices($_baseIncl-$_item->getBaseWeeeTaxRowDisposition(), $_incl-$_item->getWeeeTaxRowDisposition()) ?>
|
303 |
+
<?php endif; ?>
|
304 |
+
|
305 |
+
|
306 |
+
<?php if (Mage::helper('weee')->getApplied($_item)): ?>
|
307 |
+
|
308 |
+
<br />
|
309 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
|
310 |
+
<small>
|
311 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
312 |
+
<span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></span>
|
313 |
+
<?php endforeach; ?>
|
314 |
+
</small>
|
315 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
|
316 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
317 |
+
<span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></small></span>
|
318 |
+
<?php endforeach; ?>
|
319 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
|
320 |
+
<small>
|
321 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
322 |
+
<span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></span>
|
323 |
+
<?php endforeach; ?>
|
324 |
+
</small>
|
325 |
+
<?php endif; ?>
|
326 |
+
|
327 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
|
328 |
+
<br /><span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br /> <?php echo $this->displayPrices($_baseIncl + Mage::helper('weee')->getBaseRowWeeeTaxInclTax($_item), $_incl + Mage::helper('weee')->getRowWeeeTaxInclTax($_item)); ?></span>
|
329 |
+
<?php endif; ?>
|
330 |
+
<?php endif; ?>
|
331 |
+
</span>
|
332 |
+
<?php endif; ?>
|
333 |
+
<?php else: ?>
|
334 |
+
|
335 |
+
<?php endif; ?>
|
336 |
+
</td>
|
337 |
+
<td class="a-right">
|
338 |
+
<?php if ($this->canShowPriceInfo($_item)): ?>
|
339 |
+
<?php echo $this->displayPriceAttribute('tax_amount') ?>
|
340 |
+
<?php else: ?>
|
341 |
+
|
342 |
+
<?php endif; ?>
|
343 |
+
</td>
|
344 |
+
|
345 |
+
<td class="a-right">
|
346 |
+
<?php if ($this->canShowPriceInfo($_item)): ?>
|
347 |
+
<?php echo $this->displayTaxPercent($_item) ?>
|
348 |
+
<?php else: ?>
|
349 |
+
|
350 |
+
<?php endif; ?>
|
351 |
+
</td>
|
352 |
+
<td class="a-right">
|
353 |
+
<?php if ($this->canShowPriceInfo($_item)): ?>
|
354 |
+
<?php echo $this->displayPriceAttribute('discount_amount') ?>
|
355 |
+
<?php else: ?>
|
356 |
+
|
357 |
+
<?php endif; ?>
|
358 |
+
</td>
|
359 |
+
<td class="a-right last">
|
360 |
+
<?php if ($this->canShowPriceInfo($_item)): ?>
|
361 |
+
<?php echo $this->displayPrices(
|
362 |
+
max(0, $_item->getBaseRowTotal() - $_item->getBaseDiscountAmount() + $_item->getBaseTaxAmount() + $_item->getBaseHiddenTaxAmount() + $_item->getBaseWeeeTaxAppliedRowAmount()),
|
363 |
+
max(0, $_item->getRowTotal() - $_item->getDiscountAmount() + $_item->getTaxAmount() + $_item->getHiddenTaxAmount() + $_item->getWeeeTaxAppliedRowAmount())
|
364 |
+
); ?>
|
365 |
+
<?php else: ?>
|
366 |
+
|
367 |
+
<?php endif; ?>
|
368 |
+
</td>
|
369 |
+
</tr>
|
370 |
+
<?php endforeach; ?>
|
371 |
+
<?php if($_showlastRow): ?>
|
372 |
+
<tr<?php if (!$this->canDisplayGiftmessage()) echo ' class="border"' ?>>
|
373 |
+
<td>
|
374 |
+
<?php if ($this->getOrderOptions()): ?>
|
375 |
+
<dl class="item-options">
|
376 |
+
<?php foreach ($this->getOrderOptions() as $option): ?>
|
377 |
+
<dt><?php echo $option['label'] ?>:</dt>
|
378 |
+
<dd>
|
379 |
+
<?php if (isset($option['custom_view']) && $option['custom_view']): ?>
|
380 |
+
<?php echo $option['value'];?>
|
381 |
+
<?php else: ?>
|
382 |
+
<?php echo Mage::helper('core/string')->truncate($option['value'], 55, '', $_remainder);?>
|
383 |
+
<?php if ($_remainder):?>
|
384 |
+
... <span id="<?php echo $_id = 'id' . uniqid()?>"><?php echo $_remainder ?></span>
|
385 |
+
<script type="text/javascript">
|
386 |
+
$('<?php echo $_id ?>').hide();
|
387 |
+
$('<?php echo $_id ?>').up().observe('mouseover', function(){$('<?php echo $_id ?>').show();});
|
388 |
+
$('<?php echo $_id ?>').up().observe('mouseout', function(){$('<?php echo $_id ?>').hide();});
|
389 |
+
</script>
|
390 |
+
<?php endif;?>
|
391 |
+
<?php endif;?>
|
392 |
+
</dd>
|
393 |
+
<?php endforeach; ?>
|
394 |
+
</dl>
|
395 |
+
<?php else: ?>
|
396 |
+
|
397 |
+
<?php endif; ?>
|
398 |
+
<?php echo $this->escapeHtml($_item->getDescription()) ?>
|
399 |
+
</td>
|
400 |
+
<td> </td>
|
401 |
+
<td> </td>
|
402 |
+
<td> </td>
|
403 |
+
<td> </td>
|
404 |
+
<td> </td>
|
405 |
+
<td> </td>
|
406 |
+
<td> </td>
|
407 |
+
<td> </td>
|
408 |
+
<td class="last"> </td>
|
409 |
+
</tr>
|
410 |
+
<?php endif; ?>
|
411 |
+
<script type="text/javascript">
|
412 |
+
|
413 |
+
function respondToClick(id) {
|
414 |
+
$('change_status-'+id).show();
|
415 |
+
}
|
416 |
+
|
417 |
+
function respondToChange(obj) {
|
418 |
+
var itemId = obj.id.split('-');
|
419 |
+
new Ajax.Request('<?php echo $this->getUrl('amosoft/adminhtml_amosoft/changeStatusAjax') ?>', {
|
420 |
+
parameters: {
|
421 |
+
'amosoft_item_id': itemId[1],
|
422 |
+
'amosoft_item_status': obj.value
|
423 |
+
},
|
424 |
+
method: 'post',
|
425 |
+
onSuccess: success,
|
426 |
+
onFailure: fail
|
427 |
+
});
|
428 |
+
}
|
429 |
+
|
430 |
+
function success(response){
|
431 |
+
var data = response.responseText.evalJSON();
|
432 |
+
var id = data.amosoft_item_id;
|
433 |
+
$(id).innerHTML = data.amosoft_item_status;
|
434 |
+
alert(data.msg);
|
435 |
+
$('change_status-'+id).hide();
|
436 |
+
}
|
437 |
+
|
438 |
+
function fail(response){
|
439 |
+
alert("Request cannot be completed");
|
440 |
+
}
|
441 |
+
</script>
|
app/design/adminhtml/default/default/template/amosoft/custom-msg.phtml
ADDED
@@ -0,0 +1 @@
|
|
Â
|
1 |
+
<div class="custom-msg" id="messages"><?php echo $this->getMessagesBlock()->toHtml() ?></div>
|
app/design/adminhtml/default/default/template/amosoft/downloadable/downloadable.phtml
ADDED
@@ -0,0 +1,301 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
18 |
+
* versions in the future. If you wish to customize Magento for your
|
19 |
+
* needs please refer to http://www.magentocommerce.com for more information.
|
20 |
+
*
|
21 |
+
* @category design
|
22 |
+
* @package default_default
|
23 |
+
* @copyright Copyright (c) 2014 Magento Inc. (http://www.magentocommerce.com)
|
24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
25 |
+
*/
|
26 |
+
?>
|
27 |
+
<?php $_item = $this->getItem() ?>
|
28 |
+
<?php $this->setPriceDataObject($_item) ?>
|
29 |
+
<tr<?php if ($this->canDisplayGiftmessage()): ?> class="border"<?php endif; ?>>
|
30 |
+
<td class="giftmessage-single-item">
|
31 |
+
<?php if ($this->canDisplayContainer()): ?>
|
32 |
+
<div id="<?php echo $this->getHtmlId() ?>" class="item-container">
|
33 |
+
<?php endif; ?>
|
34 |
+
<div class="item-text">
|
35 |
+
<?php echo $this->getColumnHtml($_item, 'downloadable') ?>
|
36 |
+
</div>
|
37 |
+
<?php if ($this->canDisplayContainer()): ?>
|
38 |
+
</div>
|
39 |
+
<?php endif ?>
|
40 |
+
</td>
|
41 |
+
<?php
|
42 |
+
$ItemStatus = $_item->getAmosoftItemStatus();
|
43 |
+
?>
|
44 |
+
<td class="a-center"><?php echo $_item->getStatus() ?></td>
|
45 |
+
<td class="a-center">
|
46 |
+
<span id="<?php echo $_item->getItemId() ?>"><?php echo $ItemStatus; ?></span>
|
47 |
+
<?php if($ItemStatus!=""): ?>
|
48 |
+
<p><a id="edit" onclick="respondToClick(<?php echo $_item->getItemId() ?>)" style="cursor:pointer"><?php echo $this->__('Edit') ?></a></p>
|
49 |
+
<span id="change_status-<?php echo $_item->getItemId() ?>" style="display:none;">
|
50 |
+
<select name="status" id="status-<?php echo $_item->getItemId() ?>" onchange="respondToChange(this)">
|
51 |
+
<option value=""><?php echo $this->__('Please select') ?></option>
|
52 |
+
<?php foreach(Mage::helper('dropship')->getAmosoftOrderItemStatus() as $status):?>
|
53 |
+
<?php if($ItemStatus!=$status): ?>
|
54 |
+
<option value="<?php echo $status ?>"><?php echo $status ?></option>
|
55 |
+
<?php endif; ?>
|
56 |
+
<?php endforeach; ?>
|
57 |
+
</select>
|
58 |
+
</span>
|
59 |
+
<?php endif; ?>
|
60 |
+
</td>
|
61 |
+
<td class="a-center"><?php echo $_item->getLbVendorName() ?></td>
|
62 |
+
<td class="a-center"><?php echo $_item->getAmosoftVendorSku() ?></td>
|
63 |
+
<td class="a-right"><?php echo $this->displayPriceAttribute('original_price') ?></td>
|
64 |
+
<td class="a-right">
|
65 |
+
|
66 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceExclTax()): ?>
|
67 |
+
<span class="price-excl-tax">
|
68 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
|
69 |
+
<span class="label"><?php echo $this->__('Excl. Tax'); ?>:</span>
|
70 |
+
<?php endif; ?>
|
71 |
+
|
72 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales', $_item->getStoreId())): ?>
|
73 |
+
<?php
|
74 |
+
echo $this->displayPrices(
|
75 |
+
$_item->getBasePrice() + $_item->getBaseWeeeTaxAppliedAmount() + $_item->getBaseWeeeTaxDisposition(),
|
76 |
+
$_item->getPrice() + $_item->getWeeeTaxAppliedAmount() + $_item->getWeeeTaxDisposition()
|
77 |
+
);
|
78 |
+
?>
|
79 |
+
<?php else: ?>
|
80 |
+
<?php echo $this->displayPrices($_item->getBasePrice(), $_item->getPrice()) ?>
|
81 |
+
<?php endif; ?>
|
82 |
+
|
83 |
+
<?php if (Mage::helper('weee')->getApplied($_item)): ?>
|
84 |
+
<br/>
|
85 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales', $_item->getStoreId())): ?>
|
86 |
+
<small>
|
87 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
88 |
+
<span class="nobr"><?php echo $tax['title']; ?>
|
89 |
+
: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></span>
|
90 |
+
<?php endforeach; ?>
|
91 |
+
</small>
|
92 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales', $_item->getStoreId())): ?>
|
93 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
94 |
+
<span class="nobr"><small><?php echo $tax['title']; ?>
|
95 |
+
: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></small></span>
|
96 |
+
<?php endforeach; ?>
|
97 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales', $_item->getStoreId())): ?>
|
98 |
+
<small>
|
99 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
100 |
+
<span class="nobr"><?php echo $tax['title']; ?>
|
101 |
+
: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></span>
|
102 |
+
<?php endforeach; ?>
|
103 |
+
</small>
|
104 |
+
<?php endif; ?>
|
105 |
+
|
106 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales', $_item->getStoreId())): ?>
|
107 |
+
<br/>
|
108 |
+
<span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br/>
|
109 |
+
<?php
|
110 |
+
echo $this->displayPrices(
|
111 |
+
$_item->getBasePrice() + $_item->getBaseWeeeTaxAppliedAmount() + $_item->getBaseWeeeTaxDisposition(),
|
112 |
+
$_item->getPrice() + $_item->getWeeeTaxAppliedAmount() + $_item->getWeeeTaxDisposition()
|
113 |
+
);
|
114 |
+
?>
|
115 |
+
</span>
|
116 |
+
<?php endif; ?>
|
117 |
+
<?php endif; ?>
|
118 |
+
</span>
|
119 |
+
<br/>
|
120 |
+
<?php endif; ?>
|
121 |
+
|
122 |
+
<?php if ($this->helper('tax')->displaySalesPriceInclTax() || $this->helper('tax')->displaySalesBothPrices()): ?>
|
123 |
+
<span class="price-incl-tax">
|
124 |
+
<?php if ($this->helper('tax')->displayCartBothPrices()): ?>
|
125 |
+
<span class="label"><?php echo $this->helper('tax')->__('Incl. Tax'); ?>:</span>
|
126 |
+
<?php endif; ?>
|
127 |
+
<?php $weeeTaxInclTax = Mage::helper('weee')->getWeeeTaxInclTax($_item); ?>
|
128 |
+
<?php if ($weeeTaxInclTax && Mage::helper('weee')->typeOfDisplay($_item, 0, 'sales')): // including ?>
|
129 |
+
<?php echo $this->helper('checkout')->formatPrice($this->helper('checkout')->getPriceInclTax($_item) + $weeeTaxInclTax); ?>
|
130 |
+
<?php elseif ($weeeTaxInclTax && Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): // incl. + weee ?>
|
131 |
+
<?php echo $this->helper('checkout')->formatPrice($this->helper('checkout')->getPriceInclTax($_item) + $weeeTaxInclTax); ?>
|
132 |
+
<br/>
|
133 |
+
<small>
|
134 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
135 |
+
<span class="nobr"><?php echo $tax['title']; ?>
|
136 |
+
: <?php echo Mage::helper('core')->currency($tax['amount_incl_tax'], true, true); ?></span>
|
137 |
+
<br/>
|
138 |
+
<?php endforeach; ?>
|
139 |
+
</small>
|
140 |
+
<?php elseif ($_item->getWeeeTaxAppliedAmount() && Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): // excl. + weee + final ?>
|
141 |
+
<?php echo $this->helper('checkout')->formatPrice($this->helper('checkout')->getPriceInclTax($_item)); ?>
|
142 |
+
<br/>
|
143 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
144 |
+
<span class="nobr"><small><?php echo $tax['title']; ?>
|
145 |
+
: <?php echo Mage::helper('core')->currency($tax['amount_incl_tax'], true, true); ?></small></span>
|
146 |
+
<br/>
|
147 |
+
<?php endforeach; ?>
|
148 |
+
<span class="nobr">
|
149 |
+
<?php echo Mage::helper('weee')->__('Total'); ?>:
|
150 |
+
<?php echo $this->helper('checkout')->formatPrice($this->helper('checkout')->getPriceInclTax($_item) + $weeeTaxInclTax); ?>
|
151 |
+
</span>
|
152 |
+
<?php else: // excl. ?>
|
153 |
+
<?php echo $this->helper('checkout')->formatPrice($this->helper('checkout')->getPriceInclTax($_item)); ?>
|
154 |
+
<?php endif; ?>
|
155 |
+
</span>
|
156 |
+
<?php endif; ?>
|
157 |
+
</td>
|
158 |
+
<td><?php echo $this->getColumnHtml($_item, 'qty') ?></td>
|
159 |
+
|
160 |
+
<td class="a-right">
|
161 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceExclTax()): ?>
|
162 |
+
<span class="price-excl-tax">
|
163 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
|
164 |
+
<span class="label"><?php echo $this->__('Excl. Tax'); ?>:</span>
|
165 |
+
<?php endif; ?>
|
166 |
+
|
167 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales', $_item->getStoreId())): ?>
|
168 |
+
<?php
|
169 |
+
echo $this->displayPrices(
|
170 |
+
$_item->getBaseRowTotal() + $_item->getBaseWeeeTaxAppliedRowAmount() + $_item->getBaseWeeeTaxRowDisposition(),
|
171 |
+
$_item->getRowTotal() + $_item->getWeeeTaxAppliedRowAmount() + $_item->getWeeeTaxRowDisposition()
|
172 |
+
);
|
173 |
+
?>
|
174 |
+
<?php else: ?>
|
175 |
+
<?php echo $this->displayPrices($_item->getBaseRowTotal(), $_item->getRowTotal()) ?>
|
176 |
+
<?php endif; ?>
|
177 |
+
|
178 |
+
<?php if (Mage::helper('weee')->getApplied($_item)): ?>
|
179 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales', $_item->getStoreId())): ?>
|
180 |
+
<small>
|
181 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
182 |
+
<span class="nobr"><?php echo $tax['title']; ?>
|
183 |
+
: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></span>
|
184 |
+
<?php endforeach; ?>
|
185 |
+
</small>
|
186 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales', $_item->getStoreId())): ?>
|
187 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
188 |
+
<span class="nobr"><small><?php echo $tax['title']; ?>
|
189 |
+
: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></small></span>
|
190 |
+
<?php endforeach; ?>
|
191 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales', $_item->getStoreId())): ?>
|
192 |
+
<small>
|
193 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
194 |
+
<span class="nobr"><?php echo $tax['title']; ?>
|
195 |
+
: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></span>
|
196 |
+
<?php endforeach; ?>
|
197 |
+
</small>
|
198 |
+
<?php endif; ?>
|
199 |
+
|
200 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales', $_item->getStoreId())): ?>
|
201 |
+
<br/>
|
202 |
+
<span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br/>
|
203 |
+
<?php
|
204 |
+
echo $this->displayPrices(
|
205 |
+
$_item->getBaseRowTotal() + $_item->getBaseWeeeTaxAppliedRowAmount() + $_item->getBaseWeeeTaxRowDisposition(),
|
206 |
+
$_item->getRowTotal() + $_item->getWeeeTaxAppliedRowAmount() + $_item->getWeeeTaxRowDisposition()
|
207 |
+
);
|
208 |
+
?>
|
209 |
+
</span>
|
210 |
+
<?php endif; ?>
|
211 |
+
<?php endif; ?>
|
212 |
+
</span>
|
213 |
+
<br/>
|
214 |
+
<?php endif; ?>
|
215 |
+
|
216 |
+
<?php if ($this->helper('tax')->displayCartPriceInclTax() || $this->helper('tax')->displayCartBothPrices()): ?>
|
217 |
+
<span class="price-incl-tax">
|
218 |
+
|
219 |
+
<?php if ($this->helper('tax')->displayCartBothPrices()): ?>
|
220 |
+
<span class="label"><?php echo $this->helper('tax')->__('Incl. Tax'); ?>:</span>
|
221 |
+
<?php endif; ?>
|
222 |
+
|
223 |
+
<?php if ($_item->getWeeeTaxAppliedRowAmount() && Mage::helper('weee')->typeOfDisplay($_item, 0, 'sales')): // including ?>
|
224 |
+
<?php echo $this->helper('checkout')->formatPrice($this->helper('checkout')->getSubtotalInclTax($_item) + Mage::helper('weee')->getRowWeeeTaxInclTax($_item)); ?>
|
225 |
+
<?php elseif ($_item->getWeeeTaxAppliedRowAmount() && Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): // incl. + weee ?>
|
226 |
+
<?php echo $this->helper('checkout')->formatPrice($this->helper('checkout')->getSubtotalInclTax($_item) + Mage::helper('weee')->getRowWeeeTaxInclTax($_item)); ?>
|
227 |
+
<br/>
|
228 |
+
<small>
|
229 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
230 |
+
<span class="nobr"><?php echo $tax['title']; ?>
|
231 |
+
: <?php echo Mage::helper('core')->currency($tax['row_amount_incl_tax'], true, true); ?></span>
|
232 |
+
<br/>
|
233 |
+
<?php endforeach; ?>
|
234 |
+
</small>
|
235 |
+
<?php elseif ($_item->getWeeeTaxAppliedRowAmount() && Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): // excl. + weee + final ?>
|
236 |
+
<?php echo $this->helper('checkout')->formatPrice($this->helper('checkout')->getSubtotalInclTax($_item)); ?>
|
237 |
+
<br/>
|
238 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
239 |
+
<span class="nobr"><small><?php echo $tax['title']; ?>
|
240 |
+
: <?php echo Mage::helper('core')->currency($tax['row_amount_incl_tax'], true, true); ?></small></span>
|
241 |
+
<br/>
|
242 |
+
<?php endforeach; ?>
|
243 |
+
<span class="nobr">
|
244 |
+
<?php echo Mage::helper('weee')->__('Total'); ?>:
|
245 |
+
<?php echo $this->helper('checkout')->formatPrice($this->helper('checkout')->getSubtotalInclTax($_item) + Mage::helper('weee')->getRowWeeeTaxInclTax($_item)); ?>
|
246 |
+
</span>
|
247 |
+
<?php else: // excl. ?>
|
248 |
+
<?php echo $this->displaySubtotalInclTax($_item); ?>
|
249 |
+
<?php endif; ?>
|
250 |
+
|
251 |
+
<!--
|
252 |
+
|
253 |
+
<?php if ($this->helper('tax')->displayCartBothPrices()): ?>
|
254 |
+
<span class="label"><?php echo $this->helper('tax')->__('Incl. Tax'); ?>:</span>
|
255 |
+
<?php endif; ?>
|
256 |
+
<?php echo $this->displaySubtotalInclTax($_item); ?>
|
257 |
+
-->
|
258 |
+
</span>
|
259 |
+
<?php endif; ?>
|
260 |
+
</td>
|
261 |
+
<td class="a-right"><?php echo $this->displayPriceAttribute('tax_amount') ?></td>
|
262 |
+
<td class="a-right"><?php echo $this->displayTaxPercent($_item) ?></td>
|
263 |
+
<td class="a-right"><?php echo $this->displayPriceAttribute('discount_amount') ?></td>
|
264 |
+
<td class="a-right last">
|
265 |
+
<?php echo $this->displayPrices(
|
266 |
+
$_item->getBaseRowTotal() - $_item->getBaseDiscountAmount() + $_item->getBaseTaxAmount() + $_item->getBaseHiddenTaxAmount() + $_item->getBaseWeeeTaxAppliedRowAmount(),
|
267 |
+
$_item->getRowTotal() - $_item->getDiscountAmount() + $_item->getTaxAmount() + $_item->getHiddenTaxAmount() + $_item->getWeeeTaxAppliedRowAmount()
|
268 |
+
); ?>
|
269 |
+
</td>
|
270 |
+
</tr>
|
271 |
+
<script type="text/javascript">
|
272 |
+
|
273 |
+
function respondToClick(id) {
|
274 |
+
$('change_status-'+id).show();
|
275 |
+
}
|
276 |
+
|
277 |
+
function respondToChange(obj) {
|
278 |
+
var itemId = obj.id.split('-');
|
279 |
+
new Ajax.Request('<?php echo $this->getUrl('amosoft/adminhtml_amosoft/changeStatusAjax') ?>', {
|
280 |
+
parameters: {
|
281 |
+
'amosoft_item_id': itemId[1],
|
282 |
+
'amosoft_item_status': obj.value
|
283 |
+
},
|
284 |
+
method: 'post',
|
285 |
+
onSuccess: success,
|
286 |
+
onFailure: fail
|
287 |
+
});
|
288 |
+
}
|
289 |
+
|
290 |
+
function success(response){
|
291 |
+
var data = response.responseText.evalJSON();
|
292 |
+
var id = data.amosoft_item_id;
|
293 |
+
$(id).innerHTML = data.amosoft_item_status;
|
294 |
+
alert(data.msg);
|
295 |
+
$('change_status-'+id).hide();
|
296 |
+
}
|
297 |
+
|
298 |
+
function fail(response){
|
299 |
+
alert("Request cannot be completed");
|
300 |
+
}
|
301 |
+
</script>
|
app/design/adminhtml/default/default/template/amosoft/html/pager.phtml
ADDED
@@ -0,0 +1,124 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
18 |
+
* versions in the future. If you wish to customize Magento for your
|
19 |
+
* needs please refer to http://www.magentocommerce.com for more information.
|
20 |
+
*
|
21 |
+
* @category design
|
22 |
+
* @package base_default
|
23 |
+
* @copyright Copyright (c) 2014 Magento Inc. (http://www.magentocommerce.com)
|
24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
25 |
+
*/
|
26 |
+
?>
|
27 |
+
<?php
|
28 |
+
/**
|
29 |
+
* Pager template
|
30 |
+
*
|
31 |
+
* @see Mage_Page_Block_Html_Pager
|
32 |
+
*/
|
33 |
+
?>
|
34 |
+
<?php if($this->getCollection()->getSize()): ?>
|
35 |
+
|
36 |
+
<?php if($this->getUseContainer()): ?>
|
37 |
+
<div class="pager">
|
38 |
+
<?php endif ?>
|
39 |
+
|
40 |
+
<?php if($this->getShowAmounts()): ?>
|
41 |
+
<p class="amount">
|
42 |
+
<?php if($this->getLastPageNum()>1): ?>
|
43 |
+
<?php echo $this->__('Items %s to %s of %s total', $this->getFirstNum(), $this->getLastNum(), $this->getTotalNum()) ?>
|
44 |
+
<?php else: ?>
|
45 |
+
<strong><?php echo $this->__('%s Item(s)', $this->getTotalNum()) ?></strong>
|
46 |
+
<?php endif; ?>
|
47 |
+
</p>
|
48 |
+
<?php endif ?>
|
49 |
+
|
50 |
+
<?php if($this->getShowPerPage()): ?>
|
51 |
+
<div class="limiter">
|
52 |
+
<label><?php echo $this->__('Show') ?></label>
|
53 |
+
<select onchange="setLocation(this.value)">
|
54 |
+
<?php foreach ($this->getAvailableLimit() as $_key=>$_limit): ?>
|
55 |
+
<option value="<?php echo $this->getLimitUrl($_key) ?>"<?php if($this->isLimitCurrent($_key)): ?> selected="selected"<?php endif ?>>
|
56 |
+
<?php echo $_limit ?>
|
57 |
+
</option>
|
58 |
+
<?php endforeach; ?>
|
59 |
+
</select> <?php echo $this->__('per page') ?>
|
60 |
+
</div>
|
61 |
+
<?php endif ?>
|
62 |
+
|
63 |
+
<?php if($this->getLastPageNum()>1): ?>
|
64 |
+
<div class="pages">
|
65 |
+
<strong><?php echo $this->__('Page:') ?></strong>
|
66 |
+
<ol>
|
67 |
+
<?php if (!$this->isFirstPage()): ?>
|
68 |
+
<li>
|
69 |
+
<a class="previous<?php if(!$this->getAnchorTextForPrevious()): ?> i-previous<?php endif;?>" href="<?php echo $this->getPreviousPageUrl() ?>" title="<?php echo $this->__('Previous') ?>">
|
70 |
+
<?php if(!$this->getAnchorTextForPrevious()): ?>
|
71 |
+
<img src="<?php echo $this->getSkinUrl('images/pager_arrow_left.gif') ?>" alt="<?php echo $this->__('Previous') ?>" class="v-middle" />
|
72 |
+
<?php else: ?>
|
73 |
+
<?php echo $this->getAnchorTextForPrevious() ?>
|
74 |
+
<?php endif;?>
|
75 |
+
</a>
|
76 |
+
</li>
|
77 |
+
<?php endif;?>
|
78 |
+
|
79 |
+
<?php if ($this->canShowFirst()): ?>
|
80 |
+
<li><a class="first" href="<?php echo $this->getFirstPageUrl() ?>">1</a></li>
|
81 |
+
<?php endif;?>
|
82 |
+
|
83 |
+
<?php if ($this->canShowPreviousJump()): ?>
|
84 |
+
<li><a class="previous_jump" title="" href="<?php echo $this->getPreviousJumpUrl() ?>">...</a></li>
|
85 |
+
<?php endif;?>
|
86 |
+
|
87 |
+
<?php foreach ($this->getFramePages() as $_page): ?>
|
88 |
+
<?php if ($this->isPageCurrent($_page)): ?>
|
89 |
+
<li class="current"><?php echo $_page ?></li>
|
90 |
+
<?php else: ?>
|
91 |
+
<li><a href="<?php echo $this->getPageUrl($_page) ?>"><?php echo $_page ?></a></li>
|
92 |
+
<?php endif;?>
|
93 |
+
<?php endforeach;?>
|
94 |
+
|
95 |
+
|
96 |
+
<?php if ($this->canShowNextJump()): ?>
|
97 |
+
<li><a class="next_jump" title="" href="<?php echo $this->getNextJumpUrl() ?>">...</a></li>
|
98 |
+
<?php endif;?>
|
99 |
+
|
100 |
+
<?php if ($this->canShowLast()): ?>
|
101 |
+
<li><a class="last" href="<?php echo $this->getLastPageUrl() ?>"><?php echo $this->getLastPageNum() ?></a></li>
|
102 |
+
<?php endif;?>
|
103 |
+
|
104 |
+
<?php if (!$this->isLastPage()): ?>
|
105 |
+
<li>
|
106 |
+
<a class="next<?php if(!$this->getAnchorTextForNext()): ?> i-next<?php endif; ?>" href="<?php echo $this->getNextPageUrl() ?>" title="<?php echo $this->__('Next') ?>">
|
107 |
+
<?php if(!$this->getAnchorTextForNext()): ?>
|
108 |
+
<img src="<?php echo $this->getSkinUrl('images/pager_arrow_right.gif') ?>" alt="<?php echo $this->__('Next') ?>" class="v-middle" />
|
109 |
+
<?php else: ?>
|
110 |
+
<?php echo $this->getAnchorTextForNext() ?>
|
111 |
+
<?php endif;?>
|
112 |
+
</a>
|
113 |
+
</li>
|
114 |
+
<?php endif;?>
|
115 |
+
</ol>
|
116 |
+
|
117 |
+
</div>
|
118 |
+
<?php endif; ?>
|
119 |
+
|
120 |
+
<?php if($this->getUseContainer()): ?>
|
121 |
+
</div>
|
122 |
+
<?php endif ?>
|
123 |
+
|
124 |
+
<?php endif ?>
|
app/design/adminhtml/default/default/template/amosoft/import/form/after.phtml
ADDED
@@ -0,0 +1,14 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
?>
|
9 |
+
<div class="entry-edit" id="import_validation_container" style="display:none;">
|
10 |
+
<div class="entry-edit-head">
|
11 |
+
<h4 class="icon-head head-edit-form fieldset-legend" id="import_validation_container_header"><?php echo $this->__('Validation Results'); ?></h4>
|
12 |
+
</div>
|
13 |
+
<div id="import_validation_messages" class="fieldset "><!-- --></div>
|
14 |
+
</div>
|
app/design/adminhtml/default/default/template/amosoft/import/form/before.phtml
ADDED
@@ -0,0 +1,126 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
?>
|
9 |
+
<script type="text/javascript">
|
10 |
+
//<![CDATA[
|
11 |
+
/**
|
12 |
+
* Name and ID for iframe for data POST-ing.
|
13 |
+
*
|
14 |
+
* @var string
|
15 |
+
*/
|
16 |
+
varienForm.prototype.ifrElemName = 'import_post_target_frame';
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Post form data to dynamic iframe.
|
20 |
+
*
|
21 |
+
* @param string newActionUrl OPTIONAL Change form action to this if specified
|
22 |
+
* @return void
|
23 |
+
*/
|
24 |
+
varienForm.prototype.postToFrame = function(newActionUrl)
|
25 |
+
{
|
26 |
+
if(this.validate()){
|
27 |
+
// create dynamic frame
|
28 |
+
if (!$(this.ifrElemName)) {
|
29 |
+
$('html-body').insert({
|
30 |
+
bottom:'<iframe name="' + this.ifrElemName + '" id="' + this.ifrElemName + '" style="display:none;"/>'
|
31 |
+
});
|
32 |
+
}
|
33 |
+
|
34 |
+
// show mask, temporary set new target and submit form
|
35 |
+
var loadingMask = $('loading-mask');
|
36 |
+
var formElem = $(this.formId);
|
37 |
+
var oldTarget = formElem.target;
|
38 |
+
var oldAction = formElem.action;
|
39 |
+
|
40 |
+
Element.clonePosition(loadingMask, $$('#html-body .wrapper')[0], {offsetLeft:-2})
|
41 |
+
toggleSelectsUnderBlock(loadingMask, false);
|
42 |
+
loadingMask.show();
|
43 |
+
setLoaderPosition();
|
44 |
+
formElem.target = this.ifrElemName;
|
45 |
+
|
46 |
+
if (newActionUrl) {
|
47 |
+
formElem.action = newActionUrl;
|
48 |
+
}
|
49 |
+
formElem.action += (formElem.action.lastIndexOf('?') != -1 ? '&' : '?')
|
50 |
+
+ 'form_key=' + encodeURIComponent(formElem.form_key.value);
|
51 |
+
this._submit();
|
52 |
+
formElem.target = oldTarget;
|
53 |
+
formElem.action = oldAction;
|
54 |
+
}
|
55 |
+
};
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Actions after data post complete. Hide load mask, remove iframe, run response processing method.
|
59 |
+
*
|
60 |
+
* @param object response
|
61 |
+
* @return void
|
62 |
+
*/
|
63 |
+
varienForm.prototype.postToFrameComplete = function(response)
|
64 |
+
{
|
65 |
+
var loadingMask = $('loading-mask');
|
66 |
+
$(this.ifrElemName).remove();
|
67 |
+
toggleSelectsUnderBlock(loadingMask, true);
|
68 |
+
loadingMask.hide();
|
69 |
+
this.postToFrameProcessResponse(response);
|
70 |
+
};
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Process response JSON.
|
74 |
+
*
|
75 |
+
* @param object response
|
76 |
+
* @return void
|
77 |
+
*/
|
78 |
+
varienForm.prototype.postToFrameProcessResponse = function(response)
|
79 |
+
{
|
80 |
+
if ('object' != typeof(response)) {
|
81 |
+
return alert('Invalid response');
|
82 |
+
}
|
83 |
+
$H(response).each(function(pair) {
|
84 |
+
switch (pair.key) {
|
85 |
+
case 'show':
|
86 |
+
case 'clear':
|
87 |
+
case 'hide':
|
88 |
+
$H(pair.value).each(function(val) {if ($(val.value)) $(val.value)[pair.key]();});
|
89 |
+
break;
|
90 |
+
case 'innerHTML':
|
91 |
+
case 'value':
|
92 |
+
$H(pair.value).each(function(val) {
|
93 |
+
var el = $(val.key);
|
94 |
+
if (el) {
|
95 |
+
el[pair.key] = val.value;
|
96 |
+
// if element does not visible
|
97 |
+
el.offsetWidth || el.up('div.entry-edit').show();
|
98 |
+
}
|
99 |
+
});
|
100 |
+
break;
|
101 |
+
case 'removeClassName':
|
102 |
+
case 'addClassName':
|
103 |
+
$H(pair.value).each(function(val) {if ($(val.key)) $(val.key)[pair.key](val.value);});
|
104 |
+
break;
|
105 |
+
default:
|
106 |
+
alert(pair.key + ': ' + pair.value);
|
107 |
+
break;
|
108 |
+
}
|
109 |
+
});
|
110 |
+
};
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Send form data to Start action when file is validated.
|
114 |
+
*
|
115 |
+
* @param string newActionUrl
|
116 |
+
* @param string sourceFileField
|
117 |
+
* @return void
|
118 |
+
*/
|
119 |
+
varienForm.prototype.startImport = function(newActionUrl, sourceFileField)
|
120 |
+
{
|
121 |
+
$(sourceFileField).removeClassName('required-entry');
|
122 |
+
this.postToFrame(newActionUrl);
|
123 |
+
$(sourceFileField).addClassName('required-entry');
|
124 |
+
};
|
125 |
+
//]]>
|
126 |
+
</script>
|
app/design/adminhtml/default/default/template/amosoft/import/frame/result.phtml
ADDED
@@ -0,0 +1,31 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
18 |
+
* versions in the future. If you wish to customize Magento for your
|
19 |
+
* needs please refer to http://www.magentocommerce.com for more information.
|
20 |
+
*
|
21 |
+
* @category design
|
22 |
+
* @package default_default
|
23 |
+
* @copyright Copyright (c) 2014 Magento Inc. (http://www.magentocommerce.com)
|
24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
25 |
+
*/
|
26 |
+
?>
|
27 |
+
<script type='text/javascript'>
|
28 |
+
//<![CDATA[
|
29 |
+
top.editForm.postToFrameComplete(<?php echo $this->getResponseJson() ?>);
|
30 |
+
//]]>
|
31 |
+
</script>
|
app/design/adminhtml/default/default/template/amosoft/inline-edit.phtml
ADDED
@@ -0,0 +1,89 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
?>
|
9 |
+
|
10 |
+
|
11 |
+
<script type="text/javascript">
|
12 |
+
//<![CDATA[
|
13 |
+
|
14 |
+
function saveRanking()
|
15 |
+
{
|
16 |
+
|
17 |
+
|
18 |
+
var arrDropshipParameter = $H({});
|
19 |
+
var arrNonDropshipParameter = $H({});
|
20 |
+
var arrVendorNameParameter = $H({});
|
21 |
+
var arrVendorProductLinkParameter = $H({});
|
22 |
+
arrDropshipParameter.set(JSON.stringify(arrDropship));
|
23 |
+
arrNonDropshipParameter.set(JSON.stringify(arrNonDropship));
|
24 |
+
arrVendorNameParameter.set(JSON.stringify(arrVendorName));
|
25 |
+
arrVendorProductLinkParameter.set(JSON.stringify(arrVendorProductLink));
|
26 |
+
|
27 |
+
|
28 |
+
|
29 |
+
|
30 |
+
var actionUrl = '<?php echo Mage::getSingleton('adminhtml/url')->getUrl('*/*/saveranking') ?>'
|
31 |
+
var formdataStart = "<form id='edit_form_ranking' action='"+actionUrl+"' method='post'></form>";
|
32 |
+
var formDataEnd = "<div><input name='partent_save_table_input' id='partent_save_table_input' type='hidden' value=''><input name='dropship_data' id='dropship_data' type='hidden' value=''><input name='nondropship_data' id='nondropship_data' type='hidden' value=''><input name='vendorname_data' id='vendorname_data' type='hidden' value=''><input name='vendorproductlink_data' id='vendorproductlink_data' type='hidden' value=''> <input name='form_key' type='hidden' value='<?php echo Mage::getSingleton('core/session')->getFormKey() ?>' /></div>";
|
33 |
+
|
34 |
+
if(!$('edit_form_ranking'))
|
35 |
+
{
|
36 |
+
$('panel').insert(formdataStart);
|
37 |
+
$('edit_form_ranking').insert(formDataEnd);
|
38 |
+
}
|
39 |
+
|
40 |
+
|
41 |
+
|
42 |
+
$('dropship_data').value = arrDropshipParameter.toQueryString();
|
43 |
+
$('nondropship_data').value = arrNonDropshipParameter.toQueryString();
|
44 |
+
$('vendorname_data').value = arrVendorNameParameter.toQueryString();
|
45 |
+
$('vendorproductlink_data').value = arrVendorProductLinkParameter.toQueryString();
|
46 |
+
}
|
47 |
+
function setTableName(name){
|
48 |
+
|
49 |
+
$('partent_save_table_input').value = name;
|
50 |
+
}
|
51 |
+
|
52 |
+
function submitPartentFrom(){
|
53 |
+
closePopup();
|
54 |
+
$('edit_form_ranking').submit();
|
55 |
+
}
|
56 |
+
|
57 |
+
function showPopup(sUrl) {
|
58 |
+
oPopup = new Window({
|
59 |
+
id:'popup_window',
|
60 |
+
className: 'magento',
|
61 |
+
url: sUrl,
|
62 |
+
width: 350,
|
63 |
+
height: 100,
|
64 |
+
minimizable: false,
|
65 |
+
maximizable: false,
|
66 |
+
showEffectOptions: {
|
67 |
+
duration: 0.4
|
68 |
+
},
|
69 |
+
hideEffectOptions:{
|
70 |
+
duration: 0.4
|
71 |
+
},
|
72 |
+
destroyOnClose: true
|
73 |
+
});
|
74 |
+
oPopup.setZIndex(100);
|
75 |
+
oPopup.showCenter(true);
|
76 |
+
}
|
77 |
+
|
78 |
+
function closePopup() {
|
79 |
+
Windows.close('popup_window');
|
80 |
+
}
|
81 |
+
|
82 |
+
function saveRankingTable()
|
83 |
+
{
|
84 |
+
showPopup('<?php echo Mage::getSingleton('adminhtml/url')->getUrl('*/*/popup',array('_query'=>array('issuccessfull' => ''))) ?>')
|
85 |
+
}
|
86 |
+
|
87 |
+
|
88 |
+
//]]>
|
89 |
+
</script>
|
app/design/adminhtml/default/default/template/amosoft/item_order_history.phtml
ADDED
@@ -0,0 +1,37 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
?>
|
9 |
+
<?php
|
10 |
+
$amosoftItemDescSort = $this->getHistory();
|
11 |
+
if(is_array($amosoftItemDescSort))
|
12 |
+
krsort($amosoftItemDescSort);
|
13 |
+
?>
|
14 |
+
<div class="entry-edit">
|
15 |
+
<fieldset>
|
16 |
+
<ul class="note-list">
|
17 |
+
<?php if($this->getHistory()) : ?>
|
18 |
+
<?php foreach ($amosoftItemDescSort as $item): ?>
|
19 |
+
<li>
|
20 |
+
<strong><?php echo Mage::helper('core')->formatDate($item['date'], 'medium', false);//echo $item['date']; ?></strong>
|
21 |
+
<?php echo Mage::helper('core')->formatTime($item['date'], 'medium', false); ?><span class="separator">|</span>
|
22 |
+
<strong><?php echo $item['item_status']; ?></strong>
|
23 |
+
<span class="separator">|</span>
|
24 |
+
<small>
|
25 |
+
<strong class="subdue">
|
26 |
+
<?php echo Mage::getModel('sales/order_status')->load($item['order_status'], 'status')->getStoreLabel(); ?>
|
27 |
+
<img src="<?php echo $this->getSkinUrl('images/ico_success.gif') ?>" width="16px" height="16px" alt="" />
|
28 |
+
</strong>
|
29 |
+
</small>
|
30 |
+
</li>
|
31 |
+
<?php endforeach; ?>
|
32 |
+
<?php else : ?>
|
33 |
+
<?php echo $this->__('No Records Found')?>
|
34 |
+
<?php endif; ?>
|
35 |
+
</ul>
|
36 |
+
</fieldset>
|
37 |
+
</div>
|
app/design/adminhtml/default/default/template/amosoft/popup.phtml
ADDED
@@ -0,0 +1,62 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
?>
|
9 |
+
<!DOCTYPE html>
|
10 |
+
<html>
|
11 |
+
<head>
|
12 |
+
<title>Payment form</title>
|
13 |
+
<meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>
|
14 |
+
<script type="text/javascript" src="<?php echo $this->getJsUrl() ?>prototype/prototype.js"></script>
|
15 |
+
<script type="text/javascript" src="<?php echo $this->getJsUrl() ?>prototype/validation.js"></script>
|
16 |
+
<script type="text/javascript" src="<?php echo $this->getJsUrl() ?>mage/adminhtml/form.js"></script>
|
17 |
+
<style>
|
18 |
+
.validation-advice {
|
19 |
+
clear: both;
|
20 |
+
min-height: 15px;
|
21 |
+
margin: 3px 0 5px 9px;
|
22 |
+
padding-left: 135px;
|
23 |
+
font-size: .95em;
|
24 |
+
font-weight: bold;
|
25 |
+
line-height: 1.25em;
|
26 |
+
color: #D40707;
|
27 |
+
|
28 |
+
}
|
29 |
+
</style>
|
30 |
+
|
31 |
+
</head>
|
32 |
+
<body style="background-color:#fff9e9">
|
33 |
+
<div id="messages"></div>
|
34 |
+
|
35 |
+
<div>
|
36 |
+
<input name='form_key' type='hidden' value='<?php echo Mage::getSingleton('core/session')->getFormKey() ?>' />
|
37 |
+
<label class="label-msg">Please enter a name for the supplier Ranking History entry </label><span><input id="save_table_input" class="required-entry" name="save_table" value=""></span>
|
38 |
+
<div class="validation-advice" id="error-input" style="display: none;">This is a required field.</div>
|
39 |
+
|
40 |
+
<button style="margin-left:100px" type="button" id="save_table" onclick="submitForm()" >Save Table</button>
|
41 |
+
<span><button type="button" id="save_table_close" name="save_table_close" value="save table" onclick="parent.closePopup();">Close</button></span>
|
42 |
+
|
43 |
+
</div>
|
44 |
+
|
45 |
+
|
46 |
+
<script type="text/javascript">
|
47 |
+
function submitForm()
|
48 |
+
{
|
49 |
+
if($('save_table_input').value == '')
|
50 |
+
{
|
51 |
+
return $('error-input').setStyle({display:'block'})
|
52 |
+
}
|
53 |
+
$('save_table').setAttribute('disabled','disabled');
|
54 |
+
$('save_table_close').setAttribute('disabled','disabled');
|
55 |
+
$('error-input').setStyle({display:'none'})
|
56 |
+
parent.saveRanking();
|
57 |
+
parent.setTableName($('save_table_input').value);
|
58 |
+
parent.submitPartentFrom();
|
59 |
+
}
|
60 |
+
</script>
|
61 |
+
</body>
|
62 |
+
</html>
|
app/design/adminhtml/default/default/template/amosoft/process-profile.phtml
ADDED
@@ -0,0 +1,290 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
?>
|
9 |
+
<style type="text/css" >
|
10 |
+
ul { list-style-type:none; padding:0; margin:0; }
|
11 |
+
li { margin-left:0; border:1px solid #ccc; margin:2px; padding:2px 2px 2px 2px; font:normal 12px sans-serif; }
|
12 |
+
img { margin-right:5px; }
|
13 |
+
</style>
|
14 |
+
<script type="text/javascript">
|
15 |
+
var FORM_KEY = "<?php echo $this->getFormKey();?>";
|
16 |
+
if (typeof auto_scroll=='undefined') {
|
17 |
+
var auto_scroll = window.setInterval(console_scroll, 10);
|
18 |
+
}
|
19 |
+
function console_scroll()
|
20 |
+
{
|
21 |
+
if (typeof top.$ != 'function') {
|
22 |
+
return;
|
23 |
+
}
|
24 |
+
document.body.scrollTop+=100;
|
25 |
+
}
|
26 |
+
</script>
|
27 |
+
<?php if($this->isManualUploadRunning()){ ?>
|
28 |
+
<ul>
|
29 |
+
<li>
|
30 |
+
<img src="<?php echo $this->getSkinUrl('images/error_msg_icon.gif');?>" class="v-middle" style="margin-right:5px"/>
|
31 |
+
<?php echo $this->__("Manual upload is currently running please try again later");?>
|
32 |
+
</li>
|
33 |
+
</ul>
|
34 |
+
<?php }else{ ?>
|
35 |
+
<ul>
|
36 |
+
<li>
|
37 |
+
<?php if ($this->getBulkVendorCode()):?>
|
38 |
+
<img src="<?php echo $this->getSkinUrl('images/note_msg_icon.gif')?>" class="v-middle" style="margin-right:5px"/>
|
39 |
+
<?php echo $this->__("Starting bulk profile execution, please wait...");?>
|
40 |
+
</li>
|
41 |
+
<li style="background-color:#FFD;">
|
42 |
+
<img src="<?php echo $this->getSkinUrl('images/fam_bullet_error.gif');?>" class="v-middle" style="margin-right:5px"/>
|
43 |
+
<?php echo $this->__("Warning: Please do not close the window during importing/exporting data");?>
|
44 |
+
<?php else:?>
|
45 |
+
<img src="<?php echo $this->getSkinUrl('images/error_msg_icon.gif');?>" class="v-middle" style="margin-right:5px"/>
|
46 |
+
<?php echo $this->__("No profile loaded...");?>
|
47 |
+
<?php endif;?>
|
48 |
+
</li>
|
49 |
+
</ul>
|
50 |
+
|
51 |
+
<?php if ($this->getBulkVendorCode()):?>
|
52 |
+
<ul id="profileRows">
|
53 |
+
<li id="liNoproduct" style="display:none;">
|
54 |
+
<img src="<?php echo $this->getSkinUrl('images/note_msg_icon.gif');?>" class="v-middle" style="margin-right:5px"/>
|
55 |
+
<?php echo $this->__("No simple product found");?>
|
56 |
+
</li>
|
57 |
+
<li id="liFinished" style="display:none;">
|
58 |
+
<img src="<?php echo $this->getSkinUrl('images/note_msg_icon.gif');?>" class="v-middle" style="margin-right:5px"/>
|
59 |
+
<?php echo $this->__("Finished bulk profile execution.");?>
|
60 |
+
</li>
|
61 |
+
<li id="liFinishederror" style="display:none;">
|
62 |
+
<img src="<?php echo $this->getSkinUrl('images/fam_bullet_error.gif');?>" class="v-middle" style="margin-right:5px"/>
|
63 |
+
<?php echo $this->__("Bulk profile execution hault due to error");?>
|
64 |
+
</li>
|
65 |
+
<li id="get_csv" style="display:none;">
|
66 |
+
<img src="<?php echo $this->getSkinUrl('images/note_msg_icon.gif');?>" class="v-middle" style="margin-right:5px"/>
|
67 |
+
<button onclick = "genrateCSV()"><?php echo $this->__("Download Failed Sku Csv");?></button>
|
68 |
+
</li>
|
69 |
+
<li id="get_csv_success" style="display:none;">
|
70 |
+
<img src="<?php echo $this->getSkinUrl('images/note_msg_icon.gif');?>" class="v-middle" style="margin-right:5px"/>
|
71 |
+
<button onclick = "genrateCSV('success')"><?php echo $this->__("Download Success Sku Csv");?></button>
|
72 |
+
</li>
|
73 |
+
</ul>
|
74 |
+
<?php if ($this->getBatchModel() > 0):?>
|
75 |
+
|
76 |
+
<script type="text/javascript">
|
77 |
+
var countOfStartedProfiles = 0;
|
78 |
+
var countOfUpdated = 0;
|
79 |
+
var countOfError = 0;
|
80 |
+
var importData = [];
|
81 |
+
var totalRecords = <?php echo $this->getBatchItemsCount();?>;
|
82 |
+
var config= <?php echo $this->getBatchConfigJson();?>;
|
83 |
+
var errorSku = [];
|
84 |
+
var successSku = [];
|
85 |
+
var successSkuCount = 0;
|
86 |
+
</script>
|
87 |
+
<script type="text/javascript">
|
88 |
+
|
89 |
+
window.onbeforeunload = function (evt) {
|
90 |
+
if(importData.length == 0){
|
91 |
+
return null;
|
92 |
+
}
|
93 |
+
new Ajax.Request("<?php echo $this->getUrl('*/*/batchFinish', array('exeuctionTerminated' => 1));?>", {
|
94 |
+
method: "post",
|
95 |
+
parameters: {form_key: FORM_KEY,sucees_sku:successSkuCount,errorSkuCount:errorSku.length,amosoft_vendor_code:'<?php echo Mage::registry('bulk_vendor_Code') ?>'},
|
96 |
+
asynchronous : true,
|
97 |
+
});
|
98 |
+
|
99 |
+
return;
|
100 |
+
}
|
101 |
+
|
102 |
+
function addImportData(data) {
|
103 |
+
importData.push(data);
|
104 |
+
}
|
105 |
+
|
106 |
+
function execImportData() {
|
107 |
+
if (importData.length == 0) {
|
108 |
+
$("updatedRows_img").src = config.styles.message.icon;
|
109 |
+
$("updatedRows").style.backgroundColor = config.styles.message.bg;
|
110 |
+
Element.insert($("liFinished"), {before: config.tpl.evaluate({
|
111 |
+
style: "background-color:"+config.styles.message.bg,
|
112 |
+
image: config.styles.message.icon,
|
113 |
+
text: config.tplSccTxt.evaluate({updated:(countOfUpdated-countOfError)}),
|
114 |
+
id: "updatedFinish"
|
115 |
+
})});
|
116 |
+
|
117 |
+
if ($("liBeforeFinish")) {
|
118 |
+
Element.insert($("liFinished"), {before: $("liBeforeFinish")});
|
119 |
+
$("liBeforeFinish").show();
|
120 |
+
}
|
121 |
+
|
122 |
+
new Ajax.Request("<?php echo $this->getUrl('*/*/batchFinish', array('exeuctionTerminated' => 0));?>", {
|
123 |
+
method: "post",
|
124 |
+
parameters: {form_key: FORM_KEY,sucees_sku:successSkuCount,errorSkuCount:errorSku.length,amosoft_vendor_code:'<?php echo Mage::registry('bulk_vendor_Code') ?>'},
|
125 |
+
onComplete: function(transport) {
|
126 |
+
if (transport.responseText.isJSON()) {
|
127 |
+
var response = transport.responseText.evalJSON();
|
128 |
+
if (response.error) {
|
129 |
+
Element.insert($("liFinished"), {before: config.tpl.evaluate({
|
130 |
+
style: "background-color:"+config.styles.error.bg,
|
131 |
+
image: config.styles.error.icon,
|
132 |
+
text: response.error.escapeHTML(),
|
133 |
+
id: "error-finish"
|
134 |
+
})});
|
135 |
+
}
|
136 |
+
}
|
137 |
+
|
138 |
+
if ($("before-finish-wait-img")) {
|
139 |
+
$("before-finish-wait-img").hide();
|
140 |
+
}
|
141 |
+
|
142 |
+
$('liFinished').show();
|
143 |
+
if(errorSku.length > 0)
|
144 |
+
{
|
145 |
+
$('get_csv').show();
|
146 |
+
|
147 |
+
}
|
148 |
+
if(successSku.length > 0)
|
149 |
+
{
|
150 |
+
$('get_csv_success').show();
|
151 |
+
}
|
152 |
+
},
|
153 |
+
onFailure:function(){
|
154 |
+
alert('Not able to connect to server');
|
155 |
+
$('liFinishederror').show();
|
156 |
+
}
|
157 |
+
});
|
158 |
+
} else {
|
159 |
+
sendImportData(importData.shift());
|
160 |
+
}
|
161 |
+
}
|
162 |
+
|
163 |
+
function sendImportData(data) {
|
164 |
+
if (!config.tpl) {
|
165 |
+
config.tpl = new Template(config.template);
|
166 |
+
config.tplTxt = new Template(config.text);
|
167 |
+
config.tplSccTxt = new Template(config.successText);
|
168 |
+
}
|
169 |
+
if (!$("updatedRows")) {
|
170 |
+
Element.insert($("liFinished"), {before: config.tpl.evaluate({
|
171 |
+
style: "background-color: #FFD;",
|
172 |
+
image: config.styles.loader,
|
173 |
+
text: config.tplTxt.evaluate({updated:countOfUpdated, percent:getPercent()}),
|
174 |
+
id: "updatedRows"
|
175 |
+
})});
|
176 |
+
}
|
177 |
+
countOfStartedProfiles++;
|
178 |
+
if (!data.form_key) {
|
179 |
+
data.form_key = FORM_KEY;
|
180 |
+
}
|
181 |
+
|
182 |
+
new Ajax.Request("<?php echo $this->getUrl('*/*/batchRun');?>", {
|
183 |
+
method: "post",
|
184 |
+
parameters: data,
|
185 |
+
onSuccess: function(transport) {
|
186 |
+
countOfStartedProfiles --;
|
187 |
+
countOfUpdated += data["rows[]"].length;
|
188 |
+
if (transport.responseText.isJSON()) {
|
189 |
+
addProfileRow(transport.responseText.evalJSON());
|
190 |
+
} else {
|
191 |
+
Element.insert($("updatedRows"), {before: config.tpl.evaluate({
|
192 |
+
style: "background-color:"+config.styles.error.bg,
|
193 |
+
image: config.styles.error.icon,
|
194 |
+
text: transport.responseText.escapeHTML(),
|
195 |
+
id: "error-" + countOfStartedProfiles
|
196 |
+
})});
|
197 |
+
countOfError += data["rows[]"].length;
|
198 |
+
}
|
199 |
+
execImportData();
|
200 |
+
},
|
201 |
+
onFailure:function(){
|
202 |
+
alert('Not able to connect to server');
|
203 |
+
$('liFinishederror').show();
|
204 |
+
}
|
205 |
+
});
|
206 |
+
}
|
207 |
+
|
208 |
+
function getPercent() {
|
209 |
+
return Math.ceil((countOfUpdated/totalRecords)*1000)/10;
|
210 |
+
}
|
211 |
+
|
212 |
+
function addProfileRow(data) {
|
213 |
+
if (data.errors.length > 0) {
|
214 |
+
for (var i=0, length=data.errors.length; i<length; i++) {
|
215 |
+
Element.insert($("updatedRows"), {before: config.tpl.evaluate({
|
216 |
+
style: "background-color:"+config.styles.error.bg,
|
217 |
+
image: config.styles.error.icon,
|
218 |
+
text: data.errors[i],
|
219 |
+
id: "id-" + (countOfUpdated + i + 1)
|
220 |
+
})});
|
221 |
+
countOfError ++;
|
222 |
+
errorSku.push(data.skuError[i]);
|
223 |
+
}
|
224 |
+
}
|
225 |
+
$("updatedRows_status").update(config.tplTxt.evaluate({updated:countOfUpdated, percent:getPercent()}));
|
226 |
+
if (data.savedRows > 0) {
|
227 |
+
successSkuCount += data.savedRows;
|
228 |
+
for (var i=0, length=data.skuSuccess.length; i<length; i++) {
|
229 |
+
successSku.push(data.skuSuccess[i]);
|
230 |
+
}
|
231 |
+
|
232 |
+
}
|
233 |
+
|
234 |
+
|
235 |
+
}
|
236 |
+
|
237 |
+
function genrateCSV(type){
|
238 |
+
|
239 |
+
var csvContent;
|
240 |
+
var sku = (type == 'success') ? successSku : errorSku;
|
241 |
+
csvContent = prepareCSVcontent(sku,type)
|
242 |
+
var encodedUri = encodeURI(csvContent);
|
243 |
+
var link = document.createElement("a");
|
244 |
+
if (link.download !== undefined){
|
245 |
+
link.setAttribute("href", encodedUri);
|
246 |
+
link.setAttribute("download", "my_data.csv");
|
247 |
+
document.body.appendChild(link);
|
248 |
+
link.click();
|
249 |
+
document.body.removeChild(link);
|
250 |
+
}else
|
251 |
+
{
|
252 |
+
alert('CSV export only works in Chrome, Firefox, and Opera.');
|
253 |
+
}
|
254 |
+
|
255 |
+
}
|
256 |
+
|
257 |
+
function prepareCSVcontent(sku,type){
|
258 |
+
|
259 |
+
if(sku.length < 0)
|
260 |
+
{
|
261 |
+
return;
|
262 |
+
}
|
263 |
+
var headerTitle = (type == 'success') ? 'Success Sku' : 'Failed Sku';
|
264 |
+
var csvContent = "data:text/csv;charset=utf-8,";
|
265 |
+
if(sku[0] != headerTitle) sku.unshift(headerTitle);
|
266 |
+
for(var i=0;i<sku.length;i++)
|
267 |
+
{
|
268 |
+
if(sku[i] !== 'undefined')
|
269 |
+
csvContent += sku[i]+ "\n";
|
270 |
+
}
|
271 |
+
return csvContent;
|
272 |
+
|
273 |
+
}
|
274 |
+
</script>
|
275 |
+
<?php $importData = $this->getImportData();?>
|
276 |
+
<script type="text/javascript">
|
277 |
+
<?php foreach ($importData as $importValue):?>
|
278 |
+
addImportData(<?php echo $this->jsonEncode($importValue);?>);
|
279 |
+
<?php endforeach;?>
|
280 |
+
execImportData();
|
281 |
+
</script>
|
282 |
+
<?php else: ?>
|
283 |
+
<script type="text/javascript">$('liNoproduct').show();</script>
|
284 |
+
<?php endif;?>
|
285 |
+
|
286 |
+
<?php if ($this->getShowFinished()):?>
|
287 |
+
<script type="text/javascript">$('liFinished').show();</script>
|
288 |
+
<?php endif;?>
|
289 |
+
<?php endif;?>
|
290 |
+
<?php } ?>
|
app/design/adminhtml/default/default/template/amosoft/result.phtml
ADDED
@@ -0,0 +1,80 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
?>
|
9 |
+
<?php $collection = $this->getLogCollection(); ?>
|
10 |
+
|
11 |
+
<div class="content-header">
|
12 |
+
<table cellspacing="0">
|
13 |
+
<tr>
|
14 |
+
<td style="<?php echo $this->getHeaderWidth() ?>"><?php echo $this->getHeaderHtml() ?></td>
|
15 |
+
<td class="form-buttons"><?php echo $this->getButtonsHtml() ?></td>
|
16 |
+
</tr>
|
17 |
+
</table>
|
18 |
+
</div>
|
19 |
+
<div class="grid">
|
20 |
+
<?php if(count($collection) > 0): ?>
|
21 |
+
<table cellspacing="0" class="data" id="amosoftgrid_table">
|
22 |
+
<?php foreach($collection as $key => $logArray){ ?>
|
23 |
+
<thead>
|
24 |
+
<tr class="tablelogheading" >
|
25 |
+
<td colspan="5"><ul class = " logheading"><li><strong><?php echo $this->formatDate($logArray['created'], 'medium', true); ?><span class="separator">|</span><strong><?php echo $key; ?></strong></li></ul></td>
|
26 |
+
|
27 |
+
</tr>
|
28 |
+
<tr class="headings">
|
29 |
+
<th>Supplier Name</th>
|
30 |
+
<th>Supplier Code</th>
|
31 |
+
<th>Link Product</th>
|
32 |
+
<th>Ranking</th>
|
33 |
+
<th>Active</th>
|
34 |
+
|
35 |
+
</tr>
|
36 |
+
</thead>
|
37 |
+
|
38 |
+
<tbody>
|
39 |
+
|
40 |
+
<?php foreach($logArray as $valueArray){ ?>
|
41 |
+
<tr>
|
42 |
+
<?php unset($logArray['created']); ?>
|
43 |
+
<?php if(is_array($valueArray)){ ?>
|
44 |
+
<?php foreach($valueArray as $value){ ?>
|
45 |
+
|
46 |
+
<td class="a-right "><?php echo $value ?> </td>
|
47 |
+
|
48 |
+
<?php } ?>
|
49 |
+
<?php } ?>
|
50 |
+
</tr>
|
51 |
+
<?php } ?>
|
52 |
+
</tbody>
|
53 |
+
<?php } ?>
|
54 |
+
</table>
|
55 |
+
<script type="text/javascript">
|
56 |
+
var headingArr = [];
|
57 |
+
$$('.logheading').each(function(row){
|
58 |
+
|
59 |
+
headingArr.push($(row).innerHTML)
|
60 |
+
$(row).setStyle({display:'none'})
|
61 |
+
})
|
62 |
+
|
63 |
+
for(var i=0; i<= headingArr.length; i++ )
|
64 |
+
{
|
65 |
+
if( headingArr[i] !=undefined ){
|
66 |
+
try{
|
67 |
+
$$('.tablelogheading')[i].innerHTML = '<td colspan="5"><ul class="" style="border-bottom: 2.5px solid #000000;margin: 15px 0 5px 5px;">'+headingArr[i]+'</ul></td>';
|
68 |
+
}catch(err){
|
69 |
+
console.log(err.message);
|
70 |
+
}
|
71 |
+
}
|
72 |
+
}
|
73 |
+
|
74 |
+
|
75 |
+
</script>
|
76 |
+
|
77 |
+
<?php else: ?>
|
78 |
+
<h1>No Data Found</h1>
|
79 |
+
</div>
|
80 |
+
<?php endif; ?>
|
app/design/adminhtml/default/default/template/amosoft/sales/default.phtml
ADDED
@@ -0,0 +1,312 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
18 |
+
* versions in the future. If you wish to customize Magento for your
|
19 |
+
* needs please refer to http://www.magentocommerce.com for more information.
|
20 |
+
*
|
21 |
+
* @category design
|
22 |
+
* @package default_default
|
23 |
+
* @copyright Copyright (c) 2014 Magento Inc. (http://www.magentocommerce.com)
|
24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
25 |
+
*/
|
26 |
+
?>
|
27 |
+
<?php $_item = $this->getItem() ?>
|
28 |
+
<?php $amosoftDetails = Mage::getBlockSingleton('dropship/adminhtml_sourcing'); ?>
|
29 |
+
<?php $this->setPriceDataObject($_item) ?>
|
30 |
+
<tr <?php if (!$this->canDisplayGiftmessage()): ?> class="border"<?php endif; ?>>
|
31 |
+
<td>
|
32 |
+
<?php if ($this->canDisplayContainer()): ?>
|
33 |
+
<div id="<?php echo $this->getHtmlId() ?>" class="item-container">
|
34 |
+
<?php endif; ?>
|
35 |
+
<div class="item-text">
|
36 |
+
<?php echo $this->getColumnHtml($_item, 'name') ?>
|
37 |
+
</div>
|
38 |
+
<?php if ($this->canDisplayContainer()): ?>
|
39 |
+
</div>
|
40 |
+
<?php endif ?>
|
41 |
+
</td>
|
42 |
+
<?php $amosoftItem = $amosoftDetails->getAmosoftOrderItemsDetails($_item); ?>
|
43 |
+
<?php
|
44 |
+
$amosoftItemStatus;
|
45 |
+
if($_item->getProductType() == 'configurable'){
|
46 |
+
$amosoftItemStatus = $amosoftItem->getAmosoftItemStatus();
|
47 |
+
}else{
|
48 |
+
$amosoftItemStatus = $_item->getAmosoftItemStatus();
|
49 |
+
}
|
50 |
+
?>
|
51 |
+
<td class="a-center"><?php echo $_item->getStatus() ?></td>
|
52 |
+
<td class="a-center">
|
53 |
+
<span id="<?php echo $amosoftItem->getItemId() ?>"><?php echo $amosoftItemStatus; ?></span>
|
54 |
+
<?php if($amosoftItemStatus!="" && $amosoftItemStatus!="Completed"): ?>
|
55 |
+
<p><a id="edit" onclick="respondToClick(<?php echo $amosoftItem->getItemId() ?>)" style="cursor:pointer"><?php echo $this->__('Edit') ?></a></p>
|
56 |
+
<span id="change_status-<?php echo $amosoftItem->getItemId() ?>" style="display:none;">
|
57 |
+
<select name="status" id="status-<?php echo $amosoftItem->getItemId() ?>" onchange="respondToChange(this)">
|
58 |
+
<option value=""><?php echo $this->__('Please select') ?></option>
|
59 |
+
<?php foreach(Mage::helper('dropship')->getAmosoftOrderItemStatus() as $status):?>
|
60 |
+
<?php if($amosoftItemStatus!=$status): ?>
|
61 |
+
<?php if($amosoftItemStatus=="Sent to Vendor" && $status=="Sent to Supplier"):?>
|
62 |
+
<?php continue; ?>
|
63 |
+
<?php endif; ?>
|
64 |
+
<option value="<?php echo $status ?>"><?php echo $status ?></option>
|
65 |
+
<?php endif; ?>
|
66 |
+
<?php endforeach; ?>
|
67 |
+
</select>
|
68 |
+
</span>
|
69 |
+
<?php endif; ?>
|
70 |
+
</td>
|
71 |
+
<td class="a-center"><?php echo ($_item->getProductType() == 'configurable') ? $amosoftItem->getAmosoftVendorName() : $_item->getAmosoftVendorName() ?></td>
|
72 |
+
<td class="a-center"><?php echo ($_item->getProductType() == 'configurable') ? $amosoftItem->getAmosoftVendorSku() : $_item->getAmosoftVendorSku() ?></td>
|
73 |
+
<td class="a-right"><?php echo $this->displayPriceAttribute('original_price') ?></td>
|
74 |
+
<td class="a-right">
|
75 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceExclTax()): ?>
|
76 |
+
<span class="price-excl-tax">
|
77 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
|
78 |
+
<span class="label"><?php echo $this->__('Excl. Tax'); ?>:</span>
|
79 |
+
<?php endif; ?>
|
80 |
+
|
81 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales', $_item->getStoreId())): ?>
|
82 |
+
<?php
|
83 |
+
echo $this->displayPrices(
|
84 |
+
$_item->getBasePrice()+$_item->getBaseWeeeTaxAppliedAmount()+$_item->getBaseWeeeTaxDisposition(),
|
85 |
+
$_item->getPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()
|
86 |
+
);
|
87 |
+
?>
|
88 |
+
<?php else: ?>
|
89 |
+
<?php echo $this->displayPrices($_item->getBasePrice(), $_item->getPrice()) ?>
|
90 |
+
<?php endif; ?>
|
91 |
+
|
92 |
+
|
93 |
+
<?php if (Mage::helper('weee')->getApplied($_item)): ?>
|
94 |
+
<br />
|
95 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales', $_item->getStoreId())): ?>
|
96 |
+
<small>
|
97 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
98 |
+
<span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></span>
|
99 |
+
<?php endforeach; ?>
|
100 |
+
</small>
|
101 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales', $_item->getStoreId())): ?>
|
102 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
103 |
+
<span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></small></span>
|
104 |
+
<?php endforeach; ?>
|
105 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales', $_item->getStoreId())): ?>
|
106 |
+
<small>
|
107 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
108 |
+
<span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></span>
|
109 |
+
<?php endforeach; ?>
|
110 |
+
</small>
|
111 |
+
<?php endif; ?>
|
112 |
+
|
113 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales', $_item->getStoreId())): ?>
|
114 |
+
<br />
|
115 |
+
<span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br />
|
116 |
+
<?php
|
117 |
+
echo $this->displayPrices(
|
118 |
+
$_item->getBasePrice()+$_item->getBaseWeeeTaxAppliedAmount()+$_item->getBaseWeeeTaxDisposition(),
|
119 |
+
$_item->getPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()
|
120 |
+
);
|
121 |
+
?>
|
122 |
+
</span>
|
123 |
+
<?php endif; ?>
|
124 |
+
<?php endif; ?>
|
125 |
+
</span>
|
126 |
+
<br />
|
127 |
+
<?php endif; ?>
|
128 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceInclTax()): ?>
|
129 |
+
<span class="price-incl-tax">
|
130 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
|
131 |
+
<span class="label"><?php echo $this->__('Incl. Tax'); ?>:</span>
|
132 |
+
<?php endif; ?>
|
133 |
+
<?php $_incl = $this->helper('checkout')->getPriceInclTax($_item); ?>
|
134 |
+
<?php $_baseIncl = $this->helper('checkout')->getBasePriceInclTax($_item); ?>
|
135 |
+
|
136 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales', $_item->getStoreId())): ?>
|
137 |
+
<?php echo $this->displayPrices($_baseIncl + Mage::helper('weee')->getBaseWeeeTaxInclTax($_item), $_incl + Mage::helper('weee')->getWeeeTaxInclTax($_item)); ?>
|
138 |
+
<?php else: ?>
|
139 |
+
<?php echo $this->displayPrices($_baseIncl-$_item->getBaseWeeeTaxDisposition(), $_incl-$_item->getWeeeTaxDisposition()) ?>
|
140 |
+
<?php endif; ?>
|
141 |
+
|
142 |
+
<?php if (Mage::helper('weee')->getApplied($_item)): ?>
|
143 |
+
<br />
|
144 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales', $_item->getStoreId())): ?>
|
145 |
+
<small>
|
146 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
147 |
+
<span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></span>
|
148 |
+
<?php endforeach; ?>
|
149 |
+
</small>
|
150 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales', $_item->getStoreId())): ?>
|
151 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
152 |
+
<span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></small></span>
|
153 |
+
<?php endforeach; ?>
|
154 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales', $_item->getStoreId())): ?>
|
155 |
+
<small>
|
156 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
157 |
+
<span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></span>
|
158 |
+
<?php endforeach; ?>
|
159 |
+
</small>
|
160 |
+
<?php endif; ?>
|
161 |
+
|
162 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales', $_item->getStoreId())): ?>
|
163 |
+
<br />
|
164 |
+
<span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br /> <?php echo $this->displayPrices($_baseIncl + Mage::helper('weee')->getBaseWeeeTaxInclTax($_item) , $_incl + Mage::helper('weee')->getWeeeTaxInclTax($_item)); ?></span>
|
165 |
+
<?php endif; ?>
|
166 |
+
<?php endif; ?>
|
167 |
+
</span>
|
168 |
+
<?php endif; ?>
|
169 |
+
|
170 |
+
</td>
|
171 |
+
<td><?php echo $this->getColumnHtml($_item, 'qty') ?></td>
|
172 |
+
|
173 |
+
<td class="a-right">
|
174 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceExclTax()): ?>
|
175 |
+
<span class="price-excl-tax">
|
176 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
|
177 |
+
<span class="label"><?php echo $this->__('Excl. Tax'); ?>:</span>
|
178 |
+
<?php endif; ?>
|
179 |
+
|
180 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales', $_item->getStoreId())): ?>
|
181 |
+
<?php
|
182 |
+
echo $this->displayPrices(
|
183 |
+
$_item->getBaseRowTotal()+$_item->getBaseWeeeTaxAppliedRowAmount()+$_item->getBaseWeeeTaxRowDisposition(),
|
184 |
+
$_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()
|
185 |
+
);
|
186 |
+
?>
|
187 |
+
<?php else: ?>
|
188 |
+
<?php echo $this->displayPrices($_item->getBaseRowTotal(), $_item->getRowTotal()) ?>
|
189 |
+
<?php endif; ?>
|
190 |
+
|
191 |
+
|
192 |
+
<?php if (Mage::helper('weee')->getApplied($_item)): ?>
|
193 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales', $_item->getStoreId())): ?>
|
194 |
+
<small>
|
195 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
196 |
+
<span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></span>
|
197 |
+
<?php endforeach; ?>
|
198 |
+
</small>
|
199 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales', $_item->getStoreId())): ?>
|
200 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
201 |
+
<span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></small></span>
|
202 |
+
<?php endforeach; ?>
|
203 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales', $_item->getStoreId())): ?>
|
204 |
+
<small>
|
205 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
206 |
+
<span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></span>
|
207 |
+
<?php endforeach; ?>
|
208 |
+
</small>
|
209 |
+
<?php endif; ?>
|
210 |
+
|
211 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales', $_item->getStoreId())): ?>
|
212 |
+
<br />
|
213 |
+
<span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br />
|
214 |
+
<?php
|
215 |
+
echo $this->displayPrices(
|
216 |
+
$_item->getBaseRowTotal()+$_item->getBaseWeeeTaxAppliedRowAmount()+$_item->getBaseWeeeTaxRowDisposition(),
|
217 |
+
$_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()
|
218 |
+
);
|
219 |
+
?>
|
220 |
+
</span>
|
221 |
+
<?php endif; ?>
|
222 |
+
<?php endif; ?>
|
223 |
+
</span>
|
224 |
+
<br />
|
225 |
+
<?php endif; ?>
|
226 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceInclTax()): ?>
|
227 |
+
<span class="price-incl-tax">
|
228 |
+
<?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
|
229 |
+
<span class="label"><?php echo $this->__('Incl. Tax'); ?>:</span>
|
230 |
+
<?php endif; ?>
|
231 |
+
<?php $_incl = $this->helper('checkout')->getSubtotalInclTax($_item); ?>
|
232 |
+
<?php $_baseIncl = $this->helper('checkout')->getBaseSubtotalInclTax($_item); ?>
|
233 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales', $_item->getStoreId())): ?>
|
234 |
+
<?php echo $this->displayPrices($_baseIncl + Mage::helper('weee')->getBaseRowWeeeTaxInclTax($_item), $_incl + Mage::helper('weee')->getRowWeeeTaxInclTax($_item)); ?>
|
235 |
+
<?php else: ?>
|
236 |
+
<?php echo $this->displayPrices($_baseIncl-$_item->getBaseWeeeTaxRowDisposition(), $_incl-$_item->getWeeeTaxRowDisposition()) ?>
|
237 |
+
<?php endif; ?>
|
238 |
+
|
239 |
+
|
240 |
+
<?php if (Mage::helper('weee')->getApplied($_item)): ?>
|
241 |
+
|
242 |
+
<br />
|
243 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales', $_item->getStoreId())): ?>
|
244 |
+
<small>
|
245 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
246 |
+
<span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></span>
|
247 |
+
<?php endforeach; ?>
|
248 |
+
</small>
|
249 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales', $_item->getStoreId())): ?>
|
250 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
251 |
+
<span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></small></span>
|
252 |
+
<?php endforeach; ?>
|
253 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales', $_item->getStoreId())): ?>
|
254 |
+
<small>
|
255 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
256 |
+
<span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></span>
|
257 |
+
<?php endforeach; ?>
|
258 |
+
</small>
|
259 |
+
<?php endif; ?>
|
260 |
+
|
261 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales', $_item->getStoreId())): ?>
|
262 |
+
<br /><span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br /> <?php echo $this->displayPrices($_baseIncl + Mage::helper('weee')->getBaseRowWeeeTaxInclTax($_item),$_incl + Mage::helper('weee')->getRowWeeeTaxInclTax($_item)); ?></span>
|
263 |
+
<?php endif; ?>
|
264 |
+
<?php endif; ?>
|
265 |
+
</span>
|
266 |
+
<?php endif; ?>
|
267 |
+
</td>
|
268 |
+
<td class="a-right"><?php echo $this->displayPriceAttribute('tax_amount') ?></td>
|
269 |
+
<td class="a-right"><?php echo $this->displayTaxPercent($_item) ?></td>
|
270 |
+
<td class="a-right"><?php echo $this->displayPriceAttribute('discount_amount') ?></td>
|
271 |
+
<td class="a-right last">
|
272 |
+
<?php echo $this->displayPrices(
|
273 |
+
$_item->getBaseRowTotal() + $_item->getBaseTaxAmount() + $_item->getBaseHiddenTaxAmount() + $_item->getBaseWeeeTaxAppliedRowAmount() - $_item->getBaseDiscountAmount(),
|
274 |
+
$_item->getRowTotal() + $_item->getTaxAmount() + $_item->getHiddenTaxAmount() + $_item->getWeeeTaxAppliedRowAmount() - $_item->getDiscountAmount()
|
275 |
+
); ?>
|
276 |
+
</td>
|
277 |
+
</tr>
|
278 |
+
|
279 |
+
<script type="text/javascript">
|
280 |
+
|
281 |
+
function respondToClick(id) {
|
282 |
+
$('change_status-'+id).show();
|
283 |
+
}
|
284 |
+
|
285 |
+
function respondToChange(obj) {
|
286 |
+
if(obj.value){
|
287 |
+
var itemId = obj.id.split('-');
|
288 |
+
new Ajax.Request('<?php echo $this->getUrl('amosoft/adminhtml_amosoft/changeStatusAjax') ?>', {
|
289 |
+
parameters: {
|
290 |
+
'amosoft_item_id': itemId[1],
|
291 |
+
'amosoft_item_status': obj.value,
|
292 |
+
'order_id': '<?php echo $this->getRequest()->getParam('order_id'); ?>'
|
293 |
+
},
|
294 |
+
method: 'post',
|
295 |
+
onSuccess: success,
|
296 |
+
onFailure: fail
|
297 |
+
});
|
298 |
+
}
|
299 |
+
}
|
300 |
+
|
301 |
+
function success(response){
|
302 |
+
var data = response.responseText.evalJSON();
|
303 |
+
var id = data.amosoft_item_id;
|
304 |
+
$(id).innerHTML = data.amosoft_item_status;
|
305 |
+
$('change_status-'+id).hide();
|
306 |
+
window.location.reload(true);
|
307 |
+
}
|
308 |
+
|
309 |
+
function fail(response){
|
310 |
+
alert("Request cannot be completed");
|
311 |
+
}
|
312 |
+
</script>
|
app/design/adminhtml/default/default/template/amosoft/sales/items.phtml
ADDED
@@ -0,0 +1,69 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
18 |
+
* versions in the future. If you wish to customize Magento for your
|
19 |
+
* needs please refer to http://www.magentocommerce.com for more information.
|
20 |
+
*
|
21 |
+
* @category design
|
22 |
+
* @package default_default
|
23 |
+
* @copyright Copyright (c) 2014 Magento Inc. (http://www.magentocommerce.com)
|
24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
25 |
+
*/
|
26 |
+
?>
|
27 |
+
<?php $_order = $this->getOrder() ?>
|
28 |
+
<div class="grid np">
|
29 |
+
<div class="hor-scroll">
|
30 |
+
<table cellspacing="0" class="data order-tables">
|
31 |
+
<col />
|
32 |
+
<col width="1" />
|
33 |
+
<col width="1" />
|
34 |
+
<col width="1" />
|
35 |
+
<col width="1" />
|
36 |
+
<col width="1" />
|
37 |
+
<col width="1" />
|
38 |
+
<col width="1" />
|
39 |
+
<col width="1" />
|
40 |
+
<col width="1" />
|
41 |
+
<thead>
|
42 |
+
<tr class="headings">
|
43 |
+
<th><?php echo $this->helper('sales')->__('Product') ?></th>
|
44 |
+
<th><span class="nobr"><?php echo $this->helper('sales')->__('Item Status') ?></span></th>
|
45 |
+
<th><span class="nobr"><?php echo $this->helper('sales')->__('Drop Ship Status') ?></span></th>
|
46 |
+
<th><span class="nobr"><?php echo $this->helper('sales')->__('Drop Ship Supplier') ?></span></th>
|
47 |
+
<th><span class="nobr"><?php echo $this->helper('sales')->__('Supplier Sku') ?></span></th>
|
48 |
+
<th><span class="nobr"><?php echo $this->helper('sales')->__('Original Price') ?></span></th>
|
49 |
+
<th><?php echo $this->helper('sales')->__('Price') ?></th>
|
50 |
+
<th class="a-center"><?php echo $this->helper('sales')->__('Qty') ?></th>
|
51 |
+
<th><?php echo $this->helper('sales')->__('Subtotal') ?></th>
|
52 |
+
<th><span class="nobr"><?php echo $this->helper('sales')->__('Tax Amount') ?></span></th>
|
53 |
+
<th><span class="nobr"><?php echo $this->helper('sales')->__('Tax Percent') ?></span></th>
|
54 |
+
<th><span class="nobr"><?php echo $this->helper('sales')->__('Discount Amount') ?></span></th>
|
55 |
+
<th class="last"><span class="nobr"><?php echo $this->helper('sales')->__('Row Total') ?></span></th>
|
56 |
+
</tr>
|
57 |
+
</thead>
|
58 |
+
<?php $_items = $this->getItemsCollection() ?>
|
59 |
+
<?php $i=0;foreach ($_items as $_item):?>
|
60 |
+
<?php if ($_item->getParentItem()) continue; else $i++;?>
|
61 |
+
<tbody class="<?php echo $i%2?'even':'odd' ?>">
|
62 |
+
<?php echo $this->getItemHtml($_item) ?>
|
63 |
+
<?php echo $this->getItemExtraInfoHtml($_item) ?>
|
64 |
+
</tbody>
|
65 |
+
<?php endforeach; ?>
|
66 |
+
</table>
|
67 |
+
</div>
|
68 |
+
</div>
|
69 |
+
<br />
|
app/design/adminhtml/default/default/template/amosoft/system/config/fieldset/hint.phtml
ADDED
@@ -0,0 +1,132 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
?>
|
9 |
+
<?php
|
10 |
+
/**
|
11 |
+
*
|
12 |
+
* @see Mage_Paypal_Block_System_Config_Fieldset_Hint
|
13 |
+
*/
|
14 |
+
?>
|
15 |
+
<script type="text/javascript">
|
16 |
+
//<![CDATA[
|
17 |
+
if($$('.form-buttons a#page-help-link').length <= 0 ){
|
18 |
+
if($$('.form-buttons button').length > 0){
|
19 |
+
$$('.form-buttons button')[0].insert({
|
20 |
+
before: "<a style='color:black;padding-right:20px' target='_blank' id='page-help-link' href='<?php echo Mage::helper('dropship')->getConfigObject('apiconfig/helpurl/link'); ?>' target='magento_page_help'>Need help from amosoft?</a>"
|
21 |
+
});
|
22 |
+
}else
|
23 |
+
{
|
24 |
+
$$('.form-buttons')[0].insert({
|
25 |
+
top: "<a style='color:black;padding-right:20px' target='_blank' id='page-help-link' href='<?php echo Mage::helper('dropship')->getConfigObject('apiconfig/helpurl/link'); ?>' target='magento_page_help'>Need help from amosoft?</a>"
|
26 |
+
});
|
27 |
+
}
|
28 |
+
}
|
29 |
+
//]]>
|
30 |
+
</script>
|
31 |
+
|
32 |
+
<div class="dropship">
|
33 |
+
<div class="amosoft-notice"></div>
|
34 |
+
<div style="clear: right; padding-top: 10px;">
|
35 |
+
<h3>Your Store Information </h3>
|
36 |
+
</div>
|
37 |
+
<div style="border-bottom: 1px double #000000;padding-bottom: 20px;">
|
38 |
+
<div style="padding-bottom: 20px;padding-top: 15px;">
|
39 |
+
<div style="width:120px;float:left"><label style= "display: block;width: 185px;padding-right: 15px;padding-top: 1px;">
|
40 |
+
Base Magento URL</label>
|
41 |
+
</div>
|
42 |
+
<div style="width: 300px; padding-right: 5px;float:left">
|
43 |
+
<input id="amosoft_integration_integration_magento_base_url" value="<?php echo Mage::getBaseUrl( Mage_Core_Model_Store::URL_TYPE_WEB, true ); ?>" style="width: 300px;padding: 2px;" type="text" readonly="readonly">
|
44 |
+
</div>
|
45 |
+
</div>
|
46 |
+
<div class="clear"></div>
|
47 |
+
<div style="width:500px;padding-bottom:29px;">
|
48 |
+
<div style="width:120px;float:left"><label style= "display: block;width: 185px;padding-right: 15px;padding-top: 1px;">
|
49 |
+
Magento Version</label>
|
50 |
+
</div>
|
51 |
+
<div style="width: 300px; padding-right: 5px;float:left">
|
52 |
+
<input id="amosoft_integration_integration_magento_base_url" value="<?php echo Mage::getVersion() ?>" style="width:300px;padding: 2px;" type="text" readonly="readonly">
|
53 |
+
</div>
|
54 |
+
</div>
|
55 |
+
<div class="clear"></div>
|
56 |
+
<div style="float:left;">
|
57 |
+
<div style="width:120px;float:left"><label style= "display: block;width: 185px;padding-right: 15px;padding-top: 1px;">
|
58 |
+
Magento Store IDs</label>
|
59 |
+
</div>
|
60 |
+
</div>
|
61 |
+
<div style="width: 314px; float:left;border:2px #000 solid;overflow: hidden;">
|
62 |
+
<div style="background:grey;color:#fff;font-weight:bold;text-align: center;">
|
63 |
+
<div style="float:left; width:50px;margin: 0 15px 0 0;background:grey;">ID</div>
|
64 |
+
<div style="float:left; width:177px">Store Name</div>
|
65 |
+
<div style="clear:both;"></div>
|
66 |
+
</div>
|
67 |
+
<div>
|
68 |
+
<ul>
|
69 |
+
<?php foreach($this->getStoreList() as $storeDetail): ?>
|
70 |
+
<li>
|
71 |
+
<div style="float:left; width:50px;margin: 0 15px 0 0;"><input id="amosoft_integration_integration_store_list_val" value="<?php echo $storeDetail['value'] ?>" style="width:50px;padding: 2px;margin: 0 0 0 5px;" type="text" readonly="readonly"></div>
|
72 |
+
<div style="float:left; width:177px"><input id="amosoft_integration_integration_store_list_label" value="<?php echo $storeDetail['label'] ?>" style="padding: 2px;" type="text" readonly="readonly"></div>
|
73 |
+
<div style="clear:both;"></div>
|
74 |
+
</li>
|
75 |
+
<?php endforeach; ?>
|
76 |
+
</ul>
|
77 |
+
</div>
|
78 |
+
|
79 |
+
</div>
|
80 |
+
<div class="clear"></div>
|
81 |
+
</div>
|
82 |
+
|
83 |
+
<div style="padding-top: 20px;">
|
84 |
+
<div style="clear: right">
|
85 |
+
<b><span>Step 1:</span> Create a amosoft account </b>
|
86 |
+
</div>
|
87 |
+
<div style="border-bottom: 1px double #000000; padding-bottom: 20px">
|
88 |
+
<span><a target="_blank" href="http://netdropship.amosoft.com/">Click Here to Sign up</a></span> Or if you
|
89 |
+
have an existing account <span><a target="_blank" href="http://netdropship.amosoft.com/"> Sign in Here</a></span>
|
90 |
+
</div>
|
91 |
+
</div>
|
92 |
+
<div style="border-bottom: 1px double #000000;padding-bottom: 20px;padding-top: 50px;">
|
93 |
+
<div style="clear: right">
|
94 |
+
<b><span>Step 2:</span> Connect amosoft to your Magento Admin Panel </b>
|
95 |
+
</div>
|
96 |
+
|
97 |
+
<p><span>Create your amosoft SOAP API User > <a href="<?php echo $this->getUrl('amosoft/adminhtml_amosoft/getapidetails') ?>">Click Here to
|
98 |
+
update your amosoft API key</a></span> (this is like your
|
99 |
+
password)</p>
|
100 |
+
<p> <span>Login to <a target="_blank" href="http://netdropship.amosoft.com/">Amosoft NET Dropship</a> and navigate to <b>Settings > Setup Connection</b> > See screenshot below for fields to fill
|
101 |
+
</span></p>
|
102 |
+
<p>
|
103 |
+
<img border="2" width="950px" src="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA); ?>amosoft/setup_connection.png"/>
|
104 |
+
<!-- <img border="2" width="950px" src="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA); ?>amosoft/setup_connection2.png"/> -->
|
105 |
+
</p>
|
106 |
+
<p></p>
|
107 |
+
|
108 |
+
|
109 |
+
</div>
|
110 |
+
<div class="clear"></div>
|
111 |
+
<div style="padding-top: 50px;">
|
112 |
+
<p >
|
113 |
+
<b><span>Step 3:</span> Add to Supplier/Vendors </b>
|
114 |
+
</p>
|
115 |
+
<p>
|
116 |
+
<span>Login to <a href="http://netdropship.amosoft.com/" target="_blank">Amosoft NET Dropship</a> and navigate to <b>Supplier Management > Click Add New Supplier </b>
|
117 |
+
</span>
|
118 |
+
</p>
|
119 |
+
<p >
|
120 |
+
<span>The MagVendID Supplier Code must match to the Vendor ID assigned to your supplier set up in the amosoft Portal. </span> See the below screenshot
|
121 |
+
</p>
|
122 |
+
<p>
|
123 |
+
<img border="2" width="950px" src="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA); ?>amosoft/suppliers.png"/>
|
124 |
+
</p>
|
125 |
+
<div style="clear:right;padding-bottom:50px"></div>
|
126 |
+
<p>
|
127 |
+
<p>Congratulations, you are now connected to amosoft. You can now set up your Sourcing Logic rules</p>
|
128 |
+
<p>For support and help on setting these up please go to <a target="_blank" href="http://help.netdropship.amosoft.com/">http://help.netdropship.amosoft.com/</a></p>
|
129 |
+
<p>If you have any questions or encounter any issues setting this up please contact <a href="mailto:support@amosoft.com">support@amosoft.com</a></p>
|
130 |
+
</p>
|
131 |
+
</div>
|
132 |
+
</div>
|
app/design/adminhtml/default/default/template/amosoft/system/config/submitbutton.phtml
ADDED
@@ -0,0 +1,99 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
?>
|
9 |
+
|
10 |
+
<?php /* var $this Mage_Adminhtml_Block_System_Config_System_Storage_Media_Synchronize */ ?>
|
11 |
+
<div style="float:left"><?php echo $this->getSubmitButtonHtml() ?></div>
|
12 |
+
<script type="text/javascript">
|
13 |
+
//<![CDATA[
|
14 |
+
Validation.addAllThese([
|
15 |
+
['validate-url-amosoft', 'Please enter a valid URL. Protocol is required (http://, https:// )', function (v) {
|
16 |
+
v = (v || '').replace(/^\s+/, '').replace(/\s+$/, '');
|
17 |
+
return Validation.get('IsEmpty').test(v) || /^(http|https):\/\/(([A-Z0-9]([A-Z0-9_-]*[A-Z0-9]|))(\.[A-Z0-9]([A-Z0-9_-]*[A-Z0-9]|))*)(:(\d+))?(\/[A-Z0-9~](([A-Z0-9_~-]|\.)*[A-Z0-9~]|))*\/?(.*)?$/i.test(v)
|
18 |
+
}],
|
19 |
+
['validate-ftp-url-amosoft', 'Please enter a valid URL. Protocol is required (ftp://, ftps:// )', function (v) {
|
20 |
+
return Validation.get('IsEmpty').test(v) || /^(ftps|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v) || /^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v)
|
21 |
+
}]
|
22 |
+
]);
|
23 |
+
|
24 |
+
var enableId = 'amosoft_sourcing_cron_settings_upload_enabled';
|
25 |
+
var buttonId = 'amosoft_sourcing_cron_settings_upload_ftp_testconnection';
|
26 |
+
var buttonObj = $('amosoft_sourcing_cron_settings_upload_ftp_testconnection');
|
27 |
+
function checkButtonState(event) {
|
28 |
+
var element = Event.element(event);
|
29 |
+
|
30 |
+
if(element.value == '1'){
|
31 |
+
enableSyncButton();
|
32 |
+
}else
|
33 |
+
{
|
34 |
+
disableSyncButton();
|
35 |
+
}
|
36 |
+
|
37 |
+
|
38 |
+
}
|
39 |
+
|
40 |
+
function enableSyncButton() {
|
41 |
+
Form.Element.enable(buttonId);
|
42 |
+
buttonObj.removeClassName('disabled');
|
43 |
+
}
|
44 |
+
|
45 |
+
function disableSyncButton() {
|
46 |
+
Form.Element.disable(buttonId);
|
47 |
+
buttonObj.addClassName('disabled');
|
48 |
+
}
|
49 |
+
|
50 |
+
Event.observe(window, 'load', function(){
|
51 |
+
|
52 |
+
if($(enableId).value != '1'){
|
53 |
+
disableSyncButton();
|
54 |
+
}
|
55 |
+
|
56 |
+
});
|
57 |
+
$(enableId).observe('change', checkButtonState);
|
58 |
+
function synchronize(id) {
|
59 |
+
|
60 |
+
if(!configForm.validate())
|
61 |
+
{
|
62 |
+
return ;
|
63 |
+
}
|
64 |
+
|
65 |
+
new Ajax.Request('<?php echo $this->getAjaxSyncUrl() ?>', {
|
66 |
+
parameters: $('config_edit_form').serialize(),
|
67 |
+
method: 'post',
|
68 |
+
onSuccess: successFunc,
|
69 |
+
onFailure: failFunc
|
70 |
+
});
|
71 |
+
|
72 |
+
}
|
73 |
+
|
74 |
+
function successFunc(response){
|
75 |
+
var container = $('messages');
|
76 |
+
var content = response.responseText.evalJSON();
|
77 |
+
if(content.error)
|
78 |
+
{
|
79 |
+
$('messages').show();
|
80 |
+
container.update('<ul class="messages"><li class="error-msg"><ul><li><span>'+content.message+'</span></li></ul></li></ul>')
|
81 |
+
container.scrollTo();
|
82 |
+
buttonObj.innerHTML = '<span><spn>Unsuccessful Tested</span></span>'
|
83 |
+
return;
|
84 |
+
}else
|
85 |
+
{
|
86 |
+
buttonObj.innerHTML = '<span><spn>Successfully Tested</span></span>'
|
87 |
+
$('messages').hide();
|
88 |
+
}
|
89 |
+
|
90 |
+
}
|
91 |
+
|
92 |
+
function failFunc(){
|
93 |
+
alert('Not able to connect to server please try again later');
|
94 |
+
}
|
95 |
+
//]]>
|
96 |
+
</script>
|
97 |
+
|
98 |
+
|
99 |
+
|
app/design/adminhtml/default/default/template/amosoft/upload_vendor_product.phtml
ADDED
@@ -0,0 +1,66 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
?>
|
9 |
+
<div class="custom-msg" id="messages"><?php echo $this->getMessagesBlock()->toHtml() ?></div>
|
10 |
+
<div class="content-header">
|
11 |
+
<table cellspacing="0">
|
12 |
+
<tr>
|
13 |
+
<td style="<?php echo $this->getHeaderWidth() ?>"><?php echo $this->getHeaderHtml() ?></td>
|
14 |
+
<td class="form-buttons"><?php echo $this->getButtonsHtml() ?></td>
|
15 |
+
</tr>
|
16 |
+
</table>
|
17 |
+
</div>
|
18 |
+
|
19 |
+
<?php echo $this->getFormHtml() ?>
|
20 |
+
<div>
|
21 |
+
<?php echo $this->getChildHtml('inventory') ?>
|
22 |
+
</div>
|
23 |
+
<script type="text/javascript">
|
24 |
+
editForm = new varienForm('edit_form', '<?php echo $this->getValidationUrl() ?>');
|
25 |
+
</script>
|
26 |
+
<?php if($this->getProductSetupMode()): ?>
|
27 |
+
<?php echo $this->getFormScripts() ?>
|
28 |
+
<?php endif; ?>
|
29 |
+
|
30 |
+
<script type="text/javascript">
|
31 |
+
//<![CDATA[
|
32 |
+
var isProductModeSteup = '<?php echo $this->getProductSetupMode() ?>';
|
33 |
+
var formSubmit = false;
|
34 |
+
function downloadSampleCsv()
|
35 |
+
{
|
36 |
+
if(isProductModeSteup)
|
37 |
+
setLocation("<?php echo $this->getUrl('amosoft/adminhtml_upload/download',array('_query'=>array('isproductsetupmode' => true))) ?>");
|
38 |
+
else
|
39 |
+
setLocation("<?php echo $this->getUrl('amosoft/adminhtml_upload/download') ?>");
|
40 |
+
}
|
41 |
+
document.observe("dom:loaded", function(){
|
42 |
+
if($('uploadStarted'))
|
43 |
+
$('uploadStarted').value = 0;
|
44 |
+
});
|
45 |
+
|
46 |
+
|
47 |
+
$('upload_button').observe('click', function() { if(editForm.validate()){formSubmit = true;} });
|
48 |
+
//window.onbeforeunload = confirmExit;
|
49 |
+
function confirmExit(evt) {
|
50 |
+
|
51 |
+
if(formSubmit){
|
52 |
+
new Ajax.Request("<?php echo $this->getUrl('*/*/terminate'); ?>", {
|
53 |
+
method: "post",
|
54 |
+
parameters: {form_key: '<?php echo $this->getFormKey();?>'},
|
55 |
+
asynchronous : true,
|
56 |
+
});
|
57 |
+
|
58 |
+
return;
|
59 |
+
}else
|
60 |
+
{
|
61 |
+
return null;
|
62 |
+
}
|
63 |
+
}
|
64 |
+
|
65 |
+
//]]>
|
66 |
+
</script>
|
app/design/adminhtml/default/default/template/amosoft/vendor_ranking.phtml
ADDED
@@ -0,0 +1,455 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
?>
|
9 |
+
<?php $helper = Mage::helper('dropship')?>
|
10 |
+
<?php $dropshipVendorCollection = $this->getVendorCollection('yes'); ?>
|
11 |
+
<?php $nonDropshipVendorCollection = $this->getVendorCollection('no'); ?>
|
12 |
+
<style type="text/css">
|
13 |
+
|
14 |
+
|
15 |
+
</style>
|
16 |
+
<div class="content-header">
|
17 |
+
<table cellspacing="0">
|
18 |
+
<tr>
|
19 |
+
<td style="<?php echo $this->getHeaderWidth() ?>"><?php echo $this->getHeaderHtml() ?></td>
|
20 |
+
<td class="form-buttons"><?php echo $this->getButtonsHtml() ?></td>
|
21 |
+
</tr>
|
22 |
+
</table>
|
23 |
+
</div>
|
24 |
+
<?php if(Mage::getStoreConfig('amosoft_sourcing/rank/ranktype') == 'cost'): ?>
|
25 |
+
<div id="warning-message"><ul class="messages"><li class="warning-msg"><ul><li><span>Cost Based sourcing rule is currently selected. Vendor ranking will only take effect when Rank Based sourcing rule is selected in the Sourcing Configuration page.</span></li></ul></li></ul></div>
|
26 |
+
<?php endif; ?>
|
27 |
+
<div id="notice-message"><ul class="messages"><li class="notice-msg"><ul><li><span>To remove an Active Vendor from dropship Sourcing Rule, drag it to the Non Active Vendors section on the right. To activate that Vendor again, simply drag it back to the Active Vendors section.</span></li></ul></li></ul></div>
|
28 |
+
|
29 |
+
<div id="message"><ul class="messages"><li class="error-msg"><ul><li><span>You Have Unsubmitted Changes.</span></li></ul></li></ul></div>
|
30 |
+
<div id="panel"></div>
|
31 |
+
<div class="clear"></div>
|
32 |
+
<div>
|
33 |
+
<?php echo $this->getChildHtml('supplier.upload') ?>
|
34 |
+
</div>
|
35 |
+
<script type="text/javascript">
|
36 |
+
var arrVendorName = [];
|
37 |
+
var arrVendorProductLink = [];
|
38 |
+
var arrDropship = <?php echo $dropshipVendorCollection['arrayData'] ?>;
|
39 |
+
var arrNonDropship = <?php echo $nonDropshipVendorCollection['arrayData'] ?>;
|
40 |
+
var addNew = 1;
|
41 |
+
$('message').hide();
|
42 |
+
|
43 |
+
Ext.require([
|
44 |
+
'Ext.grid.*',
|
45 |
+
'Ext.data.*',
|
46 |
+
'Ext.dd.*'
|
47 |
+
]);
|
48 |
+
|
49 |
+
Ext.define('DataObject', {
|
50 |
+
extend: 'Ext.data.Model',
|
51 |
+
fields: ['name', 'code','link']
|
52 |
+
});
|
53 |
+
|
54 |
+
Ext.onReady(function(){
|
55 |
+
var dropShipData = <?php echo $dropshipVendorCollection['gridData'] ?>
|
56 |
+
// create the data store
|
57 |
+
var firstGridStore = Ext.create('Ext.data.Store', {
|
58 |
+
model: 'DataObject',
|
59 |
+
data: dropShipData,
|
60 |
+
});
|
61 |
+
var pTypes = Ext.create('Ext.data.Store', {
|
62 |
+
fields : ['link', 'name'],
|
63 |
+
data : <?php echo $this->getAttributeCode(); ?>
|
64 |
+
});
|
65 |
+
|
66 |
+
// Column Model shortcut array
|
67 |
+
var columns1 = [
|
68 |
+
Ext.create('Ext.grid.RowNumberer',{dataIndex:'id',xtype: 'rownumberer',text:'Ranking',align: 'right',width:50}),
|
69 |
+
{text: "Vendor Name", flex: 1,hideable:false, sortable: false, dataIndex: 'name',editor : {
|
70 |
+
xtype: 'textfield',
|
71 |
+
allowBlank:false
|
72 |
+
}},
|
73 |
+
{text: "Vendor Code", flex: 1,hidden:false,hideable:false,sortable: false, dataIndex: 'code'},
|
74 |
+
{text: 'Link Product',dataIndex: 'link',width: 130,
|
75 |
+
renderer : function (value) {
|
76 |
+
switch (value) {
|
77 |
+
case '<?php echo $helper::AMOSOFT_PRODUCT_LINK_CODE_UPC ?>':
|
78 |
+
return '<?php echo $helper::AMOSOFT_PRODUCT_LINK_UPC ?>';
|
79 |
+
break;
|
80 |
+
case '<?php echo $helper::AMOSOFT_PRODUCT_LINK_CODE_MNP ?>':
|
81 |
+
return '<?php echo $helper::AMOSOFT_PRODUCT_LINK_MNP ?>';
|
82 |
+
break;
|
83 |
+
case '<?php echo $helper::AMOSOFT_PRODUCT_LINK_CODE_SKU ?>':
|
84 |
+
return '<?php echo $helper::AMOSOFT_PRODUCT_LINK_SKU ?>';
|
85 |
+
break;
|
86 |
+
default:
|
87 |
+
return '<?php echo $helper::AMOSOFT_PRODUCT_LINK_NONE ?>';
|
88 |
+
}
|
89 |
+
},
|
90 |
+
editor: new Ext.form.field.ComboBox({
|
91 |
+
store : pTypes,
|
92 |
+
displayField : 'name',
|
93 |
+
valueField : 'link',
|
94 |
+
queryMode : 'local',
|
95 |
+
editable: false,
|
96 |
+
listeners: {
|
97 |
+
select: function(combo, records) {
|
98 |
+
var vendCode = combo.up('grid').editingPlugin.activeRecord.data.code;
|
99 |
+
var proLink = records[0].data.link;
|
100 |
+
updateProductLink(vendCode, proLink,arrVendorProductLink)
|
101 |
+
}
|
102 |
+
}
|
103 |
+
})
|
104 |
+
}
|
105 |
+
];
|
106 |
+
|
107 |
+
var columns2 = [
|
108 |
+
{text: "Vendor Name", flex: 1,sortable: false,hideable:false, dataIndex: 'name',editor : {
|
109 |
+
xtype: 'textfield',
|
110 |
+
allowBlank:false
|
111 |
+
}},
|
112 |
+
{text: "Vendor Code", flex: 1,hidden:false,hideable:false,dataIndex: 'code',sortable: false}
|
113 |
+
];
|
114 |
+
|
115 |
+
// create the destination Grid
|
116 |
+
var rowEditing = Ext.create('Ext.grid.plugin.CellEditing', {
|
117 |
+
clicksToMoveEditor: 2,
|
118 |
+
autoCancel: false
|
119 |
+
});
|
120 |
+
// declare the source Grid
|
121 |
+
var firstGrid = Ext.create('Ext.grid.Panel', {
|
122 |
+
viewConfig: {
|
123 |
+
plugins: {
|
124 |
+
ptype: 'gridviewdragdrop',
|
125 |
+
},
|
126 |
+
listeners: {
|
127 |
+
drop: function(node, data, dropRec, dropPosition) {
|
128 |
+
var dropName = dropRec ? dropRec.get('code') : '';
|
129 |
+
var id = 1;
|
130 |
+
|
131 |
+
$$('.x-grid-cell-row-numberer .x-grid-cell-inner ').each(function(item){
|
132 |
+
item.innerHTML = id++;
|
133 |
+
})
|
134 |
+
arrDropship.each(function(item,index){
|
135 |
+
|
136 |
+
if(item.code == data.records[0].get('code')){
|
137 |
+
arrDropship.splice(index,1);
|
138 |
+
}
|
139 |
+
})
|
140 |
+
if(dropPosition === 'undefined' || dropName == '')
|
141 |
+
{
|
142 |
+
|
143 |
+
arrDropship.push({name:data.records[0].get('name'),code:data.records[0].get('code')});
|
144 |
+
|
145 |
+
}else
|
146 |
+
{
|
147 |
+
var firstindexLoc;
|
148 |
+
arrDropship.each(function(item,index){
|
149 |
+
|
150 |
+
if(item.code == dropName){
|
151 |
+
firstindexLoc = index
|
152 |
+
}
|
153 |
+
})
|
154 |
+
if(dropPosition == 'after')
|
155 |
+
{
|
156 |
+
|
157 |
+
firstindexLoc = firstindexLoc+1;
|
158 |
+
arrDropship.splice(firstindexLoc, 0, {name:data.records[0].get('name'),code:data.records[0].get('code')});
|
159 |
+
indexLoc = 0;
|
160 |
+
}else
|
161 |
+
{
|
162 |
+
|
163 |
+
arrDropship.splice(firstindexLoc, 0, {name:data.records[0].get('name'),code:data.records[0].get('code')});
|
164 |
+
indexLoc = 0;
|
165 |
+
|
166 |
+
}
|
167 |
+
}
|
168 |
+
|
169 |
+
var fristIndextemp;
|
170 |
+
arrNonDropship.each(function(item,index){
|
171 |
+
|
172 |
+
if(item.code == data.records[0].get('code')){
|
173 |
+
fristIndextemp = index
|
174 |
+
}
|
175 |
+
})
|
176 |
+
if (arrNonDropship.length > 0 && fristIndextemp > -1) {
|
177 |
+
arrNonDropship.splice(fristIndextemp, 1);
|
178 |
+
}
|
179 |
+
$('message').show();
|
180 |
+
},
|
181 |
+
beforedrop: function(node, data, dropRec, dropPosition,dropHandlers){
|
182 |
+
(data.records[0].data.link) ? updateProductLink(data.records[0].data.code, data.records[0].data.link,arrVendorProductLink) : data.records[0].data.link = ''
|
183 |
+
}
|
184 |
+
}
|
185 |
+
},
|
186 |
+
store : firstGridStore,
|
187 |
+
columns : columns1,
|
188 |
+
stripeRows : true,
|
189 |
+
title : 'Active Vendors',
|
190 |
+
margins : '0 2 0 0',
|
191 |
+
tbar: [{
|
192 |
+
text: 'Add Active Vendors',
|
193 |
+
xtype: 'button',
|
194 |
+
iconCls: 'vendor-add',
|
195 |
+
handler : function() {
|
196 |
+
rowEditing.cancelEdit();
|
197 |
+
|
198 |
+
// Create a model instance
|
199 |
+
var r = Ext.create('DataObject', {
|
200 |
+
name: 'New Vendor',
|
201 |
+
code: 'temp_amosoft_vendor_code',
|
202 |
+
});
|
203 |
+
var rowNumber = ($$('.x-grid-cell-row-numberer .x-grid-cell-inner ').length);
|
204 |
+
firstGridStore.insert(rowNumber, r);
|
205 |
+
rowEditing.startEditByPosition({row: rowNumber, column: 1});
|
206 |
+
}
|
207 |
+
}],
|
208 |
+
plugins: [rowEditing],
|
209 |
+
listeners: {
|
210 |
+
edit: function(e, editor) {
|
211 |
+
var isAvailable;
|
212 |
+
var isNew = false;
|
213 |
+
var rowObject = editor.row.getElementsByClassName('x-grid-cell-inner');
|
214 |
+
if(rowObject[2].innerHTML.match(/temp_amosoft_vendor_code/g)){
|
215 |
+
var tempClass = editor.row.getElementsByClassName('x-grid-cell')[0].className
|
216 |
+
editor.row.getElementsByClassName('x-grid-cell')[0].className = tempClass+' x-grid-dirty-cell';
|
217 |
+
firstGrid.setLoading();
|
218 |
+
Ext.Ajax.request({
|
219 |
+
url: '<?php echo Mage::getSingleton('adminhtml/url')->getUrl('*/*/addNewVendor') ?>',
|
220 |
+
params:{name:editor.record.data['name'],code:rowObject[2].innerHTML,form_key:'<?php echo Mage::getSingleton('core/session')->getFormKey() ?>',rank:$$('.x-grid-cell-row-numberer .x-grid-cell-inner ').length},
|
221 |
+
method : 'POST',
|
222 |
+
success: function(action){
|
223 |
+
var msg_server = Ext.decode(action.responseText);
|
224 |
+
if (msg_server.success == true){
|
225 |
+
// Great, commit the record to hide the red changed flags
|
226 |
+
editor.record.set('code',msg_server.message);
|
227 |
+
editor.record.commit();
|
228 |
+
firstGrid.getSelectionModel().selection = null
|
229 |
+
firstGrid.getView().refresh();
|
230 |
+
firstGrid.setLoading(false);
|
231 |
+
arrDropship.push({name:editor.record.data['name'],code:msg_server.message});
|
232 |
+
isNew = true;
|
233 |
+
Ext.Msg.alert('Vendor '+editor.record.data['name']+' Add Successfuly');
|
234 |
+
$('message').hide();
|
235 |
+
}
|
236 |
+
},
|
237 |
+
failure: function(action){
|
238 |
+
isNew = true;
|
239 |
+
Ext.Msg.alert('Please Try Again Later');
|
240 |
+
firstGrid.setLoading(false);
|
241 |
+
}
|
242 |
+
});
|
243 |
+
}
|
244 |
+
if(editor.record.dirty && !isNew && editor.colIdx == 1){
|
245 |
+
if(arrVendorName.length > 0){
|
246 |
+
var removeIndex
|
247 |
+
arrVendorName.each(function(item,index){
|
248 |
+
|
249 |
+
if(item.code == rowObject[2].innerHTML){
|
250 |
+
isAvailable = true
|
251 |
+
removeIndex = index
|
252 |
+
}
|
253 |
+
})
|
254 |
+
}
|
255 |
+
if(isAvailable){
|
256 |
+
arrVendorName.splice(removeIndex, 1);
|
257 |
+
arrVendorName.push({name:editor.record.data['name'],code:rowObject[2].innerHTML})
|
258 |
+
}else
|
259 |
+
{
|
260 |
+
arrVendorName.push({name:editor.record.data['name'],code:rowObject[2].innerHTML})
|
261 |
+
}
|
262 |
+
$('message').show();}
|
263 |
+
|
264 |
+
return;
|
265 |
+
|
266 |
+
},
|
267 |
+
|
268 |
+
canceledit : function (e, editor){
|
269 |
+
var rowObject = editor.row.getElementsByClassName('x-grid-cell-inner');
|
270 |
+
if(rowObject[2].innerHTML.match(/temp_amosoft_vendor_code/g)){
|
271 |
+
var sm = firstGrid.getSelectionModel();
|
272 |
+
rowEditing.cancelEdit();
|
273 |
+
firstGridStore.remove(sm.getSelection());
|
274 |
+
if (secondGridStore.getCount() > 0) {
|
275 |
+
sm.select(0);
|
276 |
+
}
|
277 |
+
}
|
278 |
+
}
|
279 |
+
},
|
280 |
+
|
281 |
+
selType: 'cellmodel'
|
282 |
+
|
283 |
+
});
|
284 |
+
|
285 |
+
var nonDropShipData = <?php echo $nonDropshipVendorCollection['gridData'] ?>
|
286 |
+
// create the data store
|
287 |
+
var secondGridStore = Ext.create('Ext.data.Store', {
|
288 |
+
model: 'DataObject',
|
289 |
+
data: nonDropShipData,
|
290 |
+
});
|
291 |
+
|
292 |
+
|
293 |
+
|
294 |
+
|
295 |
+
var secondGrid = Ext.create('Ext.grid.Panel', {
|
296 |
+
viewConfig: {
|
297 |
+
plugins: {
|
298 |
+
ptype: 'gridviewdragdrop',
|
299 |
+
//dragGroup: 'secondGridDDGroup',
|
300 |
+
//dropGroup: 'firstGridDDGroup'
|
301 |
+
},
|
302 |
+
listeners: {
|
303 |
+
drop: function(node, data, dropRec, dropPosition) {
|
304 |
+
//var dropOn = dropRec ? ' ' + dropPosition + ' ' + dropRec.get('name') : ' on empty view';
|
305 |
+
var dropName = dropRec ? dropRec.get('code') : '';
|
306 |
+
var code = data.records[0].get('code');
|
307 |
+
var id = 1;
|
308 |
+
|
309 |
+
$$('.x-grid-cell-row-numberer .x-grid-cell-inner ').each(function(item){
|
310 |
+
item.innerHTML = id++;
|
311 |
+
})
|
312 |
+
if(dropPosition === 'undefined' || dropName == '')
|
313 |
+
{
|
314 |
+
|
315 |
+
arrNonDropship.push({name:data.records[0].get('name'),code:data.records[0].get('code')});
|
316 |
+
|
317 |
+
}else
|
318 |
+
{
|
319 |
+
|
320 |
+
var indexLoc;
|
321 |
+
arrDropship.each(function(item,index){
|
322 |
+
|
323 |
+
if(item.code == dropName){
|
324 |
+
indexLoc = index
|
325 |
+
}
|
326 |
+
})
|
327 |
+
arrNonDropship.each(function(item,index){
|
328 |
+
|
329 |
+
if(item.code == data.records[0].get('code')){
|
330 |
+
arrNonDropship.splice(index,1);
|
331 |
+
}
|
332 |
+
})
|
333 |
+
if(dropPosition == 'after')
|
334 |
+
{
|
335 |
+
indexLoc = indexLoc+1;
|
336 |
+
arrNonDropship.splice(indexLoc, 0, {name:data.records[0].get('name'),code:data.records[0].get('code')});
|
337 |
+
indexLoc = 0;
|
338 |
+
}else
|
339 |
+
{
|
340 |
+
arrNonDropship.splice(indexLoc, 0, {name:data.records[0].get('name'),code:data.records[0].get('code')});
|
341 |
+
indexLoc = 0;
|
342 |
+
|
343 |
+
}
|
344 |
+
}
|
345 |
+
updateGridData(data,arrDropship,false);
|
346 |
+
updateGridData(data,arrVendorProductLink,true);
|
347 |
+
|
348 |
+
}
|
349 |
+
}
|
350 |
+
},
|
351 |
+
store : secondGridStore,
|
352 |
+
columns : columns2,
|
353 |
+
stripeRows : true,
|
354 |
+
title : 'Non Active Vendors',
|
355 |
+
margins : '0 0 0 3',
|
356 |
+
plugins: [
|
357 |
+
Ext.create('Ext.grid.plugin.CellEditing', {
|
358 |
+
clicksToEdit : 2,
|
359 |
+
listeners: {
|
360 |
+
edit: function(editor, e, eOpts) {
|
361 |
+
var isAvailable;
|
362 |
+
var rowObject = e.row.getElementsByClassName('x-grid-cell-inner');
|
363 |
+
|
364 |
+
if(e.record.dirty){
|
365 |
+
if(arrVendorName.length > 0){
|
366 |
+
|
367 |
+
|
368 |
+
var removeIndex
|
369 |
+
arrVendorName.each(function(item,index){
|
370 |
+
|
371 |
+
if(item.code == rowObject[1].innerHTML){
|
372 |
+
isAvailable = true
|
373 |
+
removeIndex = index
|
374 |
+
}
|
375 |
+
})
|
376 |
+
}
|
377 |
+
if(isAvailable){
|
378 |
+
arrVendorName.splice(removeIndex, 1);
|
379 |
+
arrVendorName.push({name:e.record.data['name'],code:rowObject[1].innerHTML})
|
380 |
+
}else
|
381 |
+
{
|
382 |
+
arrVendorName.push({name:e.record.data['name'],code:rowObject[1].innerHTML})
|
383 |
+
}
|
384 |
+
$('message').show();}
|
385 |
+
return;
|
386 |
+
|
387 |
+
}
|
388 |
+
}
|
389 |
+
})
|
390 |
+
],
|
391 |
+
selType: 'cellmodel'
|
392 |
+
});
|
393 |
+
|
394 |
+
//Simple 'border layout' panel to house both grids
|
395 |
+
var displayPanel = Ext.create('Ext.Panel', {
|
396 |
+
width : 1205,
|
397 |
+
height : 500,
|
398 |
+
layout : {
|
399 |
+
type: 'hbox',
|
400 |
+
align: 'stretch',
|
401 |
+
padding: 5
|
402 |
+
},
|
403 |
+
renderTo : 'panel',
|
404 |
+
defaults : { flex : 1 }, //auto stretch
|
405 |
+
items : [
|
406 |
+
firstGrid,
|
407 |
+
secondGrid
|
408 |
+
]
|
409 |
+
});
|
410 |
+
|
411 |
+
|
412 |
+
});
|
413 |
+
|
414 |
+
function updateGridData(data,tmpArray,isLink)
|
415 |
+
{
|
416 |
+
var indextemp;
|
417 |
+
tmpArray.each(function(item,index){
|
418 |
+
|
419 |
+
if(item.code == data.records[0].get('code')){
|
420 |
+
indextemp = index
|
421 |
+
}
|
422 |
+
})
|
423 |
+
if (tmpArray.length > 0 && indextemp > -1) {
|
424 |
+
(!isLink) ? tmpArray.splice(indextemp, 1) : tmpArray[indextemp].attr = ""
|
425 |
+
$('message').show();
|
426 |
+
}else
|
427 |
+
{
|
428 |
+
(isLink) ? tmpArray.push({code:data.records[0].get('code'),attr:""}) : ''
|
429 |
+
$('message').hide();
|
430 |
+
}
|
431 |
+
}
|
432 |
+
|
433 |
+
function updateProductLink(vendCode, proLink,prolinkArray) {
|
434 |
+
var isAvailable = false;
|
435 |
+
var removeIndex
|
436 |
+
//var vendCode = combo.up('grid').editingPlugin.activeRecord.data.code;
|
437 |
+
//var proLink = records[0].data.link;
|
438 |
+
if(prolinkArray.length > 0){
|
439 |
+
prolinkArray.each(function(item,index){
|
440 |
+
if(item.code == vendCode){
|
441 |
+
isAvailable = true
|
442 |
+
removeIndex = index
|
443 |
+
}
|
444 |
+
})
|
445 |
+
}
|
446 |
+
if(isAvailable){
|
447 |
+
prolinkArray.splice(removeIndex, 1);
|
448 |
+
prolinkArray.push({code:vendCode,attr:proLink})
|
449 |
+
}else
|
450 |
+
{
|
451 |
+
prolinkArray.push({code:vendCode,attr:proLink})
|
452 |
+
}
|
453 |
+
}
|
454 |
+
</script>
|
455 |
+
|
app/design/adminhtml/default/default/template/amosoft/vendor_upload_product_history.phtml
ADDED
@@ -0,0 +1,63 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
?>
|
9 |
+
<div class="content-header">
|
10 |
+
<table cellspacing="0">
|
11 |
+
<tr>
|
12 |
+
<td style="<?php echo $this->getHeaderWidth() ?>"><?php echo $this->getHeaderHtml() ?></td>
|
13 |
+
<td class="form-buttons"><?php echo $this->getButtonsHtml() ?></td>
|
14 |
+
</tr>
|
15 |
+
</table>
|
16 |
+
</div>
|
17 |
+
<div class="grid">
|
18 |
+
|
19 |
+
<div class="entry-edit">
|
20 |
+
<?php if(count($this->getLogCollection()) > 0 ): ?>
|
21 |
+
<fieldset>
|
22 |
+
<ul class="note-list">
|
23 |
+
<?php $i = 0 ?>
|
24 |
+
<?php foreach ($this->getLogCollection() as $_item): ?>
|
25 |
+
|
26 |
+
<li>
|
27 |
+
<strong><?php echo $_item['amosoft_vendor_code'] ?></strong>
|
28 |
+
<span class="separator">|</span>
|
29 |
+
<strong><?php echo $_item['updated_by'] ?></strong>
|
30 |
+
<span class="separator">|</span>
|
31 |
+
|
32 |
+
<strong><?php echo $_item['success'] ?> successfully updates</strong>
|
33 |
+
<span class="separator">|</span>
|
34 |
+
<strong><?php echo $_item['failure'] ?> failed updates</strong>
|
35 |
+
<?php if(!empty($_item['ftp_error'])): ?>
|
36 |
+
<a href="<?php echo $this->getUrl('*/*/exportErrorCsv',array('vcode'=>$_item['amosoft_vendor_code'], 'vdate'=>$_item['created_at']))?>" onmouseout = " setTimeout(function(){$('simplediv<?php echo $i ?>').hide();return false;},200); " onmouseover="$('simplediv<?php echo $i ?>').show();return false;"><strong><?php echo $_item['ftp_error'] ?> </strong></a>
|
37 |
+
<div id="simplediv<?php echo $i ?>" style="background-color:none;border:1px solid black;display:none;width:500px;height:auto;word-wrap: break-word;padding:3px"><?php
|
38 |
+
$rowData = (!is_null($_item['ftp_error_desc'])) ? $_item['ftp_error_desc'] : $_item['error_id'];
|
39 |
+
echo $this->parseDescription($rowData,$_item['amosoft_vendor_code']); ?></div>
|
40 |
+
<?php endif; ?>
|
41 |
+
<span class="separator">|</span>
|
42 |
+
<strong> <?php echo $this->formatDate($_item['created_at'], 'medium', true); ?></strong>
|
43 |
+
</li>
|
44 |
+
<?php $i++ ?>
|
45 |
+
<?php endforeach; ?>
|
46 |
+
</ul>
|
47 |
+
</fieldset>
|
48 |
+
<?php else :?>
|
49 |
+
<h2>No Data Found</h2>
|
50 |
+
<?php endif; ?>
|
51 |
+
</div>
|
52 |
+
|
53 |
+
|
54 |
+
</div>
|
55 |
+
|
56 |
+
<script type="text/javascript">
|
57 |
+
function popup()
|
58 |
+
{
|
59 |
+
|
60 |
+
}
|
61 |
+
</script>
|
62 |
+
|
63 |
+
|
app/design/adminhtml/default/default/template/amosoft/vendorproducttab.phtml
ADDED
@@ -0,0 +1,62 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
?>
|
9 |
+
<div class="entry-edit custom-options product-custom-options-vendor">
|
10 |
+
|
11 |
+
<div class="entry-edit-head">
|
12 |
+
<h4><?php echo Mage::helper('catalog')->__('Supplier Details') ?></h4>
|
13 |
+
<div class="right"><?php echo $this->getAddButtonHtml() ?></div>
|
14 |
+
</div>
|
15 |
+
|
16 |
+
<div id="product_options_container" class="box">
|
17 |
+
<div id="product_options_container_top_vendor">
|
18 |
+
<!-- If vendor inventory data is available -->
|
19 |
+
<?php if($collection = $this->getAssignedData()): ?>
|
20 |
+
<?php if($collection->count() > 0) { ?>
|
21 |
+
<?php foreach($collection as $vendor){ ?>
|
22 |
+
<div class="option-box" id="vendor_<?php echo $vendor->getId() ?>">
|
23 |
+
<table id="<?php echo $this->getFieldId() ?>_<?php echo $vendor->getId() ?>" class="option-header" cellpadding="0" cellspacing="0">
|
24 |
+
<input type="hidden" id="<?php echo $this->getFieldId() ?>_<?php echo $vendor->getId() ?>_is_delete" name="<?php echo $this->getFieldName() ?>[<?php echo $vendor->getId() ?>][is_delete]" value="" />
|
25 |
+
<input type="hidden" id="<?php echo $this->getFieldId() ?>_<?php echo $vendor->getId() ?>_amosoft_vendor_code" name="<?php echo $this->getFieldName() ?>[<?php echo $vendor->getId() ?>][amosoft_vendor_code]" value="<?php echo $vendor->getAmosoftVendorCode() ?>" />
|
26 |
+
<thead>
|
27 |
+
<tr>
|
28 |
+
<th class="opt-title" style="width:150px;"><?php echo Mage::helper('dropship')->__('Supplier Code') ?></th>
|
29 |
+
<th class="opt-type" style="width:150px;"><?php echo Mage::helper('dropship')->__('Supplier Name') ?></th>
|
30 |
+
<th class="opt-req" style="width:75px;"><?php echo $this->jsQuoteEscape(Mage::helper('dropship')->__('Cost')) ?><span class="required">*</span></th>
|
31 |
+
<th class="opt-req" style="width:75px;"><?php echo $this->jsQuoteEscape(Mage::helper('dropship')->__('Shipping Cost')) ?><span class="required">*</span></th>
|
32 |
+
<th class="opt-order" style="width:75px;"><?php echo Mage::helper('dropship')->__('Inventory') ?><span class="required">*</span></th>
|
33 |
+
<th class="opt-order" style="width:75px;"><?php echo Mage::helper('dropship')->__('Supplier Sku') ?><span class="required">*</span></th>
|
34 |
+
<th class="opt-order" style="width:150px;"><?php echo Mage::helper('dropship')->__('Last Sync') ?><span class="required">*</span></th>
|
35 |
+
<th class="a-right"><?php echo $this->jsQuoteEscape($this->getUpdateDeleteButtonHtml()) ?></th>
|
36 |
+
</tr>
|
37 |
+
</thead>
|
38 |
+
<tr>
|
39 |
+
<td><?php echo $vendor->getAmosoftVendorCode() ?></td>
|
40 |
+
<td><?php echo $vendor->getVendorName() ?></td>
|
41 |
+
<td style = "padding: 5px 5px;"><input style="width: 84px;" type="text" class="required-entry validate-number validate-zero-or-greater input-text vendor-input-text" id="<?php echo $this->getFieldId() ?>_<?php echo $vendor->getId() ?>_cost" name="<?php echo $this->getFieldName() ?>[<?php echo $vendor->getId() ?>][cost]" value="<?php echo $vendor->getCost() ?>"></td>
|
42 |
+
|
43 |
+
<td style = "padding: 5px 5px;"><input style="width: 84px;" type="text" class="required-entry validate-number validate-zero-or-greater input-text vendor-input-text" id="<?php echo $this->getFieldId() ?>_<?php echo $vendor->getId() ?>_cost" name="<?php echo $this->getFieldName() ?>[<?php echo $vendor->getId() ?>][shipping_cost]" value="<?php echo $vendor->getShippingCost() ?>"></td>
|
44 |
+
|
45 |
+
<td style = "padding: 5px 5px;"><input style="width: 84px;" type="text" class="required-entry validate-number validate-zero-or-greater input-text vendor-input-text" id="<?php echo $this->getFieldId() ?>_<?php echo $vendor->getId() ?>_inventory" name="<?php echo $this->getFieldName() ?>[<?php echo $vendor->getId() ?>][stock]" value="<?php echo $vendor->getStock() ?>"></td>
|
46 |
+
<td style = "padding: 5px 5px;"><input style="width: 84px;" type="text" class="required-entry input-text vendor-input-text" id="<?php echo $this->getFieldId() ?>_<?php echo $vendor->getId() ?>amosoft_vendor_sku" name="<?php echo $this->getFieldName() ?>[<?php echo $vendor->getId() ?>][amosoft_vendor_sku]" value="<?php echo $vendor->getAmosoftVendorSku() ?>"></td>
|
47 |
+
<td style = "padding: 5px 5px;"><strong><?php echo $this->formatDate($vendor->getUpdatedAt(), 'medium', true); ?></strong></td>
|
48 |
+
<td> </td>
|
49 |
+
</tr></table></div>
|
50 |
+
<?php } } ?>
|
51 |
+
<?php endif; ?>
|
52 |
+
<!-- end -->
|
53 |
+
</div>
|
54 |
+
<?php echo $this->getOptionsBoxHtml() ?>
|
55 |
+
</div>
|
56 |
+
</div>
|
57 |
+
|
58 |
+
<script type="text/javascript">
|
59 |
+
// re-bind form elements onchange
|
60 |
+
varienWindowOnload(true);
|
61 |
+
|
62 |
+
</script>
|
app/design/adminhtml/default/default/template/amosoft/vendorproducttabhistory.phtml
ADDED
@@ -0,0 +1,37 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
?>
|
9 |
+
<?php ?>
|
10 |
+
<div class="entry-edit">
|
11 |
+
<?php if($this->getInventoryLog()-> count() > 0 ): ?>
|
12 |
+
<fieldset>
|
13 |
+
<ul class="note-list">
|
14 |
+
|
15 |
+
<?php foreach ($this->getInventoryLog() as $_item): ?>
|
16 |
+
<li>
|
17 |
+
<strong><?php echo $_item->getAmosoftVendorCode() ?></strong>
|
18 |
+
<span class="separator">|</span>
|
19 |
+
<strong><?php echo $_item->getAmosoftVendorName() ?></strong>
|
20 |
+
<span class="separator">|</span>
|
21 |
+
<strong><?php echo $_item->getCost() ?></strong>
|
22 |
+
<span class="separator">|</span>
|
23 |
+
<strong><?php echo $_item->getStock() ?></strong>
|
24 |
+
<span class="separator">|</span>
|
25 |
+
<strong><?php echo $_item->getUpdatedBy() ?></strong>
|
26 |
+
<span class="separator">|</span>
|
27 |
+
<strong><?php echo $_item->getActivity() ?></strong>
|
28 |
+
<span class="separator">|</span>
|
29 |
+
<strong><?php echo $this->formatDate($_item->getUpdatedAt(), 'medium', true); ?></strong>
|
30 |
+
</li>
|
31 |
+
<?php endforeach; ?>
|
32 |
+
</ul>
|
33 |
+
</fieldset>
|
34 |
+
<?php else :?>
|
35 |
+
<h2>No Data Found</h2>
|
36 |
+
<?php endif; ?>
|
37 |
+
</div>
|
app/design/adminhtml/default/default/template/amosoft/window.phtml
ADDED
@@ -0,0 +1,107 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Amosoft
|
4 |
+
*
|
5 |
+
* @category Local
|
6 |
+
* @package Amosoft_Dropship
|
7 |
+
*/
|
8 |
+
?>
|
9 |
+
|
10 |
+
<?php if ($this->canShow()): ?>
|
11 |
+
<?php $msg = $this->getNoticeMessageText();?>
|
12 |
+
<script type="text/javascript">
|
13 |
+
//<![CDATA[
|
14 |
+
var messagePopupClosed = false;
|
15 |
+
function openMessagePopup() {
|
16 |
+
var height = $('html-body').getHeight();
|
17 |
+
$('message-popup-window-mask').setStyle({'height':height+'px'});
|
18 |
+
toggleSelectsUnderBlock($('message-popup-window-mask'), false);
|
19 |
+
Element.show('message-popup-window-mask');
|
20 |
+
$('message-popup-window').addClassName('show');
|
21 |
+
}
|
22 |
+
|
23 |
+
function closeApiMessagePopup() {
|
24 |
+
if($('success').value == 1){
|
25 |
+
toggleSelectsUnderBlock($('message-popup-window-mask'), true);
|
26 |
+
Element.hide('message-popup-window-mask');
|
27 |
+
$('message-popup-window').removeClassName('show');
|
28 |
+
messagePopupClosed = true;
|
29 |
+
}else
|
30 |
+
{
|
31 |
+
$('advice-required-entry').show();
|
32 |
+
}
|
33 |
+
}
|
34 |
+
|
35 |
+
Event.observe(window, 'load', openMessagePopup);
|
36 |
+
Event.observe(window, 'keyup', function(evt) {
|
37 |
+
if(messagePopupClosed) return;
|
38 |
+
var code;
|
39 |
+
if (evt.keyCode) code = evt.keyCode;
|
40 |
+
else if (evt.which) code = evt.which;
|
41 |
+
if (code == Event.KEY_ESC) {
|
42 |
+
closeApiMessagePopup();
|
43 |
+
}
|
44 |
+
});
|
45 |
+
|
46 |
+
function saveSaopApi()
|
47 |
+
{
|
48 |
+
$('save_button').addClassName('disabled');
|
49 |
+
$('save_button').disable();
|
50 |
+
if($('api_key').value.length <= 0 ){
|
51 |
+
$('advice-required-entry').show();
|
52 |
+
$('save_button').disabled = false;
|
53 |
+
$('save_button').removeClassName('disabled');
|
54 |
+
return;
|
55 |
+
}
|
56 |
+
new Ajax.Request('<?php echo $this->getUrl('amosoft/adminhtml_sourcing/saveSoapApi') ?>',
|
57 |
+
{
|
58 |
+
method:'get',
|
59 |
+
parameters: {user_id: '<?php echo $msg['user_id']?>',api_key:$('api_key').value },
|
60 |
+
onSuccess: function(transport){
|
61 |
+
|
62 |
+
var response = transport.responseText.evalJSON() || "no response text";
|
63 |
+
$('save_button_text').innerHTML = response.message;
|
64 |
+
$('success').value = response.success
|
65 |
+
$('api_key').disabled = true;
|
66 |
+
$('advice-required-entry').hide();
|
67 |
+
},
|
68 |
+
onFailure: function(){ alert('Something went wrong...please close popup save API password manually (system->web services->SOPA/XML-RPC-Users->amosoft)')
|
69 |
+
$('success').value = 1
|
70 |
+
$('save_button').removeClassName('disabled');
|
71 |
+
$('save_button').disabled = false;
|
72 |
+
}
|
73 |
+
});
|
74 |
+
}
|
75 |
+
|
76 |
+
//]]>
|
77 |
+
</script>
|
78 |
+
|
79 |
+
<div id="message-popup-window-mask" style="display:none;"></div>
|
80 |
+
<div id="message-popup-window" class="message-popup" style="width:547px">
|
81 |
+
<div class="message-popup-head">
|
82 |
+
<a href="#" onclick="closeApiMessagePopup(); return false;" title="<?php echo $this->getCloseText(); ?>"><span><?php echo $this->getCloseText(); ?></span></a>
|
83 |
+
<h2><?php echo $this->getHeaderText(); ?></h2>
|
84 |
+
</div>
|
85 |
+
<div class="message-popup-content" >
|
86 |
+
<div class="message" style="width:489px">
|
87 |
+
<span class="message-icon message-<?php echo $this->getSeverityText();?>" style="background-image:url(<?php echo $this->getSeverityIconsUrl() ?>);"><?php echo $this->getSeverityText();?></span>
|
88 |
+
<div class="message-text" style="width:430px">
|
89 |
+
<h4>Please save below information for future reference</h4>
|
90 |
+
SOAP USER NAME : <b><?php echo $msg['username']; ?></b><br>
|
91 |
+
<?php if(empty($msg['api_password'])): ?>
|
92 |
+
SOAP API KEY : <input class="required-entry input-text"type="password" name="api_key" id="api_key">
|
93 |
+
<input type="hidden" name="success" id="success" value="0">
|
94 |
+
<button title="save" id="save_button" type="button" class="scalable task" onclick="saveSaopApi()" style=""><span><span><span id="save_button_text">Save</span></span></span></button>
|
95 |
+
<div class="validation-advice" id="advice-required-entry" style="display:none">This is a required field.</div>
|
96 |
+
<?php endif; ?>
|
97 |
+
<!-- <hr>
|
98 |
+
REST CONSUMER KEY : <b><?php //echo $msg['consumer_key']; ?></b><br>
|
99 |
+
REST CONSUMER SECRET KEY : <b><?php //echo $msg['consumer_secret']; ?></b><br> -->
|
100 |
+
<hr>
|
101 |
+
<b>This information can always be retrieved by going to dropship -> General Information.</b>
|
102 |
+
</div>
|
103 |
+
|
104 |
+
</div>
|
105 |
+
</div>
|
106 |
+
</div>
|
107 |
+
<?php endif; ?>
|
app/etc/modules/Amosoft_Dropship.xml
ADDED
@@ -0,0 +1,10 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Amosoft_Dropship>
|
5 |
+
<active>true</active>
|
6 |
+
<codePool>local</codePool>
|
7 |
+
<version>0.1.0</version>
|
8 |
+
</Amosoft_Dropship>
|
9 |
+
</modules>
|
10 |
+
</config>
|
js/amosoft/extjs/bootstrap.js
ADDED
@@ -0,0 +1,58 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
/**
|
2 |
+
* Load the library located at the same path with this file
|
3 |
+
*
|
4 |
+
* Will automatically load ext-all-debug.js if any of these conditions is true:
|
5 |
+
* - Current hostname is localhost
|
6 |
+
* - Current hostname is an IP v4 address
|
7 |
+
* - Current protocol is "file:"
|
8 |
+
*
|
9 |
+
* Will load ext-all.js (minified) otherwise
|
10 |
+
*/
|
11 |
+
(function() {
|
12 |
+
|
13 |
+
var scripts = document.getElementsByTagName('script'),
|
14 |
+
localhostTests = [
|
15 |
+
/^localhost$/,
|
16 |
+
/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(:\d{1,5})?\b/ // IP v4
|
17 |
+
],
|
18 |
+
host = window.location.hostname,
|
19 |
+
isDevelopment = null,
|
20 |
+
queryString = window.location.search,
|
21 |
+
test, path, i, ln, scriptSrc, match;
|
22 |
+
|
23 |
+
for (i = 0, ln = scripts.length; i < ln; i++) {
|
24 |
+
scriptSrc = scripts[i].src;
|
25 |
+
|
26 |
+
match = scriptSrc.match(/bootstrap\.js$/);
|
27 |
+
|
28 |
+
if (match) {
|
29 |
+
path = scriptSrc.substring(0, scriptSrc.length - match[0].length);
|
30 |
+
break;
|
31 |
+
}
|
32 |
+
}
|
33 |
+
|
34 |
+
if (queryString.match('(\\?|&)debug') !== null) {
|
35 |
+
isDevelopment = true;
|
36 |
+
}
|
37 |
+
else if (queryString.match('(\\?|&)nodebug') !== null) {
|
38 |
+
isDevelopment = false;
|
39 |
+
}
|
40 |
+
|
41 |
+
if (isDevelopment === null) {
|
42 |
+
for (i = 0, ln = localhostTests.length; i < ln; i++) {
|
43 |
+
test = localhostTests[i];
|
44 |
+
|
45 |
+
if (host.search(test) !== -1) {
|
46 |
+
isDevelopment = true;
|
47 |
+
break;
|
48 |
+
}
|
49 |
+
}
|
50 |
+
}
|
51 |
+
|
52 |
+
if (isDevelopment === null && window.location.protocol === 'file:') {
|
53 |
+
isDevelopment = true;
|
54 |
+
}
|
55 |
+
|
56 |
+
document.write('<script type="text/javascript" src="' + path + 'ext-all' + ((isDevelopment) ? '-debug' : '') + '.js"></script>');
|
57 |
+
|
58 |
+
})();
|
js/amosoft/extjs/css/example.css
ADDED
@@ -0,0 +1,83 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
/*!
|
2 |
+
* Ext JS
|
3 |
+
* Copyright(c) 2006-2011 Sencha Inc.
|
4 |
+
* licensing@sencha.com
|
5 |
+
* http://www.sencha.com/license
|
6 |
+
*/
|
7 |
+
body {
|
8 |
+
font-family:helvetica,tahoma,verdana,sans-serif;
|
9 |
+
padding:20px;
|
10 |
+
padding-top:32px;
|
11 |
+
font-size:13px;
|
12 |
+
}
|
13 |
+
p {
|
14 |
+
margin-bottom:15px;
|
15 |
+
}
|
16 |
+
h1 {
|
17 |
+
font-size:18px;
|
18 |
+
margin-bottom:20px;
|
19 |
+
}
|
20 |
+
h2 {
|
21 |
+
font-size:14px;
|
22 |
+
color:#333;
|
23 |
+
font-weight:bold;
|
24 |
+
margin:10px 0;
|
25 |
+
}
|
26 |
+
.example-info{
|
27 |
+
width:150px;
|
28 |
+
border:1px solid #c3daf9;
|
29 |
+
border-top:1px solid #DCEAFB;
|
30 |
+
border-left:1px solid #DCEAFB;
|
31 |
+
background:#ecf5fe url( info-bg.gif ) repeat-x;
|
32 |
+
font-size:10px;
|
33 |
+
padding:8px;
|
34 |
+
}
|
35 |
+
pre.code{
|
36 |
+
background: #F8F8F8;
|
37 |
+
border: 1px solid #e8e8e8;
|
38 |
+
padding:10px;
|
39 |
+
margin:10px;
|
40 |
+
margin-left:0px;
|
41 |
+
border-left:5px solid #e8e8e8;
|
42 |
+
font-size: 12px !important;
|
43 |
+
line-height:14px !important;
|
44 |
+
}
|
45 |
+
.msg .x-box-mc {
|
46 |
+
font-size:14px;
|
47 |
+
}
|
48 |
+
#msg-div {
|
49 |
+
position:absolute;
|
50 |
+
left:35%;
|
51 |
+
top:10px;
|
52 |
+
width:300px;
|
53 |
+
z-index:20000;
|
54 |
+
}
|
55 |
+
#msg-div .msg {
|
56 |
+
border-radius: 8px;
|
57 |
+
-moz-border-radius: 8px;
|
58 |
+
background: #F6F6F6;
|
59 |
+
border: 2px solid #ccc;
|
60 |
+
margin-top: 2px;
|
61 |
+
padding: 10px 15px;
|
62 |
+
color: #555;
|
63 |
+
}
|
64 |
+
#msg-div .msg h3 {
|
65 |
+
margin: 0 0 8px;
|
66 |
+
font-weight: bold;
|
67 |
+
font-size: 15px;
|
68 |
+
}
|
69 |
+
#msg-div .msg p {
|
70 |
+
margin: 0;
|
71 |
+
}
|
72 |
+
.x-grid3-row-body p {
|
73 |
+
margin:5px 5px 10px 5px !important;
|
74 |
+
}
|
75 |
+
|
76 |
+
.feature-list {
|
77 |
+
margin-bottom: 15px;
|
78 |
+
}
|
79 |
+
.feature-list li {
|
80 |
+
list-style: disc;
|
81 |
+
margin-left: 17px;
|
82 |
+
margin-bottom: 4px;
|
83 |
+
}
|
js/amosoft/extjs/css/ext-all.css
ADDED
@@ -0,0 +1 @@
|
|
Â
|
1 |
+
.x-body{margin:0}img{border:0}.x-border-box,.x-border-box *{box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-webkit-box-sizing:border-box}.x-rtl{direction:rtl}.x-ltr{direction:ltr}.x-clear{overflow:hidden;clear:both;font-size:0;line-height:0;display:table}.x-strict .x-ie7 .x-clear{height:0;width:0}.x-layer{position:absolute!important;overflow:hidden;zoom:1}.x-fixed-layer{position:fixed!important;overflow:hidden;zoom:1}.x-shim{position:absolute;left:0;top:0;overflow:hidden;filter:alpha(opacity=0);opacity:0}.x-hide-display{display:none!important}.x-hide-visibility{visibility:hidden!important}.x-ie6 .x-item-disabled{filter:none}.x-hidden,.x-hide-offsets{display:block!important;visibility:hidden!important;position:absolute!important;top:-10000px!important}.x-hide-nosize{height:0!important;width:0!important}.x-hide-clip{position:absolute!important;clip:rect(0,0,0,0);clip:rect(0 0 0 0)}.x-masked-relative{position:relative}.x-ie-shadow{background-color:#777;display:none;position:absolute;overflow:hidden;zoom:1}.x-unselectable{user-select:none;-o-user-select:none;-ms-user-select:none;-moz-user-select:-moz-none;-webkit-user-select:none;cursor:default}.x-selectable{cursor:auto;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text;user-select:text;-o-user-select:text}.x-list-plain{list-style-type:none;margin:0;padding:0}.x-table-plain{border-collapse:collapse;border-spacing:0;font-size:1em}.x-frame-tl,.x-frame-tr,.x-frame-tc,.x-frame-bl,.x-frame-br,.x-frame-bc{overflow:hidden;background-repeat:no-repeat}.x-frame-tc,.x-frame-bc{background-repeat:repeat-x}.x-frame-mc{background-repeat:repeat-x;overflow:hidden}.x-proxy-el{position:absolute;background:#b4b4b4;filter:alpha(opacity=80);opacity:.8}.x-css-shadow{position:absolute;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px}.x-item-disabled,.x-item-disabled *{cursor:default}.x-box-item{position:absolute!important;left:0;top:0}div.x-editor{overflow:visible}.x-mask{z-index:100;position:absolute;width:100%;height:100%;zoom:1}.x-mask-shim{z-index:100;position:absolute;top:0;left:0;width:100%;height:100%}.x-mask-msg{z-index:20001;position:absolute}.x-progress{position:relative;border-style:solid;overflow:hidden}.x-progress-bar{overflow:hidden;position:absolute;width:0;height:100%}.x-progress-text{overflow:hidden;position:absolute}.x-btn{display:inline-block;position:relative;zoom:1;*display:inline;outline:0;cursor:pointer;white-space:nowrap;vertical-align:middle;text-decoration:none}.x-btn-wrap{position:relative;display:block}.x-btn-button{position:relative;display:block;text-decoration:none;overflow:hidden;zoom:1}.x-btn-inner{display:block;white-space:nowrap;overflow:hidden;zoom:1}.x-btn-icon-el{top:0;right:0;bottom:0;left:0;position:absolute;background-repeat:no-repeat;text-align:center}.x-btn-inner-center{text-align:center}.x-btn-inner-left{text-align:left}.x-btn-inner-right{text-align:right}.x-box-layout-ct{overflow:hidden;zoom:1}.x-box-target{position:absolute;width:20000px;top:0;left:0;height:1px}.x-box-inner{overflow:hidden;zoom:1;position:relative;left:0;top:0}.x-horizontal-box-overflow-body{float:left}.x-box-scroller{position:relative;background-repeat:no-repeat}.x-box-scroller-left,.x-box-scroller-right{float:left;height:100%;z-index:5}.x-box-scroller-top .x-box-scroller,.x-box-scroller-bottom .x-box-scroller{line-height:0;font-size:0;background-position:center 0}.x-box-menu-after{float:right}.x-toolbar-text{white-space:nowrap}.x-toolbar-separator{display:block;font-size:1px;overflow:hidden;cursor:default;border:0;width:0;height:0;line-height:0}.x-quirks .x-ie .x-toolbar .x-toolbar-separator-horizontal{width:2px}.x-toolbar-scroller{padding-left:0}.x-toolbar-plain{border:0}.x-docked{position:absolute!important;z-index:1}.x-docked-vertical{position:static}.x-docked-top{border-bottom-width:0!important}.x-docked-bottom{border-top-width:0!important}.x-docked-left{border-right-width:0!important}.x-docked-right{border-left-width:0!important}.x-docked-noborder-top{border-top-width:0!important}.x-docked-noborder-right{border-right-width:0!important}.x-docked-noborder-bottom{border-bottom-width:0!important}.x-docked-noborder-left{border-left-width:0!important}.x-noborder-l{border-left-width:0!important}.x-noborder-b{border-bottom-width:0!important}.x-noborder-bl{border-bottom-width:0!important;border-left-width:0!important}.x-noborder-r{border-right-width:0!important}.x-noborder-rl{border-right-width:0!important;border-left-width:0!important}.x-noborder-rb{border-right-width:0!important;border-bottom-width:0!important}.x-noborder-rbl{border-right-width:0!important;border-bottom-width:0!important;border-left-width:0!important}.x-noborder-t{border-top-width:0!important}.x-noborder-tl{border-top-width:0!important;border-left-width:0!important}.x-noborder-tb{border-top-width:0!important;border-bottom-width:0!important}.x-noborder-tbl{border-top-width:0!important;border-bottom-width:0!important;border-left-width:0!important}.x-noborder-tr{border-top-width:0!important;border-right-width:0!important}.x-noborder-trl{border-top-width:0!important;border-right-width:0!important;border-left-width:0!important}.x-noborder-trb{border-top-width:0!important;border-right-width:0!important;border-bottom-width:0!important}.x-noborder-trbl{border-width:0!important}.x-header-icon{background-repeat:no-repeat;background-position:0 0;vertical-align:middle;text-align:center}.x-header-text-container{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.x-dd-drag-proxy,.x-dd-drag-current{z-index:1000000!important;pointer-events:none}.x-dd-drag-repair .x-dd-drag-ghost{filter:alpha(opacity=60);opacity:.6}.x-dd-drag-repair .x-dd-drop-icon{display:none}.x-dd-drag-ghost{filter:alpha(opacity=85);opacity:.85;padding:5px;padding-left:20px;white-space:nowrap;color:#000;font:normal 11px tahoma,arial,verdana,sans-serif;border:1px solid;border-color:#ddd #bbb #bbb #ddd;background-color:#fff}.x-dd-drop-icon{position:absolute;top:3px;left:3px;display:block;width:16px;height:16px;background-color:transparent;background-position:center;background-repeat:no-repeat;z-index:1}.x-dd-drop-ok .x-dd-drop-icon{background-image:url(images/dd/drop-yes.gif)}.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url(images/dd/drop-add.gif)}.x-dd-drop-nodrop div.x-dd-drop-icon{background-image:url(images/dd/drop-no.gif)}.x-panel,.x-plain{overflow:hidden;position:relative}.x-panel{outline:0}.x-ie .x-panel-header,.x-ie .x-panel-header-tl,.x-ie .x-panel-header-tc,.x-ie .x-panel-header-tr,.x-ie .x-panel-header-ml,.x-ie .x-panel-header-mc,.x-ie .x-panel-header-mr,.x-ie .x-panel-header-bl,.x-ie .x-panel-header-bc,.x-ie .x-panel-header-br{zoom:1}.x-ie8 td.x-frame-mc{vertical-align:top}.x-panel-body{overflow:hidden;position:relative}.x-nlg .x-panel-header-vertical .x-frame-mc{background-repeat:repeat-y}.x-panel-header-plain,.x-panel-body-plain{border:0;padding:0}.x-tip{position:absolute;overflow:visible}.x-tip-body{overflow:hidden;position:relative}.x-tip-anchor{position:absolute;overflow:hidden;border-style:solid}.x-table-layout{font-size:1em}.x-btn-group{position:relative;overflow:hidden}.x-btn-group-body{position:relative;zoom:1}.x-btn-group-body .x-table-layout-cell{vertical-align:top}.x-viewport,.x-viewport body{margin:0;padding:0;border:0 none;overflow:hidden;height:100%;position:static}.x-window{outline:0;overflow:hidden}.x-window .x-window-wrap{position:relative}.x-window-body{position:relative;overflow:hidden}.x-window-body-plain{background:transparent}.x-form-item-label{display:block}.x-form-item-label-right{text-align:right}.x-form-item-label-top{display:block;zoom:1}.x-form-invalid-icon{overflow:hidden}.x-form-invalid-icon ul{display:none}.x-form-textarea{overflow:auto;resize:none}.x-safari.x-mac .x-form-textarea{margin-bottom:-2px}.x-form-display-field-body{vertical-align:top}.x-form-cb-wrap{vertical-align:top}.x-form-cb{vertical-align:top;overflow:hidden;padding:0;border:0}.x-form-cb::-moz-focus-inner{padding:0;border:0}.x-form-cb-label{display:inline-block;zoom:1}.x-fieldset{display:block;position:relative}.x-fieldset-header{overflow:hidden}.x-fieldset-header .x-form-item,.x-fieldset-header .x-tool{float:left}.x-fieldset-header .x-form-cb-wrap{font-size:0;line-height:0}.x-fieldset-header .x-form-cb{margin:0}.x-fieldset-header-text{float:left}.x-webkit *:focus{outline:none!important}.x-form-item{vertical-align:top;table-layout:fixed}.x-form-item-body{position:relative}.x-form-form-item td{border-top:1px solid transparent}.x-form-trigger{cursor:pointer;overflow:hidden;background-repeat:no-repeat}.x-item-disabled .x-form-trigger{cursor:default}.x-trigger-noedit{cursor:default}.x-form-trigger-wrap{vertical-align:top;border-collapse:separate}.x-form-spinner-up,.x-form-spinner-down{font-size:0}.x-datepicker{position:relative}.x-datepicker-inner{table-layout:fixed;width:100%;border-collapse:separate}.x-datepicker-cell{padding:0}.x-datepicker-header{position:relative;zoom:1}.x-datepicker-arrow{position:absolute;outline:0;font-size:0}.x-datepicker-column-header{padding:0}.x-datepicker-date{display:block;zoom:1;text-decoration:none}.x-monthpicker{position:absolute;left:0;top:0}.x-monthpicker-body{height:100%}.x-monthpicker-months,.x-monthpicker-years{float:left;height:100%}.x-monthpicker-item{float:left}.x-monthpicker-item-inner{display:block;text-decoration:none}.x-monthpicker-yearnav-button-ct{float:left;text-align:center}.x-monthpicker-yearnav-button{display:inline-block;outline:0;font-size:0}.x-monthpicker-buttons{position:absolute;bottom:0;width:100%}.x-strict .x-ie6 .x-monthpicker-buttons{bottom:-1px}.x-form-file-btn{overflow:hidden}.x-form-file-input{border:0;position:absolute;cursor:pointer;top:-2px;right:-2px;filter:alpha(opacity=0);opacity:0;font-size:1000px}.x-form-item-hidden{margin:0}.x-color-picker-item{float:left;text-decoration:none}.x-color-picker-item-inner{display:block;font-size:1px}.x-html-editor-tb .x-toolbar{position:static!important}.x-htmleditor-iframe{display:block;overflow:auto}.x-fit-item{position:relative}.x-grid-row,.x-grid-data-row{outline:0}.x-grid-view{overflow:hidden;position:relative}.x-grid-table{table-layout:fixed;border-collapse:separate}.x-grid-td{overflow:hidden;border-width:0;vertical-align:top}.x-grid-cell-inner{overflow:hidden;white-space:nowrap;zoom:1}.x-grid-resize-marker{position:absolute;z-index:5;top:0}.col-move-top,.col-move-bottom{position:absolute;top:0;line-height:0;font-size:0;overflow:hidden;z-index:20000;background:no-repeat center top transparent}.x-grid-header-ct{cursor:default}.x-column-header{position:absolute;overflow:hidden;background-repeat:repeat-x}.x-column-header-inner{zoom:1;white-space:nowrap;position:relative;overflow:hidden}.x-column-header-text{white-space:nowrap;background-repeat:no-repeat;zoom:1;display:inline-block}.x-column-header-trigger{display:none;height:100%;background-repeat:no-repeat;position:absolute;right:0;top:0;z-index:2}.x-column-header-over .x-column-header-trigger,.x-column-header-open .x-column-header-trigger{display:block}.x-column-header-align-right{text-align:right}.x-column-header-align-left{text-align:left}.x-column-header-align-center{text-align:center}.x-grid-cell-inner-action-col{line-height:0;font-size:0}.x-grid-cell-inner-checkcolumn{line-height:0;font-size:0}.x-row-numberer .x-column-header-inner{text-overflow:clip}.x-grid-group,.x-grid-group-body,.x-grid-group-hd{zoom:1}.x-grid-group-hd{white-space:nowrap}.x-grid-row-body-hidden,.x-grid-group-collapsed{display:none}.x-grid-rowbody{zoom:1}.x-grid-row-body-hidden{display:none}td.x-grid-rowwrap .x-grid-table{border:0}td.x-grid-rowwrap .x-grid-cell{border-bottom:0;background-color:transparent}.x-grid-editor .x-form-cb-wrap{text-align:center}.x-grid-editor .x-form-display-field{margin:0;white-space:nowrap;overflow:hidden}.x-grid-editor div.x-form-action-col-field{line-height:0}.x-grid-row-editor{position:absolute;overflow:visible;z-index:1}.x-grid-row-editor-buttons{position:absolute;white-space:nowrap}.x-grid-row-expander{font-size:0;line-height:0}.x-abs-layout-ct{position:relative}.x-abs-layout-item{position:absolute!important}.x-splitter{font-size:1px}.x-splitter-horizontal{cursor:e-resize;cursor:row-resize}.x-splitter-vertical{cursor:e-resize;cursor:col-resize}.x-splitter-collapsed,.x-splitter-horizontal-noresize,.x-splitter-vertical-noresize{cursor:default}.x-splitter-active{z-index:4}.x-collapse-el{position:absolute;background-repeat:no-repeat}.x-border-layout-ct{overflow:hidden;zoom:1}.x-border-layout-ct{position:relative}.x-border-region-slide-in{z-index:5}.x-region-collapsed-placeholder{z-index:4}.x-column{float:left}.x-ie6 .x-column{display:inline}.x-quirks .x-ie .x-form-layout-table,.x-quirks .x-ie .x-form-layout-table tbody tr.x-form-item{position:relative}.x-form-layout-table{border-collapse:separate;border-spacing:0 2px}.x-ie6 .x-form-layout-table{border-collapse:collapse;border-spacing:0}.x-menu{outline:0}.x-menu-item{white-space:nowrap;overflow:hidden}.x-menu-item-cmp .x-field-label-cell{vertical-align:middle}.x-menu-icon-separator{position:absolute;top:0;z-index:0;height:100%;overflow:hidden}.x-menu-plain .x-menu-icon-separator{display:none}.x-menu-item-link{text-decoration:none;outline:0;zoom:1}.x-menu-item-text{zoom:1}.x-menu-item-icon,.x-menu-item-icon-right,.x-menu-item-arrow{position:absolute;text-align:center}.x-resizable-overlay{position:absolute;left:0;top:0;width:100%;height:100%;display:none;z-index:200000;background-color:#fff;filter:alpha(opacity=0);opacity:0}.x-slider{outline:0;zoom:1;position:relative}.x-slider-inner{position:relative;left:0;top:0;overflow:visible;zoom:1}.x-slider-vert .x-slider-inner{background:repeat-y 0 0}.x-slider-end{zoom:1}.x-slider-thumb{position:absolute;background:no-repeat 0 0}.x-slider-horz .x-slider-thumb{left:0}.x-slider-vert .x-slider-thumb{bottom:0}a.x-tab{text-decoration:none}.x-tab-bar{position:relative}.x-column-header-checkbox .x-column-header-text{display:block;background-repeat:no-repeat;font-size:0}.x-grid-cell-row-checker{vertical-align:middle;background-repeat:no-repeat;font-size:0}.x-tab{display:block;white-space:nowrap;z-index:1}.x-tab-active{z-index:3}.x-tab-wrap{display:block;position:relative}.x-tab-button{zoom:1;display:block;outline:0}.x-tab-inner{display:block;text-align:center;white-space:nowrap;text-overflow:ellipsis;-o-text-overflow:ellipsis;overflow:hidden;zoom:1}.x-btn-icon-el{top:0;right:0;bottom:0;left:0;position:absolute;background-repeat:no-repeat;text-align:center}.x-tab-bar{z-index:1}.x-tab-bar-body{z-index:2;position:relative}.x-tab-bar-strip{position:absolute;line-height:0;font-size:0;z-index:1}.x-tab-bar-horizontal .x-tab-bar-strip{width:100%;left:0}.x-tab-bar-vertical .x-tab-bar-strip{height:100%;top:0}.x-tab-bar-strip-top{bottom:0}.x-tab-bar-strip-bottom{top:0}.x-tab-bar-strip-left{right:0}.x-tab-bar-strip-right{left:0}.x-tab-bar-plain{background:transparent!important}.x-tab-icon-el{position:absolute;background-repeat:no-repeat;top:0;left:0;right:auto;bottom:0}.x-tab-close-btn{display:block;position:absolute;font-size:0;line-height:0;background:no-repeat}.x-tab-mc{overflow:visible}.x-autowidth-table .x-grid-table{table-layout:auto;width:auto!important}.x-tree-view{overflow:hidden}.x-tree-elbow-img,.x-tree-icon{background-repeat:no-repeat;background-position:0 center;vertical-align:top}.x-tree-checkbox{border:0;padding:0;vertical-align:top;position:relative;background-color:transparent}.x-tree-animator-wrap{overflow:hidden}.x-tree-node-text{zoom:1}.x-surface{display:-moz-inline-stack;display:inline-block;vertical-align:middle;*vertical-align:auto;zoom:1;*display:inline;overflow:hidden}.rvml{behavior:url(#default#VML)}.x-surface tspan{user-select:none;-o-user-select:none;-ms-user-select:none;-moz-user-select:-moz-none;-webkit-user-select:none;cursor:default}.x-vml-sprite{position:absolute;left:0;top:0;width:1px;height:1px}.x-vml-group{position:absolute;left:0;top:0;width:1000px;height:1000px}.x-vml-measure-span{position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;display:inline}.x-vml-base{position:relative;top:0;left:0;overflow:hidden;display:inline-block}.x-vml-base{position:relative;top:0;left:0;overflow:hidden;display:inline-block}svg,vml{overflow:hidden}.x-body{color:black;font-size:12px;font-family:tahoma,arial,verdana,sans-serif}.x-animating-size,.x-collapsed{overflow:hidden!important}.x-editor .x-form-item-body{padding-bottom:0}.x-focus-element{position:absolute;top:-10px;left:-10px;width:0;height:0}.x-focus-frame{position:absolute;left:0;top:0;z-index:100000000;width:0;height:0}.x-focus-frame-top,.x-focus-frame-bottom,.x-focus-frame-left,.x-focus-frame-right{position:absolute;top:0;left:0}.x-focus-frame-top,.x-focus-frame-bottom{border-top:solid 2px #15428b;height:2px}.x-focus-frame-left,.x-focus-frame-right{border-left:solid 2px #15428b;width:2px}.x-mask{filter:alpha(opacity=50);opacity:.5;background:#ccc}.x-mask-msg{padding:2px;border-style:solid;border-width:1px;border-color:#99bce8;background-image:none;background-color:#dfe9f6}.x-mask-msg-inner{padding:0 5px;border-style:solid;border-width:1px;border-color:#a3bad9;background-color:#eee;color:#222;font:normal 11px tahoma,arial,verdana,sans-serif}.x-mask-msg-text{padding:5px 5px 5px 20px;background-image:url(images/grid/loading.gif);background-repeat:no-repeat;background-position:0 center}.x-progress-default{background-color:#e0e8f3;border-width:1px;height:20px;border-color:#6594cf}.x-content-box .x-progress-default{height:18px}.x-progress-default .x-progress-bar-default{background-image:none;background-color:#73a3e0;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#b2ccee),color-stop(50%,#88b1e5),color-stop(51%,#73a3e0),color-stop(100%,#5e96db));background-image:-webkit-linear-gradient(top,#b2ccee,#88b1e5 50%,#73a3e0 51%,#5e96db);background-image:-moz-linear-gradient(top,#b2ccee,#88b1e5 50%,#73a3e0 51%,#5e96db);background-image:-o-linear-gradient(top,#b2ccee,#88b1e5 50%,#73a3e0 51%,#5e96db);background-image:linear-gradient(top,#b2ccee,#88b1e5 50%,#73a3e0 51%,#5e96db)}.x-nlg .x-progress-default .x-progress-bar-default{background:repeat-x;background-image:url(images/progress/progress-default-bg.gif)}.x-progress-default .x-progress-text{color:white;font-weight:bold;font-size:11px;text-align:center;line-height:18px}.x-progress-default .x-progress-text-back{color:#396295;line-height:18px}.x-progress-default .x-progress-bar-default:after{display:none;content:"x-slicer:bg:url(images/progress/progress-default-bg.gif)"}.x-btn-default-small{border-color:#d1d1d1}.x-btn-default-small{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:2px 2px 2px 2px;border-width:1px;border-style:solid;background-image:none;background-color:white;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(48%,#f9f9f9),color-stop(52%,#e2e2e2),color-stop(100%,#e7e7e7));background-image:-webkit-linear-gradient(top,#fff,#f9f9f9 48%,#e2e2e2 52%,#e7e7e7);background-image:-moz-linear-gradient(top,#fff,#f9f9f9 48%,#e2e2e2 52%,#e7e7e7);background-image:-o-linear-gradient(top,#fff,#f9f9f9 48%,#e2e2e2 52%,#e7e7e7);background-image:linear-gradient(top,#fff,#f9f9f9 48%,#e2e2e2 52%,#e7e7e7)}.x-btn-default-small-mc{background-image:url(images/btn/btn-default-small-fbg.gif);background-position:0 top;background-color:white}.x-nlg .x-btn-default-small{background-image:url(images/btn/btn-default-small-bg.gif);background-position:0 top}.x-nbr .x-btn-default-small{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent;background-image:none}body.x-nbr .x-btn-default-small-frameInfo{font-family:th-3-3-3-3-1-1-1-1-2-2-2-2}.x-btn-default-small-tl{background-position:0 -6px}.x-btn-default-small-tr{background-position:right -9px}.x-btn-default-small-bl{background-position:0 -12px}.x-btn-default-small-br{background-position:right -15px}.x-btn-default-small-ml{background-position:0 top}.x-btn-default-small-mr{background-position:right top}.x-btn-default-small-tc{background-position:0 0}.x-btn-default-small-bc{background-position:0 -3px}.x-btn-default-small-tr,.x-btn-default-small-br,.x-btn-default-small-mr{padding-right:3px}.x-btn-default-small-tl,.x-btn-default-small-bl,.x-btn-default-small-ml{padding-left:3px}.x-btn-default-small-tc{height:3px}.x-btn-default-small-bc{height:3px}.x-btn-default-small-tl,.x-btn-default-small-bl,.x-btn-default-small-tr,.x-btn-default-small-br,.x-btn-default-small-tc,.x-btn-default-small-bc,.x-btn-default-small-ml,.x-btn-default-small-mr{zoom:1;background-image:url(images/btn/btn-default-small-corners.gif)}.x-btn-default-small-ml,.x-btn-default-small-mr{zoom:1;background-image:url(images/btn/btn-default-small-sides.gif)}.x-btn-default-small-mc{padding:0}.x-strict .x-ie7 .x-btn-default-small-tl,.x-strict .x-ie7 .x-btn-default-small-bl{position:relative;right:0}.x-btn-default-small:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/btn/btn-default-small-fbg.gif), bg:url(images/btn/btn-default-small-bg.gif), corners:url(images/btn/btn-default-small-corners.gif), sides:url(images/btn/btn-default-small-sides.gif)"}.x-btn-default-small .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;padding:0 4px}.x-btn-default-small .x-btn-arrow{background-image:url(images/button/arrow.gif)}.x-btn-default-small .x-btn-arrow-right{padding-right:12px}.x-btn-default-small .x-btn-arrow-bottom{padding-bottom:12px}.x-btn-default-small .x-btn-glyph{font-size:16px;line-height:16px;color:#333;opacity:.5}.x-ie8m .x-btn-default-small .x-btn-glyph{color:#999}.x-btn-default-small-disabled{border-color:#e1e1e1;background-image:none;background-color:#f7f7f7;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f7f7f7),color-stop(48%,#f1f1f1),color-stop(52%,#dadada),color-stop(100%,#dfdfdf));background-image:-webkit-linear-gradient(top,#f7f7f7,#f1f1f1 48%,#dadada 52%,#dfdfdf);background-image:-moz-linear-gradient(top,#f7f7f7,#f1f1f1 48%,#dadada 52%,#dfdfdf);background-image:-o-linear-gradient(top,#f7f7f7,#f1f1f1 48%,#dadada 52%,#dfdfdf);background-image:linear-gradient(top,#f7f7f7,#f1f1f1 48%,#dadada 52%,#dfdfdf)}.x-btn-default-small-icon .x-btn-button,.x-btn-default-small-noicon .x-btn-button{height:16px}.x-btn-default-small-icon .x-btn-inner,.x-btn-default-small-noicon .x-btn-inner{line-height:16px}.x-btn-default-small-icon .x-btn-arrow-right .x-btn-inner,.x-btn-default-small-noicon .x-btn-arrow-right .x-btn-inner,.x-btn-default-small-icon-text-left .x-btn-arrow-right .x-btn-inner{padding-right:0}.x-btn-default-small-icon .x-btn-inner{width:16px;padding:0}.x-btn-default-small-icon .x-btn-icon-el{width:16px;height:16px}.x-btn-default-small-icon-text-left .x-btn-button{height:16px}.x-btn-default-small-icon-text-left .x-btn-inner{line-height:16px;padding-left:20px}.x-btn-default-small-icon-text-left .x-btn-icon-el{width:16px;right:auto}.x-ie6 .x-btn-default-small-icon-text-left .x-btn-icon-el,.x-quirks .x-btn-default-small-icon-text-left .x-btn-icon-el{height:16px}.x-btn-default-small-icon-text-right .x-btn-button{height:16px}.x-btn-default-small-icon-text-right .x-btn-inner{line-height:16px;padding-right:20px}.x-btn-default-small-icon-text-right .x-btn-icon-el{width:16px;left:auto}.x-ie6 .x-btn-default-small-icon-text-right .x-btn-icon-el,.x-quirks .x-btn-default-small-icon-text-right .x-btn-icon-el{height:16px}.x-btn-default-small-icon-text-top .x-btn-inner{padding-top:20px}.x-btn-default-small-icon-text-top .x-btn-icon-el{height:16px;bottom:auto}.x-ie6 .x-btn-default-small-icon-text-top .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-small-icon-text-top .x-btn-icon-el{width:100%}.x-btn-default-small-icon-text-bottom .x-btn-inner{padding-bottom:20px}.x-btn-default-small-icon-text-bottom .x-btn-icon-el{height:16px;top:auto}.x-ie6 .x-btn-default-small-icon-text-bottom .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-small-icon-text-bottom .x-btn-icon-el{width:100%}.x-btn-default-small-over{border-color:#b0ccf2;background-image:none;background-color:#e4f3ff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#e4f3ff),color-stop(48%,#d9edff),color-stop(52%,#c2d8f2),color-stop(100%,#c6dcf6));background-image:-webkit-linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6);background-image:-moz-linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6);background-image:-o-linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6);background-image:linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6)}.x-btn-default-small-focus{border-color:#b0ccf2;background-image:none;background-color:#e4f3ff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#e4f3ff),color-stop(48%,#d9edff),color-stop(52%,#c2d8f2),color-stop(100%,#c6dcf6));background-image:-webkit-linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6);background-image:-moz-linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6);background-image:-o-linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6);background-image:linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6)}.x-btn-default-small-menu-active,.x-btn-default-small-pressed{border-color:#9ebae1;background-image:none;background-color:#b6cbe4;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#b6cbe4),color-stop(48%,#bfd2e6),color-stop(52%,#8dc0f5),color-stop(100%,#98c5f5));background-image:-webkit-linear-gradient(top,#b6cbe4,#bfd2e6 48%,#8dc0f5 52%,#98c5f5);background-image:-moz-linear-gradient(top,#b6cbe4,#bfd2e6 48%,#8dc0f5 52%,#98c5f5);background-image:-o-linear-gradient(top,#b6cbe4,#bfd2e6 48%,#8dc0f5 52%,#98c5f5);background-image:linear-gradient(top,#b6cbe4,#bfd2e6 48%,#8dc0f5 52%,#98c5f5)}.x-btn-default-small-over .x-frame-tl,.x-btn-default-small-over .x-frame-bl,.x-btn-default-small-over .x-frame-tr,.x-btn-default-small-over .x-frame-br,.x-btn-default-small-over .x-frame-tc,.x-btn-default-small-over .x-frame-bc{background-image:url(images/btn/btn-default-small-over-corners.gif)}.x-btn-default-small-over .x-frame-ml,.x-btn-default-small-over .x-frame-mr{background-image:url(images/btn/btn-default-small-over-sides.gif)}.x-btn-default-small-over .x-frame-mc{background-color:#e4f3ff;background-image:url(images/btn/btn-default-small-over-fbg.gif)}.x-btn-default-small-focus .x-frame-tl,.x-btn-default-small-focus .x-frame-bl,.x-btn-default-small-focus .x-frame-tr,.x-btn-default-small-focus .x-frame-br,.x-btn-default-small-focus .x-frame-tc,.x-btn-default-small-focus .x-frame-bc{background-image:url(images/btn/btn-default-small-focus-corners.gif)}.x-btn-default-small-focus .x-frame-ml,.x-btn-default-small-focus .x-frame-mr{background-image:url(images/btn/btn-default-small-focus-sides.gif)}.x-btn-default-small-focus .x-frame-mc{background-color:#e4f3ff;background-image:url(images/btn/btn-default-small-focus-fbg.gif)}.x-btn-default-small-menu-active .x-frame-tl,.x-btn-default-small-menu-active .x-frame-bl,.x-btn-default-small-menu-active .x-frame-tr,.x-btn-default-small-menu-active .x-frame-br,.x-btn-default-small-menu-active .x-frame-tc,.x-btn-default-small-menu-active .x-frame-bc,.x-btn-default-small-pressed .x-frame-tl,.x-btn-default-small-pressed .x-frame-bl,.x-btn-default-small-pressed .x-frame-tr,.x-btn-default-small-pressed .x-frame-br,.x-btn-default-small-pressed .x-frame-tc,.x-btn-default-small-pressed .x-frame-bc{background-image:url(images/btn/btn-default-small-pressed-corners.gif)}.x-btn-default-small-menu-active .x-frame-ml,.x-btn-default-small-menu-active .x-frame-mr,.x-btn-default-small-pressed .x-frame-ml,.x-btn-default-small-pressed .x-frame-mr{background-image:url(images/btn/btn-default-small-pressed-sides.gif)}.x-btn-default-small-menu-active .x-frame-mc,.x-btn-default-small-pressed .x-frame-mc{background-color:#b6cbe4;background-image:url(images/btn/btn-default-small-pressed-fbg.gif)}.x-btn-default-small-disabled .x-frame-tl,.x-btn-default-small-disabled .x-frame-bl,.x-btn-default-small-disabled .x-frame-tr,.x-btn-default-small-disabled .x-frame-br,.x-btn-default-small-disabled .x-frame-tc,.x-btn-default-small-disabled .x-frame-bc{background-image:url(images/btn/btn-default-small-disabled-corners.gif)}.x-btn-default-small-disabled .x-frame-ml,.x-btn-default-small-disabled .x-frame-mr{background-image:url(images/btn/btn-default-small-disabled-sides.gif)}.x-btn-default-small-disabled .x-frame-mc{background-color:#f7f7f7;background-image:url(images/btn/btn-default-small-disabled-fbg.gif)}.x-nlg .x-btn-default-small-over{background-image:url(images/btn/btn-default-small-over-bg.gif)}.x-nlg .x-btn-default-small-focus{background-image:url(images/btn/btn-default-small-focus-bg.gif)}.x-nlg .x-btn-default-small-menu-active,.x-nlg .x-btn-default-small-pressed{background-image:url(images/btn/btn-default-small-pressed-bg.gif)}.x-nlg .x-btn-default-small-disabled{background-image:url(images/btn/btn-default-small-disabled-bg.gif)}.x-nbr .x-btn-default-small{background-image:none}.x-btn-default-small .x-btn-split-right{background-image:url(images/button/s-arrow.gif);padding-right:14px}.x-btn-default-small .x-btn-split-bottom{background-image:url(images/button/s-arrow-b.gif);padding-bottom:14px}.x-btn-default-small-over .x-btn-split-right{background-image:url(images/button/s-arrow-o.gif)}.x-btn-default-small-over .x-btn-split-bottom{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-default-small-disabled .x-btn-inner,.x-btn-default-small-disabled .x-btn-icon-el{filter:alpha(opacity=50);opacity:.5}.x-btn-default-small-over:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-over-corners.gif), sides:url(images/btn/btn-default-small-over-sides.gif), frame-bg:url(images/btn/btn-default-small-over-fbg.gif), bg:url(images/btn/btn-default-small-over-bg.gif)"}.x-btn-default-small-focus:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-focus-corners.gif), sides:url(images/btn/btn-default-small-focus-sides.gif), frame-bg:url(images/btn/btn-default-small-focus-fbg.gif), bg:url(images/btn/btn-default-small-focus-bg.gif)"}.x-btn-default-small-pressed:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-pressed-corners.gif), sides:url(images/btn/btn-default-small-pressed-sides.gif), frame-bg:url(images/btn/btn-default-small-pressed-fbg.gif), bg:url(images/btn/btn-default-small-pressed-bg.gif)"}.x-btn-default-small-disabled:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-disabled-corners.gif), sides:url(images/btn/btn-default-small-disabled-sides.gif), frame-bg:url(images/btn/btn-default-small-disabled-fbg.gif), bg:url(images/btn/btn-default-small-disabled-bg.gif)"}.x-btn-default-medium{border-color:#d1d1d1}.x-btn-default-medium{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:white;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(48%,#f9f9f9),color-stop(52%,#e2e2e2),color-stop(100%,#e7e7e7));background-image:-webkit-linear-gradient(top,#fff,#f9f9f9 48%,#e2e2e2 52%,#e7e7e7);background-image:-moz-linear-gradient(top,#fff,#f9f9f9 48%,#e2e2e2 52%,#e7e7e7);background-image:-o-linear-gradient(top,#fff,#f9f9f9 48%,#e2e2e2 52%,#e7e7e7);background-image:linear-gradient(top,#fff,#f9f9f9 48%,#e2e2e2 52%,#e7e7e7)}.x-btn-default-medium-mc{background-image:url(images/btn/btn-default-medium-fbg.gif);background-position:0 top;background-color:white}.x-nlg .x-btn-default-medium{background-image:url(images/btn/btn-default-medium-bg.gif);background-position:0 top}.x-nbr .x-btn-default-medium{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent;background-image:none}body.x-nbr .x-btn-default-medium-frameInfo{font-family:th-3-3-3-3-1-1-1-1-3-3-3-3}.x-btn-default-medium-tl{background-position:0 -6px}.x-btn-default-medium-tr{background-position:right -9px}.x-btn-default-medium-bl{background-position:0 -12px}.x-btn-default-medium-br{background-position:right -15px}.x-btn-default-medium-ml{background-position:0 top}.x-btn-default-medium-mr{background-position:right top}.x-btn-default-medium-tc{background-position:0 0}.x-btn-default-medium-bc{background-position:0 -3px}.x-btn-default-medium-tr,.x-btn-default-medium-br,.x-btn-default-medium-mr{padding-right:3px}.x-btn-default-medium-tl,.x-btn-default-medium-bl,.x-btn-default-medium-ml{padding-left:3px}.x-btn-default-medium-tc{height:3px}.x-btn-default-medium-bc{height:3px}.x-btn-default-medium-tl,.x-btn-default-medium-bl,.x-btn-default-medium-tr,.x-btn-default-medium-br,.x-btn-default-medium-tc,.x-btn-default-medium-bc,.x-btn-default-medium-ml,.x-btn-default-medium-mr{zoom:1;background-image:url(images/btn/btn-default-medium-corners.gif)}.x-btn-default-medium-ml,.x-btn-default-medium-mr{zoom:1;background-image:url(images/btn/btn-default-medium-sides.gif)}.x-btn-default-medium-mc{padding:1px 1px 1px 1px}.x-strict .x-ie7 .x-btn-default-medium-tl,.x-strict .x-ie7 .x-btn-default-medium-bl{position:relative;right:0}.x-btn-default-medium:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/btn/btn-default-medium-fbg.gif), bg:url(images/btn/btn-default-medium-bg.gif), corners:url(images/btn/btn-default-medium-corners.gif), sides:url(images/btn/btn-default-medium-sides.gif)"}.x-btn-default-medium .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;padding:0 3px}.x-btn-default-medium .x-btn-arrow{background-image:url(images/button/arrow.gif)}.x-btn-default-medium .x-btn-arrow-right{padding-right:12px}.x-btn-default-medium .x-btn-arrow-bottom{padding-bottom:12px}.x-btn-default-medium .x-btn-glyph{font-size:24px;line-height:24px;color:#333;opacity:.5}.x-ie8m .x-btn-default-medium .x-btn-glyph{color:#999}.x-btn-default-medium-disabled{border-color:#e1e1e1;background-image:none;background-color:#f7f7f7;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f7f7f7),color-stop(48%,#f1f1f1),color-stop(52%,#dadada),color-stop(100%,#dfdfdf));background-image:-webkit-linear-gradient(top,#f7f7f7,#f1f1f1 48%,#dadada 52%,#dfdfdf);background-image:-moz-linear-gradient(top,#f7f7f7,#f1f1f1 48%,#dadada 52%,#dfdfdf);background-image:-o-linear-gradient(top,#f7f7f7,#f1f1f1 48%,#dadada 52%,#dfdfdf);background-image:linear-gradient(top,#f7f7f7,#f1f1f1 48%,#dadada 52%,#dfdfdf)}.x-btn-default-medium-icon .x-btn-button,.x-btn-default-medium-noicon .x-btn-button{height:24px}.x-btn-default-medium-icon .x-btn-inner,.x-btn-default-medium-noicon .x-btn-inner{line-height:24px}.x-btn-default-medium-icon .x-btn-arrow-right .x-btn-inner,.x-btn-default-medium-noicon .x-btn-arrow-right .x-btn-inner,.x-btn-default-medium-icon-text-left .x-btn-arrow-right .x-btn-inner{padding-right:0}.x-btn-default-medium-icon .x-btn-inner{width:24px;padding:0}.x-btn-default-medium-icon .x-btn-icon-el{width:24px;height:24px}.x-btn-default-medium-icon-text-left .x-btn-button{height:24px}.x-btn-default-medium-icon-text-left .x-btn-inner{line-height:24px;padding-left:28px}.x-btn-default-medium-icon-text-left .x-btn-icon-el{width:24px;right:auto}.x-ie6 .x-btn-default-medium-icon-text-left .x-btn-icon-el,.x-quirks .x-btn-default-medium-icon-text-left .x-btn-icon-el{height:24px}.x-btn-default-medium-icon-text-right .x-btn-button{height:24px}.x-btn-default-medium-icon-text-right .x-btn-inner{line-height:24px;padding-right:28px}.x-btn-default-medium-icon-text-right .x-btn-icon-el{width:24px;left:auto}.x-ie6 .x-btn-default-medium-icon-text-right .x-btn-icon-el,.x-quirks .x-btn-default-medium-icon-text-right .x-btn-icon-el{height:24px}.x-btn-default-medium-icon-text-top .x-btn-inner{padding-top:28px}.x-btn-default-medium-icon-text-top .x-btn-icon-el{height:24px;bottom:auto}.x-ie6 .x-btn-default-medium-icon-text-top .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-medium-icon-text-top .x-btn-icon-el{width:100%}.x-btn-default-medium-icon-text-bottom .x-btn-inner{padding-bottom:28px}.x-btn-default-medium-icon-text-bottom .x-btn-icon-el{height:24px;top:auto}.x-ie6 .x-btn-default-medium-icon-text-bottom .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-medium-icon-text-bottom .x-btn-icon-el{width:100%}.x-btn-default-medium-over{border-color:#b0ccf2;background-image:none;background-color:#e4f3ff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#e4f3ff),color-stop(48%,#d9edff),color-stop(52%,#c2d8f2),color-stop(100%,#c6dcf6));background-image:-webkit-linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6);background-image:-moz-linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6);background-image:-o-linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6);background-image:linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6)}.x-btn-default-medium-focus{border-color:#b0ccf2;background-image:none;background-color:#e4f3ff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#e4f3ff),color-stop(48%,#d9edff),color-stop(52%,#c2d8f2),color-stop(100%,#c6dcf6));background-image:-webkit-linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6);background-image:-moz-linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6);background-image:-o-linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6);background-image:linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6)}.x-btn-default-medium-menu-active,.x-btn-default-medium-pressed{border-color:#9ebae1;background-image:none;background-color:#b6cbe4;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#b6cbe4),color-stop(48%,#bfd2e6),color-stop(52%,#8dc0f5),color-stop(100%,#98c5f5));background-image:-webkit-linear-gradient(top,#b6cbe4,#bfd2e6 48%,#8dc0f5 52%,#98c5f5);background-image:-moz-linear-gradient(top,#b6cbe4,#bfd2e6 48%,#8dc0f5 52%,#98c5f5);background-image:-o-linear-gradient(top,#b6cbe4,#bfd2e6 48%,#8dc0f5 52%,#98c5f5);background-image:linear-gradient(top,#b6cbe4,#bfd2e6 48%,#8dc0f5 52%,#98c5f5)}.x-btn-default-medium-over .x-frame-tl,.x-btn-default-medium-over .x-frame-bl,.x-btn-default-medium-over .x-frame-tr,.x-btn-default-medium-over .x-frame-br,.x-btn-default-medium-over .x-frame-tc,.x-btn-default-medium-over .x-frame-bc{background-image:url(images/btn/btn-default-medium-over-corners.gif)}.x-btn-default-medium-over .x-frame-ml,.x-btn-default-medium-over .x-frame-mr{background-image:url(images/btn/btn-default-medium-over-sides.gif)}.x-btn-default-medium-over .x-frame-mc{background-color:#e4f3ff;background-image:url(images/btn/btn-default-medium-over-fbg.gif)}.x-btn-default-medium-focus .x-frame-tl,.x-btn-default-medium-focus .x-frame-bl,.x-btn-default-medium-focus .x-frame-tr,.x-btn-default-medium-focus .x-frame-br,.x-btn-default-medium-focus .x-frame-tc,.x-btn-default-medium-focus .x-frame-bc{background-image:url(images/btn/btn-default-medium-focus-corners.gif)}.x-btn-default-medium-focus .x-frame-ml,.x-btn-default-medium-focus .x-frame-mr{background-image:url(images/btn/btn-default-medium-focus-sides.gif)}.x-btn-default-medium-focus .x-frame-mc{background-color:#e4f3ff;background-image:url(images/btn/btn-default-medium-focus-fbg.gif)}.x-btn-default-medium-menu-active .x-frame-tl,.x-btn-default-medium-menu-active .x-frame-bl,.x-btn-default-medium-menu-active .x-frame-tr,.x-btn-default-medium-menu-active .x-frame-br,.x-btn-default-medium-menu-active .x-frame-tc,.x-btn-default-medium-menu-active .x-frame-bc,.x-btn-default-medium-pressed .x-frame-tl,.x-btn-default-medium-pressed .x-frame-bl,.x-btn-default-medium-pressed .x-frame-tr,.x-btn-default-medium-pressed .x-frame-br,.x-btn-default-medium-pressed .x-frame-tc,.x-btn-default-medium-pressed .x-frame-bc{background-image:url(images/btn/btn-default-medium-pressed-corners.gif)}.x-btn-default-medium-menu-active .x-frame-ml,.x-btn-default-medium-menu-active .x-frame-mr,.x-btn-default-medium-pressed .x-frame-ml,.x-btn-default-medium-pressed .x-frame-mr{background-image:url(images/btn/btn-default-medium-pressed-sides.gif)}.x-btn-default-medium-menu-active .x-frame-mc,.x-btn-default-medium-pressed .x-frame-mc{background-color:#b6cbe4;background-image:url(images/btn/btn-default-medium-pressed-fbg.gif)}.x-btn-default-medium-disabled .x-frame-tl,.x-btn-default-medium-disabled .x-frame-bl,.x-btn-default-medium-disabled .x-frame-tr,.x-btn-default-medium-disabled .x-frame-br,.x-btn-default-medium-disabled .x-frame-tc,.x-btn-default-medium-disabled .x-frame-bc{background-image:url(images/btn/btn-default-medium-disabled-corners.gif)}.x-btn-default-medium-disabled .x-frame-ml,.x-btn-default-medium-disabled .x-frame-mr{background-image:url(images/btn/btn-default-medium-disabled-sides.gif)}.x-btn-default-medium-disabled .x-frame-mc{background-color:#f7f7f7;background-image:url(images/btn/btn-default-medium-disabled-fbg.gif)}.x-nlg .x-btn-default-medium-over{background-image:url(images/btn/btn-default-medium-over-bg.gif)}.x-nlg .x-btn-default-medium-focus{background-image:url(images/btn/btn-default-medium-focus-bg.gif)}.x-nlg .x-btn-default-medium-menu-active,.x-nlg .x-btn-default-medium-pressed{background-image:url(images/btn/btn-default-medium-pressed-bg.gif)}.x-nlg .x-btn-default-medium-disabled{background-image:url(images/btn/btn-default-medium-disabled-bg.gif)}.x-nbr .x-btn-default-medium{background-image:none}.x-btn-default-medium .x-btn-split-right{background-image:url(images/button/s-arrow.gif);padding-right:14px}.x-btn-default-medium .x-btn-split-bottom{background-image:url(images/button/s-arrow-b.gif);padding-bottom:14px}.x-btn-default-medium-over .x-btn-split-right{background-image:url(images/button/s-arrow-o.gif)}.x-btn-default-medium-over .x-btn-split-bottom{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-default-medium-disabled .x-btn-inner,.x-btn-default-medium-disabled .x-btn-icon-el{filter:alpha(opacity=50);opacity:.5}.x-btn-default-medium-over:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-over-corners.gif), sides:url(images/btn/btn-default-medium-over-sides.gif), frame-bg:url(images/btn/btn-default-medium-over-fbg.gif), bg:url(images/btn/btn-default-medium-over-bg.gif)"}.x-btn-default-medium-focus:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-focus-corners.gif), sides:url(images/btn/btn-default-medium-focus-sides.gif), frame-bg:url(images/btn/btn-default-medium-focus-fbg.gif), bg:url(images/btn/btn-default-medium-focus-bg.gif)"}.x-btn-default-medium-pressed:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-pressed-corners.gif), sides:url(images/btn/btn-default-medium-pressed-sides.gif), frame-bg:url(images/btn/btn-default-medium-pressed-fbg.gif), bg:url(images/btn/btn-default-medium-pressed-bg.gif)"}.x-btn-default-medium-disabled:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-disabled-corners.gif), sides:url(images/btn/btn-default-medium-disabled-sides.gif), frame-bg:url(images/btn/btn-default-medium-disabled-fbg.gif), bg:url(images/btn/btn-default-medium-disabled-bg.gif)"}.x-btn-default-large{border-color:#d1d1d1}.x-btn-default-large{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:white;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(48%,#f9f9f9),color-stop(52%,#e2e2e2),color-stop(100%,#e7e7e7));background-image:-webkit-linear-gradient(top,#fff,#f9f9f9 48%,#e2e2e2 52%,#e7e7e7);background-image:-moz-linear-gradient(top,#fff,#f9f9f9 48%,#e2e2e2 52%,#e7e7e7);background-image:-o-linear-gradient(top,#fff,#f9f9f9 48%,#e2e2e2 52%,#e7e7e7);background-image:linear-gradient(top,#fff,#f9f9f9 48%,#e2e2e2 52%,#e7e7e7)}.x-btn-default-large-mc{background-image:url(images/btn/btn-default-large-fbg.gif);background-position:0 top;background-color:white}.x-nlg .x-btn-default-large{background-image:url(images/btn/btn-default-large-bg.gif);background-position:0 top}.x-nbr .x-btn-default-large{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent;background-image:none}body.x-nbr .x-btn-default-large-frameInfo{font-family:th-3-3-3-3-1-1-1-1-3-3-3-3}.x-btn-default-large-tl{background-position:0 -6px}.x-btn-default-large-tr{background-position:right -9px}.x-btn-default-large-bl{background-position:0 -12px}.x-btn-default-large-br{background-position:right -15px}.x-btn-default-large-ml{background-position:0 top}.x-btn-default-large-mr{background-position:right top}.x-btn-default-large-tc{background-position:0 0}.x-btn-default-large-bc{background-position:0 -3px}.x-btn-default-large-tr,.x-btn-default-large-br,.x-btn-default-large-mr{padding-right:3px}.x-btn-default-large-tl,.x-btn-default-large-bl,.x-btn-default-large-ml{padding-left:3px}.x-btn-default-large-tc{height:3px}.x-btn-default-large-bc{height:3px}.x-btn-default-large-tl,.x-btn-default-large-bl,.x-btn-default-large-tr,.x-btn-default-large-br,.x-btn-default-large-tc,.x-btn-default-large-bc,.x-btn-default-large-ml,.x-btn-default-large-mr{zoom:1;background-image:url(images/btn/btn-default-large-corners.gif)}.x-btn-default-large-ml,.x-btn-default-large-mr{zoom:1;background-image:url(images/btn/btn-default-large-sides.gif)}.x-btn-default-large-mc{padding:1px 1px 1px 1px}.x-strict .x-ie7 .x-btn-default-large-tl,.x-strict .x-ie7 .x-btn-default-large-bl{position:relative;right:0}.x-btn-default-large:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/btn/btn-default-large-fbg.gif), bg:url(images/btn/btn-default-large-bg.gif), corners:url(images/btn/btn-default-large-corners.gif), sides:url(images/btn/btn-default-large-sides.gif)"}.x-btn-default-large .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;padding:0 3px}.x-btn-default-large .x-btn-arrow{background-image:url(images/button/arrow.gif)}.x-btn-default-large .x-btn-arrow-right{padding-right:12px}.x-btn-default-large .x-btn-arrow-bottom{padding-bottom:12px}.x-btn-default-large .x-btn-glyph{font-size:32px;line-height:32px;color:#333;opacity:.5}.x-ie8m .x-btn-default-large .x-btn-glyph{color:#999}.x-btn-default-large-disabled{border-color:#e1e1e1;background-image:none;background-color:#f7f7f7;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f7f7f7),color-stop(48%,#f1f1f1),color-stop(52%,#dadada),color-stop(100%,#dfdfdf));background-image:-webkit-linear-gradient(top,#f7f7f7,#f1f1f1 48%,#dadada 52%,#dfdfdf);background-image:-moz-linear-gradient(top,#f7f7f7,#f1f1f1 48%,#dadada 52%,#dfdfdf);background-image:-o-linear-gradient(top,#f7f7f7,#f1f1f1 48%,#dadada 52%,#dfdfdf);background-image:linear-gradient(top,#f7f7f7,#f1f1f1 48%,#dadada 52%,#dfdfdf)}.x-btn-default-large-icon .x-btn-button,.x-btn-default-large-noicon .x-btn-button{height:32px}.x-btn-default-large-icon .x-btn-inner,.x-btn-default-large-noicon .x-btn-inner{line-height:32px}.x-btn-default-large-icon .x-btn-arrow-right .x-btn-inner,.x-btn-default-large-noicon .x-btn-arrow-right .x-btn-inner,.x-btn-default-large-icon-text-left .x-btn-arrow-right .x-btn-inner{padding-right:0}.x-btn-default-large-icon .x-btn-inner{width:32px;padding:0}.x-btn-default-large-icon .x-btn-icon-el{width:32px;height:32px}.x-btn-default-large-icon-text-left .x-btn-button{height:32px}.x-btn-default-large-icon-text-left .x-btn-inner{line-height:32px;padding-left:36px}.x-btn-default-large-icon-text-left .x-btn-icon-el{width:32px;right:auto}.x-ie6 .x-btn-default-large-icon-text-left .x-btn-icon-el,.x-quirks .x-btn-default-large-icon-text-left .x-btn-icon-el{height:32px}.x-btn-default-large-icon-text-right .x-btn-button{height:32px}.x-btn-default-large-icon-text-right .x-btn-inner{line-height:32px;padding-right:36px}.x-btn-default-large-icon-text-right .x-btn-icon-el{width:32px;left:auto}.x-ie6 .x-btn-default-large-icon-text-right .x-btn-icon-el,.x-quirks .x-btn-default-large-icon-text-right .x-btn-icon-el{height:32px}.x-btn-default-large-icon-text-top .x-btn-inner{padding-top:36px}.x-btn-default-large-icon-text-top .x-btn-icon-el{height:32px;bottom:auto}.x-ie6 .x-btn-default-large-icon-text-top .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-large-icon-text-top .x-btn-icon-el{width:100%}.x-btn-default-large-icon-text-bottom .x-btn-inner{padding-bottom:36px}.x-btn-default-large-icon-text-bottom .x-btn-icon-el{height:32px;top:auto}.x-ie6 .x-btn-default-large-icon-text-bottom .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-large-icon-text-bottom .x-btn-icon-el{width:100%}.x-btn-default-large-over{border-color:#b0ccf2;background-image:none;background-color:#e4f3ff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#e4f3ff),color-stop(48%,#d9edff),color-stop(52%,#c2d8f2),color-stop(100%,#c6dcf6));background-image:-webkit-linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6);background-image:-moz-linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6);background-image:-o-linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6);background-image:linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6)}.x-btn-default-large-focus{border-color:#b0ccf2;background-image:none;background-color:#e4f3ff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#e4f3ff),color-stop(48%,#d9edff),color-stop(52%,#c2d8f2),color-stop(100%,#c6dcf6));background-image:-webkit-linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6);background-image:-moz-linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6);background-image:-o-linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6);background-image:linear-gradient(top,#e4f3ff,#d9edff 48%,#c2d8f2 52%,#c6dcf6)}.x-btn-default-large-menu-active,.x-btn-default-large-pressed{border-color:#9ebae1;background-image:none;background-color:#b6cbe4;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#b6cbe4),color-stop(48%,#bfd2e6),color-stop(52%,#8dc0f5),color-stop(100%,#98c5f5));background-image:-webkit-linear-gradient(top,#b6cbe4,#bfd2e6 48%,#8dc0f5 52%,#98c5f5);background-image:-moz-linear-gradient(top,#b6cbe4,#bfd2e6 48%,#8dc0f5 52%,#98c5f5);background-image:-o-linear-gradient(top,#b6cbe4,#bfd2e6 48%,#8dc0f5 52%,#98c5f5);background-image:linear-gradient(top,#b6cbe4,#bfd2e6 48%,#8dc0f5 52%,#98c5f5)}.x-btn-default-large-over .x-frame-tl,.x-btn-default-large-over .x-frame-bl,.x-btn-default-large-over .x-frame-tr,.x-btn-default-large-over .x-frame-br,.x-btn-default-large-over .x-frame-tc,.x-btn-default-large-over .x-frame-bc{background-image:url(images/btn/btn-default-large-over-corners.gif)}.x-btn-default-large-over .x-frame-ml,.x-btn-default-large-over .x-frame-mr{background-image:url(images/btn/btn-default-large-over-sides.gif)}.x-btn-default-large-over .x-frame-mc{background-color:#e4f3ff;background-image:url(images/btn/btn-default-large-over-fbg.gif)}.x-btn-default-large-focus .x-frame-tl,.x-btn-default-large-focus .x-frame-bl,.x-btn-default-large-focus .x-frame-tr,.x-btn-default-large-focus .x-frame-br,.x-btn-default-large-focus .x-frame-tc,.x-btn-default-large-focus .x-frame-bc{background-image:url(images/btn/btn-default-large-focus-corners.gif)}.x-btn-default-large-focus .x-frame-ml,.x-btn-default-large-focus .x-frame-mr{background-image:url(images/btn/btn-default-large-focus-sides.gif)}.x-btn-default-large-focus .x-frame-mc{background-color:#e4f3ff;background-image:url(images/btn/btn-default-large-focus-fbg.gif)}.x-btn-default-large-menu-active .x-frame-tl,.x-btn-default-large-menu-active .x-frame-bl,.x-btn-default-large-menu-active .x-frame-tr,.x-btn-default-large-menu-active .x-frame-br,.x-btn-default-large-menu-active .x-frame-tc,.x-btn-default-large-menu-active .x-frame-bc,.x-btn-default-large-pressed .x-frame-tl,.x-btn-default-large-pressed .x-frame-bl,.x-btn-default-large-pressed .x-frame-tr,.x-btn-default-large-pressed .x-frame-br,.x-btn-default-large-pressed .x-frame-tc,.x-btn-default-large-pressed .x-frame-bc{background-image:url(images/btn/btn-default-large-pressed-corners.gif)}.x-btn-default-large-menu-active .x-frame-ml,.x-btn-default-large-menu-active .x-frame-mr,.x-btn-default-large-pressed .x-frame-ml,.x-btn-default-large-pressed .x-frame-mr{background-image:url(images/btn/btn-default-large-pressed-sides.gif)}.x-btn-default-large-menu-active .x-frame-mc,.x-btn-default-large-pressed .x-frame-mc{background-color:#b6cbe4;background-image:url(images/btn/btn-default-large-pressed-fbg.gif)}.x-btn-default-large-disabled .x-frame-tl,.x-btn-default-large-disabled .x-frame-bl,.x-btn-default-large-disabled .x-frame-tr,.x-btn-default-large-disabled .x-frame-br,.x-btn-default-large-disabled .x-frame-tc,.x-btn-default-large-disabled .x-frame-bc{background-image:url(images/btn/btn-default-large-disabled-corners.gif)}.x-btn-default-large-disabled .x-frame-ml,.x-btn-default-large-disabled .x-frame-mr{background-image:url(images/btn/btn-default-large-disabled-sides.gif)}.x-btn-default-large-disabled .x-frame-mc{background-color:#f7f7f7;background-image:url(images/btn/btn-default-large-disabled-fbg.gif)}.x-nlg .x-btn-default-large-over{background-image:url(images/btn/btn-default-large-over-bg.gif)}.x-nlg .x-btn-default-large-focus{background-image:url(images/btn/btn-default-large-focus-bg.gif)}.x-nlg .x-btn-default-large-menu-active,.x-nlg .x-btn-default-large-pressed{background-image:url(images/btn/btn-default-large-pressed-bg.gif)}.x-nlg .x-btn-default-large-disabled{background-image:url(images/btn/btn-default-large-disabled-bg.gif)}.x-nbr .x-btn-default-large{background-image:none}.x-btn-default-large .x-btn-split-right{background-image:url(images/button/s-arrow.gif);padding-right:14px}.x-btn-default-large .x-btn-split-bottom{background-image:url(images/button/s-arrow-b.gif);padding-bottom:14px}.x-btn-default-large-over .x-btn-split-right{background-image:url(images/button/s-arrow-o.gif)}.x-btn-default-large-over .x-btn-split-bottom{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-default-large-disabled .x-btn-inner,.x-btn-default-large-disabled .x-btn-icon-el{filter:alpha(opacity=50);opacity:.5}.x-btn-default-large-over:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-over-corners.gif), sides:url(images/btn/btn-default-large-over-sides.gif), frame-bg:url(images/btn/btn-default-large-over-fbg.gif), bg:url(images/btn/btn-default-large-over-bg.gif)"}.x-btn-default-large-focus:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-focus-corners.gif), sides:url(images/btn/btn-default-large-focus-sides.gif), frame-bg:url(images/btn/btn-default-large-focus-fbg.gif), bg:url(images/btn/btn-default-large-focus-bg.gif)"}.x-btn-default-large-pressed:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-pressed-corners.gif), sides:url(images/btn/btn-default-large-pressed-sides.gif), frame-bg:url(images/btn/btn-default-large-pressed-fbg.gif), bg:url(images/btn/btn-default-large-pressed-bg.gif)"}.x-btn-default-large-disabled:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-disabled-corners.gif), sides:url(images/btn/btn-default-large-disabled-sides.gif), frame-bg:url(images/btn/btn-default-large-disabled-fbg.gif), bg:url(images/btn/btn-default-large-disabled-bg.gif)"}.x-btn-default-toolbar-small{border-color:transparent}.x-btn-default-toolbar-small{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:2px 2px 2px 2px;border-width:1px;border-style:solid;background-color:transparent}.x-btn-default-toolbar-small-mc{background-color:transparent}.x-nbr .x-btn-default-toolbar-small{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-default-toolbar-small-frameInfo{font-family:th-3-3-3-3-1-1-1-1-2-2-2-2}.x-btn-default-toolbar-small-tl{background-position:0 -6px}.x-btn-default-toolbar-small-tr{background-position:right -9px}.x-btn-default-toolbar-small-bl{background-position:0 -12px}.x-btn-default-toolbar-small-br{background-position:right -15px}.x-btn-default-toolbar-small-ml{background-position:0 top}.x-btn-default-toolbar-small-mr{background-position:right top}.x-btn-default-toolbar-small-tc{background-position:0 0}.x-btn-default-toolbar-small-bc{background-position:0 -3px}.x-btn-default-toolbar-small-tr,.x-btn-default-toolbar-small-br,.x-btn-default-toolbar-small-mr{padding-right:3px}.x-btn-default-toolbar-small-tl,.x-btn-default-toolbar-small-bl,.x-btn-default-toolbar-small-ml{padding-left:3px}.x-btn-default-toolbar-small-tc{height:3px}.x-btn-default-toolbar-small-bc{height:3px}.x-btn-default-toolbar-small-tl,.x-btn-default-toolbar-small-bl,.x-btn-default-toolbar-small-tr,.x-btn-default-toolbar-small-br,.x-btn-default-toolbar-small-tc,.x-btn-default-toolbar-small-bc,.x-btn-default-toolbar-small-ml,.x-btn-default-toolbar-small-mr{zoom:1}.x-btn-default-toolbar-small-ml,.x-btn-default-toolbar-small-mr{zoom:1}.x-btn-default-toolbar-small-mc{padding:0}.x-strict .x-ie7 .x-btn-default-toolbar-small-tl,.x-strict .x-ie7 .x-btn-default-toolbar-small-bl{position:relative;right:0}.x-btn-default-toolbar-small .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;padding:0 4px}.x-btn-default-toolbar-small .x-btn-arrow{background-image:url(images/button/arrow.gif)}.x-btn-default-toolbar-small .x-btn-arrow-right{padding-right:12px}.x-btn-default-toolbar-small .x-btn-arrow-bottom{padding-bottom:12px}.x-btn-default-toolbar-small .x-btn-glyph{font-size:16px;line-height:16px;color:#333;opacity:.5}.x-ie8m .x-btn-default-toolbar-small .x-btn-glyph{color:#999}.x-btn-default-toolbar-small-disabled{border-color:#e1e1e1;background-image:none;background-color:transparent}.x-btn-default-toolbar-small-disabled .x-btn-inner{color:#8c8c8c}.x-btn-default-toolbar-small-icon .x-btn-button,.x-btn-default-toolbar-small-noicon .x-btn-button{height:16px}.x-btn-default-toolbar-small-icon .x-btn-inner,.x-btn-default-toolbar-small-noicon .x-btn-inner{line-height:16px}.x-btn-default-toolbar-small-icon .x-btn-arrow-right .x-btn-inner,.x-btn-default-toolbar-small-noicon .x-btn-arrow-right .x-btn-inner,.x-btn-default-toolbar-small-icon-text-left .x-btn-arrow-right .x-btn-inner{padding-right:0}.x-btn-default-toolbar-small-icon .x-btn-inner{width:16px;padding:0}.x-btn-default-toolbar-small-icon .x-btn-icon-el{width:16px;height:16px}.x-btn-default-toolbar-small-icon-text-left .x-btn-button{height:16px}.x-btn-default-toolbar-small-icon-text-left .x-btn-inner{line-height:16px;padding-left:20px}.x-btn-default-toolbar-small-icon-text-left .x-btn-icon-el{width:16px;right:auto}.x-ie6 .x-btn-default-toolbar-small-icon-text-left .x-btn-icon-el,.x-quirks .x-btn-default-toolbar-small-icon-text-left .x-btn-icon-el{height:16px}.x-btn-default-toolbar-small-icon-text-right .x-btn-button{height:16px}.x-btn-default-toolbar-small-icon-text-right .x-btn-inner{line-height:16px;padding-right:20px}.x-btn-default-toolbar-small-icon-text-right .x-btn-icon-el{width:16px;left:auto}.x-ie6 .x-btn-default-toolbar-small-icon-text-right .x-btn-icon-el,.x-quirks .x-btn-default-toolbar-small-icon-text-right .x-btn-icon-el{height:16px}.x-btn-default-toolbar-small-icon-text-top .x-btn-inner{padding-top:20px}.x-btn-default-toolbar-small-icon-text-top .x-btn-icon-el{height:16px;bottom:auto}.x-ie6 .x-btn-default-toolbar-small-icon-text-top .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-toolbar-small-icon-text-top .x-btn-icon-el{width:100%}.x-btn-default-toolbar-small-icon-text-bottom .x-btn-inner{padding-bottom:20px}.x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon-el{height:16px;top:auto}.x-ie6 .x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon-el{width:100%}.x-btn-default-toolbar-small-over{border-color:#81a4d0;background-image:none;background-color:#dbeeff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dbeeff),color-stop(48%,#d0e7ff),color-stop(52%,#bbd2f0),color-stop(100%,#bed6f5));background-image:-webkit-linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5);background-image:-moz-linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5);background-image:-o-linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5);background-image:linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5)}.x-btn-default-toolbar-small-focus{border-color:#81a4d0;background-image:none;background-color:#dbeeff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dbeeff),color-stop(48%,#d0e7ff),color-stop(52%,#bbd2f0),color-stop(100%,#bed6f5));background-image:-webkit-linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5);background-image:-moz-linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5);background-image:-o-linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5);background-image:linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5)}.x-btn-default-toolbar-small-menu-active,.x-btn-default-toolbar-small-pressed{border-color:#7a9ac4;background-image:none;background-color:#bccfe5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#bccfe5),color-stop(48%,#c5d6e7),color-stop(52%,#95c4f4),color-stop(100%,#9fc9f5));background-image:-webkit-linear-gradient(top,#bccfe5,#c5d6e7 48%,#95c4f4 52%,#9fc9f5);background-image:-moz-linear-gradient(top,#bccfe5,#c5d6e7 48%,#95c4f4 52%,#9fc9f5);background-image:-o-linear-gradient(top,#bccfe5,#c5d6e7 48%,#95c4f4 52%,#9fc9f5);background-image:linear-gradient(top,#bccfe5,#c5d6e7 48%,#95c4f4 52%,#9fc9f5)}.x-btn-default-toolbar-small-over .x-frame-tl,.x-btn-default-toolbar-small-over .x-frame-bl,.x-btn-default-toolbar-small-over .x-frame-tr,.x-btn-default-toolbar-small-over .x-frame-br,.x-btn-default-toolbar-small-over .x-frame-tc,.x-btn-default-toolbar-small-over .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-small-over-corners.gif)}.x-btn-default-toolbar-small-over .x-frame-ml,.x-btn-default-toolbar-small-over .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-small-over-sides.gif)}.x-btn-default-toolbar-small-over .x-frame-mc{background-color:#dbeeff;background-image:url(images/btn/btn-default-toolbar-small-over-fbg.gif)}.x-btn-default-toolbar-small-focus .x-frame-tl,.x-btn-default-toolbar-small-focus .x-frame-bl,.x-btn-default-toolbar-small-focus .x-frame-tr,.x-btn-default-toolbar-small-focus .x-frame-br,.x-btn-default-toolbar-small-focus .x-frame-tc,.x-btn-default-toolbar-small-focus .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-small-focus-corners.gif)}.x-btn-default-toolbar-small-focus .x-frame-ml,.x-btn-default-toolbar-small-focus .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-small-focus-sides.gif)}.x-btn-default-toolbar-small-focus .x-frame-mc{background-color:#dbeeff;background-image:url(images/btn/btn-default-toolbar-small-focus-fbg.gif)}.x-btn-default-toolbar-small-menu-active .x-frame-tl,.x-btn-default-toolbar-small-menu-active .x-frame-bl,.x-btn-default-toolbar-small-menu-active .x-frame-tr,.x-btn-default-toolbar-small-menu-active .x-frame-br,.x-btn-default-toolbar-small-menu-active .x-frame-tc,.x-btn-default-toolbar-small-menu-active .x-frame-bc,.x-btn-default-toolbar-small-pressed .x-frame-tl,.x-btn-default-toolbar-small-pressed .x-frame-bl,.x-btn-default-toolbar-small-pressed .x-frame-tr,.x-btn-default-toolbar-small-pressed .x-frame-br,.x-btn-default-toolbar-small-pressed .x-frame-tc,.x-btn-default-toolbar-small-pressed .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-small-pressed-corners.gif)}.x-btn-default-toolbar-small-menu-active .x-frame-ml,.x-btn-default-toolbar-small-menu-active .x-frame-mr,.x-btn-default-toolbar-small-pressed .x-frame-ml,.x-btn-default-toolbar-small-pressed .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-small-pressed-sides.gif)}.x-btn-default-toolbar-small-menu-active .x-frame-mc,.x-btn-default-toolbar-small-pressed .x-frame-mc{background-color:#bccfe5;background-image:url(images/btn/btn-default-toolbar-small-pressed-fbg.gif)}.x-btn-default-toolbar-small-disabled .x-frame-tl,.x-btn-default-toolbar-small-disabled .x-frame-bl,.x-btn-default-toolbar-small-disabled .x-frame-tr,.x-btn-default-toolbar-small-disabled .x-frame-br,.x-btn-default-toolbar-small-disabled .x-frame-tc,.x-btn-default-toolbar-small-disabled .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-small-disabled-corners.gif)}.x-btn-default-toolbar-small-disabled .x-frame-ml,.x-btn-default-toolbar-small-disabled .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-small-disabled-sides.gif)}.x-btn-default-toolbar-small-disabled .x-frame-mc{background-color:transparent}.x-nlg .x-btn-default-toolbar-small-over{background-image:url(images/btn/btn-default-toolbar-small-over-bg.gif)}.x-nlg .x-btn-default-toolbar-small-focus{background-image:url(images/btn/btn-default-toolbar-small-focus-bg.gif)}.x-nlg .x-btn-default-toolbar-small-menu-active,.x-nlg .x-btn-default-toolbar-small-pressed{background-image:url(images/btn/btn-default-toolbar-small-pressed-bg.gif)}.x-nbr .x-btn-default-toolbar-small{background-image:none}.x-btn-default-toolbar-small .x-btn-split-right{background-image:url(images/button/s-arrow-noline.gif);padding-right:14px}.x-btn-default-toolbar-small .x-btn-split-bottom{background-image:url(images/button/s-arrow-b-noline.gif);padding-bottom:14px}.x-btn-default-toolbar-small-over .x-btn-split-right{background-image:url(images/button/s-arrow-o.gif)}.x-btn-default-toolbar-small-over .x-btn-split-bottom{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-default-toolbar-small-disabled{filter:alpha(opacity=50);opacity:.5}.x-btn-default-toolbar-small-over:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-over-corners.gif), sides:url(images/btn/btn-default-toolbar-small-over-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-small-over-fbg.gif), bg:url(images/btn/btn-default-toolbar-small-over-bg.gif)"}.x-btn-default-toolbar-small-focus:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-focus-corners.gif), sides:url(images/btn/btn-default-toolbar-small-focus-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-small-focus-fbg.gif), bg:url(images/btn/btn-default-toolbar-small-focus-bg.gif)"}.x-btn-default-toolbar-small-pressed:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-pressed-corners.gif), sides:url(images/btn/btn-default-toolbar-small-pressed-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-small-pressed-fbg.gif), bg:url(images/btn/btn-default-toolbar-small-pressed-bg.gif)"}.x-btn-default-toolbar-small-disabled:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-disabled-corners.gif), sides:url(images/btn/btn-default-toolbar-small-disabled-sides.gif)"}.x-btn-default-toolbar-medium{border-color:transparent}.x-btn-default-toolbar-medium{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-color:transparent}.x-btn-default-toolbar-medium-mc{background-color:transparent}.x-nbr .x-btn-default-toolbar-medium{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-default-toolbar-medium-frameInfo{font-family:th-3-3-3-3-1-1-1-1-3-3-3-3}.x-btn-default-toolbar-medium-tl{background-position:0 -6px}.x-btn-default-toolbar-medium-tr{background-position:right -9px}.x-btn-default-toolbar-medium-bl{background-position:0 -12px}.x-btn-default-toolbar-medium-br{background-position:right -15px}.x-btn-default-toolbar-medium-ml{background-position:0 top}.x-btn-default-toolbar-medium-mr{background-position:right top}.x-btn-default-toolbar-medium-tc{background-position:0 0}.x-btn-default-toolbar-medium-bc{background-position:0 -3px}.x-btn-default-toolbar-medium-tr,.x-btn-default-toolbar-medium-br,.x-btn-default-toolbar-medium-mr{padding-right:3px}.x-btn-default-toolbar-medium-tl,.x-btn-default-toolbar-medium-bl,.x-btn-default-toolbar-medium-ml{padding-left:3px}.x-btn-default-toolbar-medium-tc{height:3px}.x-btn-default-toolbar-medium-bc{height:3px}.x-btn-default-toolbar-medium-tl,.x-btn-default-toolbar-medium-bl,.x-btn-default-toolbar-medium-tr,.x-btn-default-toolbar-medium-br,.x-btn-default-toolbar-medium-tc,.x-btn-default-toolbar-medium-bc,.x-btn-default-toolbar-medium-ml,.x-btn-default-toolbar-medium-mr{zoom:1}.x-btn-default-toolbar-medium-ml,.x-btn-default-toolbar-medium-mr{zoom:1}.x-btn-default-toolbar-medium-mc{padding:1px 1px 1px 1px}.x-strict .x-ie7 .x-btn-default-toolbar-medium-tl,.x-strict .x-ie7 .x-btn-default-toolbar-medium-bl{position:relative;right:0}.x-btn-default-toolbar-medium .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;padding:0 3px}.x-btn-default-toolbar-medium .x-btn-arrow{background-image:url(images/button/arrow.gif)}.x-btn-default-toolbar-medium .x-btn-arrow-right{padding-right:12px}.x-btn-default-toolbar-medium .x-btn-arrow-bottom{padding-bottom:12px}.x-btn-default-toolbar-medium .x-btn-glyph{font-size:24px;line-height:24px;color:#333;opacity:.5}.x-ie8m .x-btn-default-toolbar-medium .x-btn-glyph{color:#999}.x-btn-default-toolbar-medium-disabled{border-color:#e1e1e1;background-image:none;background-color:transparent}.x-btn-default-toolbar-medium-disabled .x-btn-inner{color:#8c8c8c}.x-btn-default-toolbar-medium-icon .x-btn-button,.x-btn-default-toolbar-medium-noicon .x-btn-button{height:24px}.x-btn-default-toolbar-medium-icon .x-btn-inner,.x-btn-default-toolbar-medium-noicon .x-btn-inner{line-height:24px}.x-btn-default-toolbar-medium-icon .x-btn-arrow-right .x-btn-inner,.x-btn-default-toolbar-medium-noicon .x-btn-arrow-right .x-btn-inner,.x-btn-default-toolbar-medium-icon-text-left .x-btn-arrow-right .x-btn-inner{padding-right:0}.x-btn-default-toolbar-medium-icon .x-btn-inner{width:24px;padding:0}.x-btn-default-toolbar-medium-icon .x-btn-icon-el{width:24px;height:24px}.x-btn-default-toolbar-medium-icon-text-left .x-btn-button{height:24px}.x-btn-default-toolbar-medium-icon-text-left .x-btn-inner{line-height:24px;padding-left:28px}.x-btn-default-toolbar-medium-icon-text-left .x-btn-icon-el{width:24px;right:auto}.x-ie6 .x-btn-default-toolbar-medium-icon-text-left .x-btn-icon-el,.x-quirks .x-btn-default-toolbar-medium-icon-text-left .x-btn-icon-el{height:24px}.x-btn-default-toolbar-medium-icon-text-right .x-btn-button{height:24px}.x-btn-default-toolbar-medium-icon-text-right .x-btn-inner{line-height:24px;padding-right:28px}.x-btn-default-toolbar-medium-icon-text-right .x-btn-icon-el{width:24px;left:auto}.x-ie6 .x-btn-default-toolbar-medium-icon-text-right .x-btn-icon-el,.x-quirks .x-btn-default-toolbar-medium-icon-text-right .x-btn-icon-el{height:24px}.x-btn-default-toolbar-medium-icon-text-top .x-btn-inner{padding-top:28px}.x-btn-default-toolbar-medium-icon-text-top .x-btn-icon-el{height:24px;bottom:auto}.x-ie6 .x-btn-default-toolbar-medium-icon-text-top .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-toolbar-medium-icon-text-top .x-btn-icon-el{width:100%}.x-btn-default-toolbar-medium-icon-text-bottom .x-btn-inner{padding-bottom:28px}.x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon-el{height:24px;top:auto}.x-ie6 .x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon-el{width:100%}.x-btn-default-toolbar-medium-over{border-color:#81a4d0;background-image:none;background-color:#dbeeff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dbeeff),color-stop(48%,#d0e7ff),color-stop(52%,#bbd2f0),color-stop(100%,#bed6f5));background-image:-webkit-linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5);background-image:-moz-linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5);background-image:-o-linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5);background-image:linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5)}.x-btn-default-toolbar-medium-focus{border-color:#81a4d0;background-image:none;background-color:#dbeeff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dbeeff),color-stop(48%,#d0e7ff),color-stop(52%,#bbd2f0),color-stop(100%,#bed6f5));background-image:-webkit-linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5);background-image:-moz-linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5);background-image:-o-linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5);background-image:linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5)}.x-btn-default-toolbar-medium-menu-active,.x-btn-default-toolbar-medium-pressed{border-color:#7a9ac4;background-image:none;background-color:#bccfe5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#bccfe5),color-stop(48%,#c5d6e7),color-stop(52%,#95c4f4),color-stop(100%,#9fc9f5));background-image:-webkit-linear-gradient(top,#bccfe5,#c5d6e7 48%,#95c4f4 52%,#9fc9f5);background-image:-moz-linear-gradient(top,#bccfe5,#c5d6e7 48%,#95c4f4 52%,#9fc9f5);background-image:-o-linear-gradient(top,#bccfe5,#c5d6e7 48%,#95c4f4 52%,#9fc9f5);background-image:linear-gradient(top,#bccfe5,#c5d6e7 48%,#95c4f4 52%,#9fc9f5)}.x-btn-default-toolbar-medium-over .x-frame-tl,.x-btn-default-toolbar-medium-over .x-frame-bl,.x-btn-default-toolbar-medium-over .x-frame-tr,.x-btn-default-toolbar-medium-over .x-frame-br,.x-btn-default-toolbar-medium-over .x-frame-tc,.x-btn-default-toolbar-medium-over .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-medium-over-corners.gif)}.x-btn-default-toolbar-medium-over .x-frame-ml,.x-btn-default-toolbar-medium-over .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-medium-over-sides.gif)}.x-btn-default-toolbar-medium-over .x-frame-mc{background-color:#dbeeff;background-image:url(images/btn/btn-default-toolbar-medium-over-fbg.gif)}.x-btn-default-toolbar-medium-focus .x-frame-tl,.x-btn-default-toolbar-medium-focus .x-frame-bl,.x-btn-default-toolbar-medium-focus .x-frame-tr,.x-btn-default-toolbar-medium-focus .x-frame-br,.x-btn-default-toolbar-medium-focus .x-frame-tc,.x-btn-default-toolbar-medium-focus .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-medium-focus-corners.gif)}.x-btn-default-toolbar-medium-focus .x-frame-ml,.x-btn-default-toolbar-medium-focus .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-medium-focus-sides.gif)}.x-btn-default-toolbar-medium-focus .x-frame-mc{background-color:#dbeeff;background-image:url(images/btn/btn-default-toolbar-medium-focus-fbg.gif)}.x-btn-default-toolbar-medium-menu-active .x-frame-tl,.x-btn-default-toolbar-medium-menu-active .x-frame-bl,.x-btn-default-toolbar-medium-menu-active .x-frame-tr,.x-btn-default-toolbar-medium-menu-active .x-frame-br,.x-btn-default-toolbar-medium-menu-active .x-frame-tc,.x-btn-default-toolbar-medium-menu-active .x-frame-bc,.x-btn-default-toolbar-medium-pressed .x-frame-tl,.x-btn-default-toolbar-medium-pressed .x-frame-bl,.x-btn-default-toolbar-medium-pressed .x-frame-tr,.x-btn-default-toolbar-medium-pressed .x-frame-br,.x-btn-default-toolbar-medium-pressed .x-frame-tc,.x-btn-default-toolbar-medium-pressed .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-medium-pressed-corners.gif)}.x-btn-default-toolbar-medium-menu-active .x-frame-ml,.x-btn-default-toolbar-medium-menu-active .x-frame-mr,.x-btn-default-toolbar-medium-pressed .x-frame-ml,.x-btn-default-toolbar-medium-pressed .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-medium-pressed-sides.gif)}.x-btn-default-toolbar-medium-menu-active .x-frame-mc,.x-btn-default-toolbar-medium-pressed .x-frame-mc{background-color:#bccfe5;background-image:url(images/btn/btn-default-toolbar-medium-pressed-fbg.gif)}.x-btn-default-toolbar-medium-disabled .x-frame-tl,.x-btn-default-toolbar-medium-disabled .x-frame-bl,.x-btn-default-toolbar-medium-disabled .x-frame-tr,.x-btn-default-toolbar-medium-disabled .x-frame-br,.x-btn-default-toolbar-medium-disabled .x-frame-tc,.x-btn-default-toolbar-medium-disabled .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-medium-disabled-corners.gif)}.x-btn-default-toolbar-medium-disabled .x-frame-ml,.x-btn-default-toolbar-medium-disabled .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-medium-disabled-sides.gif)}.x-btn-default-toolbar-medium-disabled .x-frame-mc{background-color:transparent}.x-nlg .x-btn-default-toolbar-medium-over{background-image:url(images/btn/btn-default-toolbar-medium-over-bg.gif)}.x-nlg .x-btn-default-toolbar-medium-focus{background-image:url(images/btn/btn-default-toolbar-medium-focus-bg.gif)}.x-nlg .x-btn-default-toolbar-medium-menu-active,.x-nlg .x-btn-default-toolbar-medium-pressed{background-image:url(images/btn/btn-default-toolbar-medium-pressed-bg.gif)}.x-nbr .x-btn-default-toolbar-medium{background-image:none}.x-btn-default-toolbar-medium .x-btn-split-right{background-image:url(images/button/s-arrow-noline.gif);padding-right:14px}.x-btn-default-toolbar-medium .x-btn-split-bottom{background-image:url(images/button/s-arrow-b-noline.gif);padding-bottom:14px}.x-btn-default-toolbar-medium-over .x-btn-split-right{background-image:url(images/button/s-arrow-o.gif)}.x-btn-default-toolbar-medium-over .x-btn-split-bottom{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-default-toolbar-medium-disabled{filter:alpha(opacity=50);opacity:.5}.x-btn-default-toolbar-medium-over:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-over-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-over-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-medium-over-fbg.gif), bg:url(images/btn/btn-default-toolbar-medium-over-bg.gif)"}.x-btn-default-toolbar-medium-focus:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-focus-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-focus-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-medium-focus-fbg.gif), bg:url(images/btn/btn-default-toolbar-medium-focus-bg.gif)"}.x-btn-default-toolbar-medium-pressed:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-pressed-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-pressed-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-medium-pressed-fbg.gif), bg:url(images/btn/btn-default-toolbar-medium-pressed-bg.gif)"}.x-btn-default-toolbar-medium-disabled:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-disabled-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-disabled-sides.gif)"}.x-btn-default-toolbar-large{border-color:transparent}.x-btn-default-toolbar-large{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-color:transparent}.x-btn-default-toolbar-large-mc{background-color:transparent}.x-nbr .x-btn-default-toolbar-large{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-default-toolbar-large-frameInfo{font-family:th-3-3-3-3-1-1-1-1-3-3-3-3}.x-btn-default-toolbar-large-tl{background-position:0 -6px}.x-btn-default-toolbar-large-tr{background-position:right -9px}.x-btn-default-toolbar-large-bl{background-position:0 -12px}.x-btn-default-toolbar-large-br{background-position:right -15px}.x-btn-default-toolbar-large-ml{background-position:0 top}.x-btn-default-toolbar-large-mr{background-position:right top}.x-btn-default-toolbar-large-tc{background-position:0 0}.x-btn-default-toolbar-large-bc{background-position:0 -3px}.x-btn-default-toolbar-large-tr,.x-btn-default-toolbar-large-br,.x-btn-default-toolbar-large-mr{padding-right:3px}.x-btn-default-toolbar-large-tl,.x-btn-default-toolbar-large-bl,.x-btn-default-toolbar-large-ml{padding-left:3px}.x-btn-default-toolbar-large-tc{height:3px}.x-btn-default-toolbar-large-bc{height:3px}.x-btn-default-toolbar-large-tl,.x-btn-default-toolbar-large-bl,.x-btn-default-toolbar-large-tr,.x-btn-default-toolbar-large-br,.x-btn-default-toolbar-large-tc,.x-btn-default-toolbar-large-bc,.x-btn-default-toolbar-large-ml,.x-btn-default-toolbar-large-mr{zoom:1}.x-btn-default-toolbar-large-ml,.x-btn-default-toolbar-large-mr{zoom:1}.x-btn-default-toolbar-large-mc{padding:1px 1px 1px 1px}.x-strict .x-ie7 .x-btn-default-toolbar-large-tl,.x-strict .x-ie7 .x-btn-default-toolbar-large-bl{position:relative;right:0}.x-btn-default-toolbar-large .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;padding:0 3px}.x-btn-default-toolbar-large .x-btn-arrow{background-image:url(images/button/arrow.gif)}.x-btn-default-toolbar-large .x-btn-arrow-right{padding-right:12px}.x-btn-default-toolbar-large .x-btn-arrow-bottom{padding-bottom:12px}.x-btn-default-toolbar-large .x-btn-glyph{font-size:32px;line-height:32px;color:#333;opacity:.5}.x-ie8m .x-btn-default-toolbar-large .x-btn-glyph{color:#999}.x-btn-default-toolbar-large-disabled{border-color:#e1e1e1;background-image:none;background-color:transparent}.x-btn-default-toolbar-large-disabled .x-btn-inner{color:#8c8c8c}.x-btn-default-toolbar-large-icon .x-btn-button,.x-btn-default-toolbar-large-noicon .x-btn-button{height:32px}.x-btn-default-toolbar-large-icon .x-btn-inner,.x-btn-default-toolbar-large-noicon .x-btn-inner{line-height:32px}.x-btn-default-toolbar-large-icon .x-btn-arrow-right .x-btn-inner,.x-btn-default-toolbar-large-noicon .x-btn-arrow-right .x-btn-inner,.x-btn-default-toolbar-large-icon-text-left .x-btn-arrow-right .x-btn-inner{padding-right:0}.x-btn-default-toolbar-large-icon .x-btn-inner{width:32px;padding:0}.x-btn-default-toolbar-large-icon .x-btn-icon-el{width:32px;height:32px}.x-btn-default-toolbar-large-icon-text-left .x-btn-button{height:32px}.x-btn-default-toolbar-large-icon-text-left .x-btn-inner{line-height:32px;padding-left:36px}.x-btn-default-toolbar-large-icon-text-left .x-btn-icon-el{width:32px;right:auto}.x-ie6 .x-btn-default-toolbar-large-icon-text-left .x-btn-icon-el,.x-quirks .x-btn-default-toolbar-large-icon-text-left .x-btn-icon-el{height:32px}.x-btn-default-toolbar-large-icon-text-right .x-btn-button{height:32px}.x-btn-default-toolbar-large-icon-text-right .x-btn-inner{line-height:32px;padding-right:36px}.x-btn-default-toolbar-large-icon-text-right .x-btn-icon-el{width:32px;left:auto}.x-ie6 .x-btn-default-toolbar-large-icon-text-right .x-btn-icon-el,.x-quirks .x-btn-default-toolbar-large-icon-text-right .x-btn-icon-el{height:32px}.x-btn-default-toolbar-large-icon-text-top .x-btn-inner{padding-top:36px}.x-btn-default-toolbar-large-icon-text-top .x-btn-icon-el{height:32px;bottom:auto}.x-ie6 .x-btn-default-toolbar-large-icon-text-top .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-toolbar-large-icon-text-top .x-btn-icon-el{width:100%}.x-btn-default-toolbar-large-icon-text-bottom .x-btn-inner{padding-bottom:36px}.x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon-el{height:32px;top:auto}.x-ie6 .x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon-el{width:100%}.x-btn-default-toolbar-large-over{border-color:#81a4d0;background-image:none;background-color:#dbeeff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dbeeff),color-stop(48%,#d0e7ff),color-stop(52%,#bbd2f0),color-stop(100%,#bed6f5));background-image:-webkit-linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5);background-image:-moz-linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5);background-image:-o-linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5);background-image:linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5)}.x-btn-default-toolbar-large-focus{border-color:#81a4d0;background-image:none;background-color:#dbeeff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dbeeff),color-stop(48%,#d0e7ff),color-stop(52%,#bbd2f0),color-stop(100%,#bed6f5));background-image:-webkit-linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5);background-image:-moz-linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5);background-image:-o-linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5);background-image:linear-gradient(top,#dbeeff,#d0e7ff 48%,#bbd2f0 52%,#bed6f5)}.x-btn-default-toolbar-large-menu-active,.x-btn-default-toolbar-large-pressed{border-color:#7a9ac4;background-image:none;background-color:#bccfe5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#bccfe5),color-stop(48%,#c5d6e7),color-stop(52%,#95c4f4),color-stop(100%,#9fc9f5));background-image:-webkit-linear-gradient(top,#bccfe5,#c5d6e7 48%,#95c4f4 52%,#9fc9f5);background-image:-moz-linear-gradient(top,#bccfe5,#c5d6e7 48%,#95c4f4 52%,#9fc9f5);background-image:-o-linear-gradient(top,#bccfe5,#c5d6e7 48%,#95c4f4 52%,#9fc9f5);background-image:linear-gradient(top,#bccfe5,#c5d6e7 48%,#95c4f4 52%,#9fc9f5)}.x-btn-default-toolbar-large-over .x-frame-tl,.x-btn-default-toolbar-large-over .x-frame-bl,.x-btn-default-toolbar-large-over .x-frame-tr,.x-btn-default-toolbar-large-over .x-frame-br,.x-btn-default-toolbar-large-over .x-frame-tc,.x-btn-default-toolbar-large-over .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-large-over-corners.gif)}.x-btn-default-toolbar-large-over .x-frame-ml,.x-btn-default-toolbar-large-over .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-large-over-sides.gif)}.x-btn-default-toolbar-large-over .x-frame-mc{background-color:#dbeeff;background-image:url(images/btn/btn-default-toolbar-large-over-fbg.gif)}.x-btn-default-toolbar-large-focus .x-frame-tl,.x-btn-default-toolbar-large-focus .x-frame-bl,.x-btn-default-toolbar-large-focus .x-frame-tr,.x-btn-default-toolbar-large-focus .x-frame-br,.x-btn-default-toolbar-large-focus .x-frame-tc,.x-btn-default-toolbar-large-focus .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-large-focus-corners.gif)}.x-btn-default-toolbar-large-focus .x-frame-ml,.x-btn-default-toolbar-large-focus .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-large-focus-sides.gif)}.x-btn-default-toolbar-large-focus .x-frame-mc{background-color:#dbeeff;background-image:url(images/btn/btn-default-toolbar-large-focus-fbg.gif)}.x-btn-default-toolbar-large-menu-active .x-frame-tl,.x-btn-default-toolbar-large-menu-active .x-frame-bl,.x-btn-default-toolbar-large-menu-active .x-frame-tr,.x-btn-default-toolbar-large-menu-active .x-frame-br,.x-btn-default-toolbar-large-menu-active .x-frame-tc,.x-btn-default-toolbar-large-menu-active .x-frame-bc,.x-btn-default-toolbar-large-pressed .x-frame-tl,.x-btn-default-toolbar-large-pressed .x-frame-bl,.x-btn-default-toolbar-large-pressed .x-frame-tr,.x-btn-default-toolbar-large-pressed .x-frame-br,.x-btn-default-toolbar-large-pressed .x-frame-tc,.x-btn-default-toolbar-large-pressed .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-large-pressed-corners.gif)}.x-btn-default-toolbar-large-menu-active .x-frame-ml,.x-btn-default-toolbar-large-menu-active .x-frame-mr,.x-btn-default-toolbar-large-pressed .x-frame-ml,.x-btn-default-toolbar-large-pressed .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-large-pressed-sides.gif)}.x-btn-default-toolbar-large-menu-active .x-frame-mc,.x-btn-default-toolbar-large-pressed .x-frame-mc{background-color:#bccfe5;background-image:url(images/btn/btn-default-toolbar-large-pressed-fbg.gif)}.x-btn-default-toolbar-large-disabled .x-frame-tl,.x-btn-default-toolbar-large-disabled .x-frame-bl,.x-btn-default-toolbar-large-disabled .x-frame-tr,.x-btn-default-toolbar-large-disabled .x-frame-br,.x-btn-default-toolbar-large-disabled .x-frame-tc,.x-btn-default-toolbar-large-disabled .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-large-disabled-corners.gif)}.x-btn-default-toolbar-large-disabled .x-frame-ml,.x-btn-default-toolbar-large-disabled .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-large-disabled-sides.gif)}.x-btn-default-toolbar-large-disabled .x-frame-mc{background-color:transparent}.x-nlg .x-btn-default-toolbar-large-over{background-image:url(images/btn/btn-default-toolbar-large-over-bg.gif)}.x-nlg .x-btn-default-toolbar-large-focus{background-image:url(images/btn/btn-default-toolbar-large-focus-bg.gif)}.x-nlg .x-btn-default-toolbar-large-menu-active,.x-nlg .x-btn-default-toolbar-large-pressed{background-image:url(images/btn/btn-default-toolbar-large-pressed-bg.gif)}.x-nbr .x-btn-default-toolbar-large{background-image:none}.x-btn-default-toolbar-large .x-btn-split-right{background-image:url(images/button/s-arrow-noline.gif);padding-right:14px}.x-btn-default-toolbar-large .x-btn-split-bottom{background-image:url(images/button/s-arrow-b-noline.gif);padding-bottom:14px}.x-btn-default-toolbar-large-over .x-btn-split-right{background-image:url(images/button/s-arrow-o.gif)}.x-btn-default-toolbar-large-over .x-btn-split-bottom{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-default-toolbar-large-disabled{filter:alpha(opacity=50);opacity:.5}.x-btn-default-toolbar-large-over:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-over-corners.gif), sides:url(images/btn/btn-default-toolbar-large-over-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-large-over-fbg.gif), bg:url(images/btn/btn-default-toolbar-large-over-bg.gif)"}.x-btn-default-toolbar-large-focus:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-focus-corners.gif), sides:url(images/btn/btn-default-toolbar-large-focus-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-large-focus-fbg.gif), bg:url(images/btn/btn-default-toolbar-large-focus-bg.gif)"}.x-btn-default-toolbar-large-pressed:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-pressed-corners.gif), sides:url(images/btn/btn-default-toolbar-large-pressed-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-large-pressed-fbg.gif), bg:url(images/btn/btn-default-toolbar-large-pressed-bg.gif)"}.x-btn-default-toolbar-large-disabled:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-disabled-corners.gif), sides:url(images/btn/btn-default-toolbar-large-disabled-sides.gif)"}.x-btn-icon-text-left .x-btn-icon-el{background-position:left center}.x-btn-icon-text-right .x-btn-icon-el{background-position:right center}.x-btn-icon-text-top .x-btn-icon-el{background-position:center top}.x-btn-icon-text-bottom .x-btn-icon-el{background-position:center bottom}.x-btn-arrow-right{background-position:right center}.x-btn-arrow-bottom{background-position:center bottom}.x-btn-arrow{background-repeat:no-repeat}.x-btn-split{display:block;background-repeat:no-repeat}.x-btn-split-right{background-position:right center}.x-btn-split-bottom{background-position:center bottom}.x-cycle-fixed-width .x-btn-inner{text-align:inherit}.x-toolbar{font-size:11px;border-style:solid;padding:2px 0 2px 2px}.x-toolbar-item{margin:0 2px 0 0}.x-toolbar-text{margin:0 6px 0 4px;color:#4c4c4c;line-height:16px;font-family:tahoma,arial,verdana,sans-serif;font-size:11px;font-weight:normal}.x-toolbar-separator-horizontal{margin:0 2px 0 0;height:14px;border-style:solid;border-width:0 1px;border-left-color:#98c8ff;border-right-color:white}.x-toolbar-footer{background:transparent;border:0;margin:3px 0 0;padding:2px 0 2px 6px}.x-toolbar-footer .x-toolbar-item{margin:0 6px 0 0}.x-toolbar-spacer{width:2px}.x-toolbar-more-icon{background-image:url(images/toolbar/more.gif)!important;background-position:center center!important;background-repeat:no-repeat}.x-toolbar-default{border-color:#99bce8;border-width:1px;background-image:none;background-color:#d3e1f1;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dfe9f5),color-stop(100%,#d3e1f1));background-image:-webkit-linear-gradient(top,#dfe9f5,#d3e1f1);background-image:-moz-linear-gradient(top,#dfe9f5,#d3e1f1);background-image:-o-linear-gradient(top,#dfe9f5,#d3e1f1);background-image:linear-gradient(top,#dfe9f5,#d3e1f1)}.x-toolbar-default .x-box-scroller{cursor:pointer}.x-toolbar-default .x-box-scroller-disabled{filter:alpha(opacity=50);opacity:.5;cursor:default}.x-nlg .x-toolbar-default{background-image:url(images/toolbar/toolbar-default-bg.gif)!important;background-repeat:repeat-x}.x-toolbar-default:after{display:none;content:"x-slicer:bg:url(images/toolbar/toolbar-default-bg.gif), stretch:bottom"}.x-toolbar-scroll-left{background-image:url(images/toolbar/scroll-left.gif);background-position:-14px 0;width:14px;height:22px;border-style:solid;border-color:#8db2e3;border-width:0 0 1px;margin-top:0}.x-toolbar-scroll-left-hover{background-position:0 0}.x-toolbar-scroll-right{background-image:url(images/toolbar/scroll-right.gif);width:14px;height:22px;border-style:solid;border-color:#8db2e3;border-width:0 0 1px;margin-top:0}.x-toolbar-scroll-right-hover{background-position:-14px 0}.x-toolbar .x-box-menu-after{margin:0 2px 0 2px}.x-toolbar-vertical{padding:2px 2px 0 2px}.x-toolbar-vertical .x-toolbar-item{margin:0 0 2px 0}.x-toolbar-vertical .x-toolbar-text{margin:4px 0 6px 0}.x-toolbar-vertical .x-toolbar-separator-vertical{margin:0 5px 2px;border-style:solid none;border-width:1px 0;border-top-color:#98c8ff;border-bottom-color:white}.x-toolbar-vertical .x-box-menu-after,.x-toolbar-vertical .x-rtl.x-box-menu-after{margin:2px 0 2px 0;display:block;float:none}.x-header-draggable .x-header-body,.x-header-ghost{cursor:move}.x-header-text{white-space:nowrap}.x-panel-ghost{filter:alpha(opacity=65);opacity:.65}.x-panel-default{border-color:#99bce8;padding:0}.x-panel-header-default{font-size:11px;border:1px solid #99bce8}.x-panel-header-default-horizontal{padding:4px 5px 4px 5px}.x-panel-header-default-horizontal-noborder{padding:5px 6px 4px 6px}.x-panel-header-default-vertical{padding:5px 4px 5px 4px}.x-panel-header-default-vertical-noborder{padding:6px 5px 6px 4px}.x-panel-header-text-container-default{color:#04408c;font-size:11px;font-weight:bold;font-family:tahoma,arial,verdana,sans-serif;line-height:15px;padding:0 2px 1px;text-transform:none}.x-panel-body-default{background:white;border-color:#99bce8;color:black;font-size:12px;font-size:normal;border-width:1px;border-style:solid}.x-panel-header-default{background-image:none;background-color:#cbddf3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dae7f6),color-stop(45%,#cddef3),color-stop(46%,#abc7ec),color-stop(50%,#abc7ec),color-stop(51%,#b8cfee),color-stop(100%,#cbddf3));background-image:-webkit-linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-moz-linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-o-linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3)}.x-panel-header-default-vertical{background-image:none;background-color:#cbddf3;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#dae7f6),color-stop(45%,#cddef3),color-stop(46%,#abc7ec),color-stop(50%,#abc7ec),color-stop(51%,#b8cfee),color-stop(100%,#cbddf3));background-image:-webkit-linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-moz-linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-o-linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3)}.x-nlg .x-panel-header-default-top{background:url(images/panel-header/panel-header-default-top-bg.gif)}.x-nlg .x-panel-header-default-bottom{background:url(images/panel-header/panel-header-default-bottom-bg.gif)}.x-nlg .x-panel-header-default-left{background:url(images/panel-header/panel-header-default-left-bg.gif) top right}.x-nlg .x-panel-header-default-right{background:url(images/panel-header/panel-header-default-right-bg.gif) top right}.x-panel .x-panel-header-default-collapsed-border-top{border-bottom-width:1px!important}.x-panel .x-panel-header-default-collapsed-border-right{border-left-width:1px!important}.x-panel .x-panel-header-default-collapsed-border-bottom{border-top-width:1px!important}.x-panel .x-panel-header-default-collapsed-border-left{border-right-width:1px!important}.x-panel-header-default-top:after{display:none;content:"x-slicer:bg:url(images/panel-header/panel-header-default-top-bg.gif), stretch:bottom"}.x-panel-header-default-bottom:after{display:none;content:"x-slicer:bg:url(images/panel-header/panel-header-default-bottom-bg.gif), stretch:bottom"}.x-panel-header-default-left:after{display:none;content:"x-slicer:bg:url(images/panel-header/panel-header-default-left-bg.gif), stretch:left"}.x-panel-header-default-right:after{display:none;content:"x-slicer:bg:url(images/panel-header/panel-header-default-right-bg.gif), stretch:left"}.x-panel-header-default-vertical .x-panel-header-text-container{-webkit-transform:rotate(90deg);-webkit-transform-origin:0 0;-moz-transform:rotate(90deg);-moz-transform-origin:0 0;-o-transform:rotate(90deg);-o-transform-origin:0 0;transform:rotate(90deg);transform-origin:0 0}.x-ie9m .x-panel-header-default-vertical .x-panel-header-text-container{background-color:#cbddf3;filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1),progid:DXImageTransform.Microsoft.Chroma(color=#cbddf3)}.x-panel-header-default-top{-webkit-box-shadow:#f3f7fb 0 1px 0 0 inset;-moz-box-shadow:#f3f7fb 0 1px 0 0 inset;box-shadow:#f3f7fb 0 1px 0 0 inset}.x-panel-header-default-right{-webkit-box-shadow:#f3f7fb -1px 0 0 0 inset;-moz-box-shadow:#f3f7fb -1px 0 0 0 inset;box-shadow:#f3f7fb -1px 0 0 0 inset}.x-panel-header-default-bottom{-webkit-box-shadow:#f3f7fb 0 -1px 0 0 inset;-moz-box-shadow:#f3f7fb 0 -1px 0 0 inset;box-shadow:#f3f7fb 0 -1px 0 0 inset}.x-panel-header-default-left{-webkit-box-shadow:#f3f7fb 1px 0 0 0 inset;-moz-box-shadow:#f3f7fb 1px 0 0 0 inset;box-shadow:#f3f7fb 1px 0 0 0 inset}.x-panel-header-default .x-panel-header-icon{width:16px;height:16px;background-position:center center}.x-panel-header-default .x-panel-header-glyph{color:#04408c;font-size:16px;line-height:16px;opacity:.5}.x-ie8m .x-panel-header-default .x-panel-header-glyph{color:#678ebf}.x-panel-header-default-horizontal .x-panel-header-icon-before-title{margin:0 2px 0 0}.x-panel-header-default-horizontal .x-panel-header-icon-after-title{margin:0 0 0 2px}.x-panel-header-default-vertical .x-panel-header-icon-before-title{margin:0 0 2px 0}.x-panel-header-default-vertical .x-panel-header-icon-after-title{margin:2px 0 0 0}.x-panel-header-default-horizontal .x-tool-after-title{margin:0 0 0 2px}.x-panel-header-default-horizontal .x-tool-before-title{margin:0 2px 0 0}.x-panel-header-default-vertical .x-tool-after-title{margin:2px 0 0 0}.x-panel-header-default-vertical .x-tool-before-title{margin:0 0 2px 0}.x-panel-default-resizable .x-panel-handle{filter:alpha(opacity=0);opacity:0}.x-panel-default-framed{border-color:#99bce8;padding:4px}.x-panel-header-default-framed{font-size:11px;border:1px solid #99bce8}.x-panel-header-default-framed-horizontal{padding:4px 5px 4px 5px}.x-panel-header-default-framed-horizontal-noborder{padding:5px 6px 4px 6px}.x-panel-header-default-framed-vertical{padding:5px 4px 5px 4px}.x-panel-header-default-framed-vertical-noborder{padding:6px 5px 6px 4px}.x-panel-header-text-container-default-framed{color:#04408c;font-size:11px;font-weight:bold;font-family:tahoma,arial,verdana,sans-serif;line-height:15px;padding:0 2px 1px;text-transform:none}.x-panel-body-default-framed{background:#dfe9f6;border-color:#99bce8;color:black;font-size:12px;font-size:normal;border-width:0;border-style:solid}.x-panel-default-framed{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;padding:4px 4px 4px 4px;border-width:1px;border-style:solid;background-color:#dfe9f6}.x-panel-default-framed-mc{background-color:#dfe9f6}.x-nbr .x-panel-default-framed{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-default-framed-frameInfo{font-family:dh-4-4-4-4-1-1-1-1-4-4-4-4}.x-panel-default-framed-tl{background-position:0 -8px}.x-panel-default-framed-tr{background-position:right -12px}.x-panel-default-framed-bl{background-position:0 -16px}.x-panel-default-framed-br{background-position:right -20px}.x-panel-default-framed-ml{background-position:0 top}.x-panel-default-framed-mr{background-position:right top}.x-panel-default-framed-tc{background-position:0 0}.x-panel-default-framed-bc{background-position:0 -4px}.x-panel-default-framed-tr,.x-panel-default-framed-br,.x-panel-default-framed-mr{padding-right:4px}.x-panel-default-framed-tl,.x-panel-default-framed-bl,.x-panel-default-framed-ml{padding-left:4px}.x-panel-default-framed-tc{height:4px}.x-panel-default-framed-bc{height:4px}.x-panel-default-framed-tl,.x-panel-default-framed-bl,.x-panel-default-framed-tr,.x-panel-default-framed-br,.x-panel-default-framed-tc,.x-panel-default-framed-bc,.x-panel-default-framed-ml,.x-panel-default-framed-mr{zoom:1;background-image:url(images/panel/panel-default-framed-corners.gif)}.x-panel-default-framed-ml,.x-panel-default-framed-mr{zoom:1;background-image:url(images/panel/panel-default-framed-sides.gif);background-repeat:repeat-y}.x-panel-default-framed-mc{padding:1px 1px 1px 1px}.x-strict .x-ie7 .x-panel-default-framed-tl,.x-strict .x-ie7 .x-panel-default-framed-bl{position:relative;right:0}.x-panel-default-framed:after{display:none;content:"x-slicer:corners:url(images/panel/panel-default-framed-corners.gif), sides:url(images/panel/panel-default-framed-sides.gif)"}.x-panel-header-default-framed-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:4px 5px 4px 5px;border-width:1px 1px 0 1px;border-style:solid;background-image:none;background-color:#cbddf3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dae7f6),color-stop(45%,#cddef3),color-stop(46%,#abc7ec),color-stop(50%,#abc7ec),color-stop(51%,#b8cfee),color-stop(100%,#cbddf3));background-image:-webkit-linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-moz-linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-o-linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3)}.x-panel-header-default-framed-top-mc{background-image:url(images/panel-header/panel-header-default-framed-top-fbg.gif);background-position:0 top;background-color:#cbddf3}.x-nlg .x-panel-header-default-framed-top{background-image:url(images/panel-header/panel-header-default-framed-top-bg.gif);background-position:0 top}.x-nbr .x-panel-header-default-framed-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent;background-image:none}body.x-nbr .x-panel-header-default-framed-top-frameInfo{font-family:dh-4-4-0-0-1-1-0-1-4-5-4-5}.x-panel-header-default-framed-top-tl{background-position:0 -8px}.x-panel-header-default-framed-top-tr{background-position:right -12px}.x-panel-header-default-framed-top-bl{background-position:0 -16px}.x-panel-header-default-framed-top-br{background-position:right -20px}.x-panel-header-default-framed-top-ml{background-position:0 top}.x-panel-header-default-framed-top-mr{background-position:right top}.x-panel-header-default-framed-top-tc{background-position:0 0}.x-panel-header-default-framed-top-bc{background-position:0 -4px}.x-panel-header-default-framed-top-tr,.x-panel-header-default-framed-top-br,.x-panel-header-default-framed-top-mr{padding-right:4px}.x-panel-header-default-framed-top-tl,.x-panel-header-default-framed-top-bl,.x-panel-header-default-framed-top-ml{padding-left:4px}.x-panel-header-default-framed-top-tc{height:4px}.x-panel-header-default-framed-top-bc{height:0}.x-panel-header-default-framed-top-tl,.x-panel-header-default-framed-top-bl,.x-panel-header-default-framed-top-tr,.x-panel-header-default-framed-top-br,.x-panel-header-default-framed-top-tc,.x-panel-header-default-framed-top-bc,.x-panel-header-default-framed-top-ml,.x-panel-header-default-framed-top-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-top-corners.gif)}.x-panel-header-default-framed-top-ml,.x-panel-header-default-framed-top-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-top-sides.gif)}.x-panel-header-default-framed-top-mc{padding:1px 2px 4px 2px}.x-strict .x-ie7 .x-panel-header-default-framed-top-tl,.x-strict .x-ie7 .x-panel-header-default-framed-top-bl{position:relative;right:0}.x-panel-header-default-framed-top:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/panel-header/panel-header-default-framed-top-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-top-bg.gif), corners:url(images/panel-header/panel-header-default-framed-top-corners.gif), sides:url(images/panel-header/panel-header-default-framed-top-sides.gif)"}.x-panel-header-default-framed-right{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:5px 4px 5px 4px;border-width:1px 1px 1px 0;border-style:solid;background-image:none;background-color:#cbddf3;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#dae7f6),color-stop(45%,#cddef3),color-stop(46%,#abc7ec),color-stop(50%,#abc7ec),color-stop(51%,#b8cfee),color-stop(100%,#cbddf3));background-image:-webkit-linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-moz-linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-o-linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3)}.x-panel-header-default-framed-right-mc{background-image:url(images/panel-header/panel-header-default-framed-right-fbg.gif);background-position:right 0;background-color:#cbddf3}.x-nlg .x-panel-header-default-framed-right{background-image:url(images/panel-header/panel-header-default-framed-right-bg.gif);background-position:right 0}.x-nbr .x-panel-header-default-framed-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent;background-image:none}body.x-nbr .x-panel-header-default-framed-right-frameInfo{font-family:dv-0-4-4-0-1-1-1-0-5-4-5-4}.x-panel-header-default-framed-right-tl{background-position:0 0}.x-panel-header-default-framed-right-tr{background-position:0 -4px}.x-panel-header-default-framed-right-bl{background-position:0 -8px}.x-panel-header-default-framed-right-br{background-position:0 -12px}.x-panel-header-default-framed-right-ml{background-position:-4px 0}.x-panel-header-default-framed-right-mr{background-position:right 0}.x-panel-header-default-framed-right-tc{background-position:right 0}.x-panel-header-default-framed-right-bc{background-position:right -4px}.x-panel-header-default-framed-right-tr,.x-panel-header-default-framed-right-br,.x-panel-header-default-framed-right-mr{padding-right:4px}.x-panel-header-default-framed-right-tl,.x-panel-header-default-framed-right-bl,.x-panel-header-default-framed-right-ml{padding-left:0}.x-panel-header-default-framed-right-tc{height:4px}.x-panel-header-default-framed-right-bc{height:4px}.x-panel-header-default-framed-right-tl,.x-panel-header-default-framed-right-bl,.x-panel-header-default-framed-right-tr,.x-panel-header-default-framed-right-br,.x-panel-header-default-framed-right-tc,.x-panel-header-default-framed-right-bc,.x-panel-header-default-framed-right-ml,.x-panel-header-default-framed-right-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-right-corners.gif)}.x-panel-header-default-framed-right-tc,.x-panel-header-default-framed-right-bc{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-right-sides.gif);background-repeat:repeat-x}.x-panel-header-default-framed-right-mc{padding:2px 1px 2px 4px}.x-strict .x-ie7 .x-panel-header-default-framed-right-tl,.x-strict .x-ie7 .x-panel-header-default-framed-right-bl{position:relative;right:0}.x-panel-header-default-framed-right:after{display:none;content:"x-slicer:stretch:left, frame-bg:url(images/panel-header/panel-header-default-framed-right-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-right-bg.gif), corners:url(images/panel-header/panel-header-default-framed-right-corners.gif), sides:url(images/panel-header/panel-header-default-framed-right-sides.gif)"}.x-panel-header-default-framed-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:4px 5px 4px 5px;border-width:0 1px 1px 1px;border-style:solid;background-image:none;background-color:#cbddf3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dae7f6),color-stop(45%,#cddef3),color-stop(46%,#abc7ec),color-stop(50%,#abc7ec),color-stop(51%,#b8cfee),color-stop(100%,#cbddf3));background-image:-webkit-linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-moz-linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-o-linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3)}.x-panel-header-default-framed-bottom-mc{background-image:url(images/panel-header/panel-header-default-framed-bottom-fbg.gif);background-position:0 bottom;background-color:#cbddf3}.x-nlg .x-panel-header-default-framed-bottom{background-image:url(images/panel-header/panel-header-default-framed-bottom-bg.gif);background-position:0 bottom}.x-nbr .x-panel-header-default-framed-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent;background-image:none}body.x-nbr .x-panel-header-default-framed-bottom-frameInfo{font-family:dh-0-0-4-4-0-1-1-1-4-5-4-5}.x-panel-header-default-framed-bottom-tl{background-position:0 -8px}.x-panel-header-default-framed-bottom-tr{background-position:right -12px}.x-panel-header-default-framed-bottom-bl{background-position:0 -16px}.x-panel-header-default-framed-bottom-br{background-position:right -20px}.x-panel-header-default-framed-bottom-ml{background-position:0 bottom}.x-panel-header-default-framed-bottom-mr{background-position:right bottom}.x-panel-header-default-framed-bottom-tc{background-position:0 0}.x-panel-header-default-framed-bottom-bc{background-position:0 -4px}.x-panel-header-default-framed-bottom-tr,.x-panel-header-default-framed-bottom-br,.x-panel-header-default-framed-bottom-mr{padding-right:4px}.x-panel-header-default-framed-bottom-tl,.x-panel-header-default-framed-bottom-bl,.x-panel-header-default-framed-bottom-ml{padding-left:4px}.x-panel-header-default-framed-bottom-tc{height:0}.x-panel-header-default-framed-bottom-bc{height:4px}.x-panel-header-default-framed-bottom-tl,.x-panel-header-default-framed-bottom-bl,.x-panel-header-default-framed-bottom-tr,.x-panel-header-default-framed-bottom-br,.x-panel-header-default-framed-bottom-tc,.x-panel-header-default-framed-bottom-bc,.x-panel-header-default-framed-bottom-ml,.x-panel-header-default-framed-bottom-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-bottom-corners.gif)}.x-panel-header-default-framed-bottom-ml,.x-panel-header-default-framed-bottom-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-bottom-sides.gif)}.x-panel-header-default-framed-bottom-mc{padding:4px 2px 1px 2px}.x-strict .x-ie7 .x-panel-header-default-framed-bottom-tl,.x-strict .x-ie7 .x-panel-header-default-framed-bottom-bl{position:relative;right:0}.x-panel-header-default-framed-bottom:after{display:none;content:"x-slicer:stretch:top, frame-bg:url(images/panel-header/panel-header-default-framed-bottom-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-bottom-bg.gif), corners:url(images/panel-header/panel-header-default-framed-bottom-corners.gif), sides:url(images/panel-header/panel-header-default-framed-bottom-sides.gif)"}.x-panel-header-default-framed-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 4px 5px 4px;border-width:1px 0 1px 1px;border-style:solid;background-image:none;background-color:#cbddf3;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#dae7f6),color-stop(45%,#cddef3),color-stop(46%,#abc7ec),color-stop(50%,#abc7ec),color-stop(51%,#b8cfee),color-stop(100%,#cbddf3));background-image:-webkit-linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-moz-linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-o-linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3)}.x-panel-header-default-framed-left-mc{background-image:url(images/panel-header/panel-header-default-framed-left-fbg.gif);background-position:left 0;background-color:#cbddf3}.x-nlg .x-panel-header-default-framed-left{background-image:url(images/panel-header/panel-header-default-framed-left-bg.gif);background-position:left 0}.x-nbr .x-panel-header-default-framed-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent;background-image:none}body.x-nbr .x-panel-header-default-framed-left-frameInfo{font-family:dv-4-0-0-4-1-0-1-1-5-4-5-4}.x-panel-header-default-framed-left-tl{background-position:0 0}.x-panel-header-default-framed-left-tr{background-position:0 -4px}.x-panel-header-default-framed-left-bl{background-position:0 -8px}.x-panel-header-default-framed-left-br{background-position:0 -12px}.x-panel-header-default-framed-left-ml{background-position:-4px 0}.x-panel-header-default-framed-left-mr{background-position:right 0}.x-panel-header-default-framed-left-tc{background-position:left 0}.x-panel-header-default-framed-left-bc{background-position:left -4px}.x-panel-header-default-framed-left-tr,.x-panel-header-default-framed-left-br,.x-panel-header-default-framed-left-mr{padding-right:0}.x-panel-header-default-framed-left-tl,.x-panel-header-default-framed-left-bl,.x-panel-header-default-framed-left-ml{padding-left:4px}.x-panel-header-default-framed-left-tc{height:4px}.x-panel-header-default-framed-left-bc{height:4px}.x-panel-header-default-framed-left-tl,.x-panel-header-default-framed-left-bl,.x-panel-header-default-framed-left-tr,.x-panel-header-default-framed-left-br,.x-panel-header-default-framed-left-tc,.x-panel-header-default-framed-left-bc,.x-panel-header-default-framed-left-ml,.x-panel-header-default-framed-left-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-left-corners.gif)}.x-panel-header-default-framed-left-tc,.x-panel-header-default-framed-left-bc{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-left-sides.gif);background-repeat:repeat-x}.x-panel-header-default-framed-left-mc{padding:2px 4px 2px 1px}.x-strict .x-ie7 .x-panel-header-default-framed-left-tl,.x-strict .x-ie7 .x-panel-header-default-framed-left-bl{position:relative;right:0}.x-panel-header-default-framed-left:after{display:none;content:"x-slicer:stretch:right, frame-bg:url(images/panel-header/panel-header-default-framed-left-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-left-bg.gif), corners:url(images/panel-header/panel-header-default-framed-left-corners.gif), sides:url(images/panel-header/panel-header-default-framed-left-sides.gif)"}.x-panel-header-default-framed-collapsed-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-image:none;background-color:#cbddf3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dae7f6),color-stop(45%,#cddef3),color-stop(46%,#abc7ec),color-stop(50%,#abc7ec),color-stop(51%,#b8cfee),color-stop(100%,#cbddf3));background-image:-webkit-linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-moz-linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-o-linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3)}.x-panel-header-default-framed-collapsed-top-mc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif);background-position:0 top;background-color:#cbddf3}.x-nlg .x-panel-header-default-framed-collapsed-top{background-image:url(images/panel-header/panel-header-default-framed-collapsed-top-bg.gif);background-position:0 top}.x-nbr .x-panel-header-default-framed-collapsed-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent;background-image:none}body.x-nbr .x-panel-header-default-framed-collapsed-top-frameInfo{font-family:dh-4-4-4-4-1-1-1-1-4-5-4-5}.x-panel-header-default-framed-collapsed-top-tl{background-position:0 -8px}.x-panel-header-default-framed-collapsed-top-tr{background-position:right -12px}.x-panel-header-default-framed-collapsed-top-bl{background-position:0 -16px}.x-panel-header-default-framed-collapsed-top-br{background-position:right -20px}.x-panel-header-default-framed-collapsed-top-ml{background-position:0 top}.x-panel-header-default-framed-collapsed-top-mr{background-position:right top}.x-panel-header-default-framed-collapsed-top-tc{background-position:0 0}.x-panel-header-default-framed-collapsed-top-bc{background-position:0 -4px}.x-panel-header-default-framed-collapsed-top-tr,.x-panel-header-default-framed-collapsed-top-br,.x-panel-header-default-framed-collapsed-top-mr{padding-right:4px}.x-panel-header-default-framed-collapsed-top-tl,.x-panel-header-default-framed-collapsed-top-bl,.x-panel-header-default-framed-collapsed-top-ml{padding-left:4px}.x-panel-header-default-framed-collapsed-top-tc{height:4px}.x-panel-header-default-framed-collapsed-top-bc{height:4px}.x-panel-header-default-framed-collapsed-top-tl,.x-panel-header-default-framed-collapsed-top-bl,.x-panel-header-default-framed-collapsed-top-tr,.x-panel-header-default-framed-collapsed-top-br,.x-panel-header-default-framed-collapsed-top-tc,.x-panel-header-default-framed-collapsed-top-bc,.x-panel-header-default-framed-collapsed-top-ml,.x-panel-header-default-framed-collapsed-top-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-top-corners.gif)}.x-panel-header-default-framed-collapsed-top-ml,.x-panel-header-default-framed-collapsed-top-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-top-sides.gif)}.x-panel-header-default-framed-collapsed-top-mc{padding:1px 2px 1px 2px}.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-top-tl,.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-top-bl{position:relative;right:0}.x-panel-header-default-framed-collapsed-top:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-top-bg.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-top-corners.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-top-sides.gif)"}.x-panel-header-default-framed-collapsed-right{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 4px 5px 4px;border-width:1px;border-style:solid;background-image:none;background-color:#cbddf3;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#dae7f6),color-stop(45%,#cddef3),color-stop(46%,#abc7ec),color-stop(50%,#abc7ec),color-stop(51%,#b8cfee),color-stop(100%,#cbddf3));background-image:-webkit-linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-moz-linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-o-linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3)}.x-panel-header-default-framed-collapsed-right-mc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif);background-position:right 0;background-color:#cbddf3}.x-nlg .x-panel-header-default-framed-collapsed-right{background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-bg.gif);background-position:right 0}.x-nbr .x-panel-header-default-framed-collapsed-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent;background-image:none}body.x-nbr .x-panel-header-default-framed-collapsed-right-frameInfo{font-family:dv-4-4-4-4-1-1-1-1-5-4-5-4}.x-panel-header-default-framed-collapsed-right-tl{background-position:0 0}.x-panel-header-default-framed-collapsed-right-tr{background-position:0 -4px}.x-panel-header-default-framed-collapsed-right-bl{background-position:0 -8px}.x-panel-header-default-framed-collapsed-right-br{background-position:0 -12px}.x-panel-header-default-framed-collapsed-right-ml{background-position:-4px 0}.x-panel-header-default-framed-collapsed-right-mr{background-position:right 0}.x-panel-header-default-framed-collapsed-right-tc{background-position:right 0}.x-panel-header-default-framed-collapsed-right-bc{background-position:right -4px}.x-panel-header-default-framed-collapsed-right-tr,.x-panel-header-default-framed-collapsed-right-br,.x-panel-header-default-framed-collapsed-right-mr{padding-right:4px}.x-panel-header-default-framed-collapsed-right-tl,.x-panel-header-default-framed-collapsed-right-bl,.x-panel-header-default-framed-collapsed-right-ml{padding-left:4px}.x-panel-header-default-framed-collapsed-right-tc{height:4px}.x-panel-header-default-framed-collapsed-right-bc{height:4px}.x-panel-header-default-framed-collapsed-right-tl,.x-panel-header-default-framed-collapsed-right-bl,.x-panel-header-default-framed-collapsed-right-tr,.x-panel-header-default-framed-collapsed-right-br,.x-panel-header-default-framed-collapsed-right-tc,.x-panel-header-default-framed-collapsed-right-bc,.x-panel-header-default-framed-collapsed-right-ml,.x-panel-header-default-framed-collapsed-right-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-corners.gif)}.x-panel-header-default-framed-collapsed-right-tc,.x-panel-header-default-framed-collapsed-right-bc{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-sides.gif);background-repeat:repeat-x}.x-panel-header-default-framed-collapsed-right-mc{padding:2px 1px 2px 1px}.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-right-tl,.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-right-bl{position:relative;right:0}.x-panel-header-default-framed-collapsed-right:after{display:none;content:"x-slicer:stretch:left, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-right-bg.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-right-corners.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-right-sides.gif)"}.x-panel-header-default-framed-collapsed-bottom{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-image:none;background-color:#cbddf3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dae7f6),color-stop(45%,#cddef3),color-stop(46%,#abc7ec),color-stop(50%,#abc7ec),color-stop(51%,#b8cfee),color-stop(100%,#cbddf3));background-image:-webkit-linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-moz-linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-o-linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:linear-gradient(top,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3)}.x-panel-header-default-framed-collapsed-bottom-mc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif);background-position:0 bottom;background-color:#cbddf3}.x-nlg .x-panel-header-default-framed-collapsed-bottom{background-image:url(images/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif);background-position:0 bottom}.x-nbr .x-panel-header-default-framed-collapsed-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent;background-image:none}body.x-nbr .x-panel-header-default-framed-collapsed-bottom-frameInfo{font-family:dh-4-4-4-4-1-1-1-1-4-5-4-5}.x-panel-header-default-framed-collapsed-bottom-tl{background-position:0 -8px}.x-panel-header-default-framed-collapsed-bottom-tr{background-position:right -12px}.x-panel-header-default-framed-collapsed-bottom-bl{background-position:0 -16px}.x-panel-header-default-framed-collapsed-bottom-br{background-position:right -20px}.x-panel-header-default-framed-collapsed-bottom-ml{background-position:0 bottom}.x-panel-header-default-framed-collapsed-bottom-mr{background-position:right bottom}.x-panel-header-default-framed-collapsed-bottom-tc{background-position:0 0}.x-panel-header-default-framed-collapsed-bottom-bc{background-position:0 -4px}.x-panel-header-default-framed-collapsed-bottom-tr,.x-panel-header-default-framed-collapsed-bottom-br,.x-panel-header-default-framed-collapsed-bottom-mr{padding-right:4px}.x-panel-header-default-framed-collapsed-bottom-tl,.x-panel-header-default-framed-collapsed-bottom-bl,.x-panel-header-default-framed-collapsed-bottom-ml{padding-left:4px}.x-panel-header-default-framed-collapsed-bottom-tc{height:4px}.x-panel-header-default-framed-collapsed-bottom-bc{height:4px}.x-panel-header-default-framed-collapsed-bottom-tl,.x-panel-header-default-framed-collapsed-bottom-bl,.x-panel-header-default-framed-collapsed-bottom-tr,.x-panel-header-default-framed-collapsed-bottom-br,.x-panel-header-default-framed-collapsed-bottom-tc,.x-panel-header-default-framed-collapsed-bottom-bc,.x-panel-header-default-framed-collapsed-bottom-ml,.x-panel-header-default-framed-collapsed-bottom-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif)}.x-panel-header-default-framed-collapsed-bottom-ml,.x-panel-header-default-framed-collapsed-bottom-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif)}.x-panel-header-default-framed-collapsed-bottom-mc{padding:1px 2px 1px 2px}.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-bottom-tl,.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-bottom-bl{position:relative;right:0}.x-panel-header-default-framed-collapsed-bottom:after{display:none;content:"x-slicer:stretch:top, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif)"}.x-panel-header-default-framed-collapsed-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 4px 5px 4px;border-width:1px;border-style:solid;background-image:none;background-color:#cbddf3;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#dae7f6),color-stop(45%,#cddef3),color-stop(46%,#abc7ec),color-stop(50%,#abc7ec),color-stop(51%,#b8cfee),color-stop(100%,#cbddf3));background-image:-webkit-linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-moz-linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:-o-linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3);background-image:linear-gradient(right,#dae7f6,#cddef3 45%,#abc7ec 46%,#abc7ec 50%,#b8cfee 51%,#cbddf3)}.x-panel-header-default-framed-collapsed-left-mc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif);background-position:left 0;background-color:#cbddf3}.x-nlg .x-panel-header-default-framed-collapsed-left{background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-bg.gif);background-position:left 0}.x-nbr .x-panel-header-default-framed-collapsed-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent;background-image:none}body.x-nbr .x-panel-header-default-framed-collapsed-left-frameInfo{font-family:dv-4-4-4-4-1-1-1-1-5-4-5-4}.x-panel-header-default-framed-collapsed-left-tl{background-position:0 0}.x-panel-header-default-framed-collapsed-left-tr{background-position:0 -4px}.x-panel-header-default-framed-collapsed-left-bl{background-position:0 -8px}.x-panel-header-default-framed-collapsed-left-br{background-position:0 -12px}.x-panel-header-default-framed-collapsed-left-ml{background-position:-4px 0}.x-panel-header-default-framed-collapsed-left-mr{background-position:right 0}.x-panel-header-default-framed-collapsed-left-tc{background-position:left 0}.x-panel-header-default-framed-collapsed-left-bc{background-position:left -4px}.x-panel-header-default-framed-collapsed-left-tr,.x-panel-header-default-framed-collapsed-left-br,.x-panel-header-default-framed-collapsed-left-mr{padding-right:4px}.x-panel-header-default-framed-collapsed-left-tl,.x-panel-header-default-framed-collapsed-left-bl,.x-panel-header-default-framed-collapsed-left-ml{padding-left:4px}.x-panel-header-default-framed-collapsed-left-tc{height:4px}.x-panel-header-default-framed-collapsed-left-bc{height:4px}.x-panel-header-default-framed-collapsed-left-tl,.x-panel-header-default-framed-collapsed-left-bl,.x-panel-header-default-framed-collapsed-left-tr,.x-panel-header-default-framed-collapsed-left-br,.x-panel-header-default-framed-collapsed-left-tc,.x-panel-header-default-framed-collapsed-left-bc,.x-panel-header-default-framed-collapsed-left-ml,.x-panel-header-default-framed-collapsed-left-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-corners.gif)}.x-panel-header-default-framed-collapsed-left-tc,.x-panel-header-default-framed-collapsed-left-bc{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-sides.gif);background-repeat:repeat-x}.x-panel-header-default-framed-collapsed-left-mc{padding:2px 1px 2px 1px}.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-left-tl,.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-left-bl{position:relative;right:0}.x-panel-header-default-framed-collapsed-left:after{display:none;content:"x-slicer:stretch:right, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-left-bg.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-left-corners.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-left-sides.gif)"}.x-panel .x-panel-header-default-framed-top{border-bottom-width:1px!important}.x-panel .x-panel-header-default-framed-right{border-left-width:1px!important}.x-panel .x-panel-header-default-framed-bottom{border-top-width:1px!important}.x-panel .x-panel-header-default-framed-left{border-right-width:1px!important}.x-nbr .x-panel-header-default-framed-collapsed-top{border-bottom-width:0!important}.x-nbr .x-panel-header-default-framed-collapsed-right{border-left-width:0!important}.x-nbr .x-panel-header-default-framed-collapsed-bottom{border-top-width:0!important}.x-nbr .x-panel-header-default-framed-collapsed-left{border-right-width:0!important}.x-panel-header-default-framed-vertical .x-panel-header-text-container{-webkit-transform:rotate(90deg);-webkit-transform-origin:0 0;-moz-transform:rotate(90deg);-moz-transform-origin:0 0;-o-transform:rotate(90deg);-o-transform-origin:0 0;transform:rotate(90deg);transform-origin:0 0}.x-ie9m .x-panel-header-default-framed-vertical .x-panel-header-text-container{background-color:#cbddf3;filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1),progid:DXImageTransform.Microsoft.Chroma(color=#cbddf3)}.x-panel-header-default-framed-top{-webkit-box-shadow:#f3f7fb 0 1px 0 0 inset,#f3f7fb -1px 0 0 0 inset,#f3f7fb 1px 0 0 0 inset;-moz-box-shadow:#f3f7fb 0 1px 0 0 inset,#f3f7fb -1px 0 0 0 inset,#f3f7fb 1px 0 0 0 inset;box-shadow:#f3f7fb 0 1px 0 0 inset,#f3f7fb -1px 0 0 0 inset,#f3f7fb 1px 0 0 0 inset}.x-panel-header-default-framed-right{-webkit-box-shadow:#f3f7fb 0 1px 0 0 inset,#f3f7fb 0 -1px 0 0 inset,#f3f7fb -1px 0 0 0 inset;-moz-box-shadow:#f3f7fb 0 1px 0 0 inset,#f3f7fb 0 -1px 0 0 inset,#f3f7fb -1px 0 0 0 inset;box-shadow:#f3f7fb 0 1px 0 0 inset,#f3f7fb 0 -1px 0 0 inset,#f3f7fb -1px 0 0 0 inset}.x-panel-header-default-framed-bottom{-webkit-box-shadow:#f3f7fb 0 -1px 0 0 inset,#f3f7fb -1px 0 0 0 inset,#f3f7fb 1px 0 0 0 inset;-moz-box-shadow:#f3f7fb 0 -1px 0 0 inset,#f3f7fb -1px 0 0 0 inset,#f3f7fb 1px 0 0 0 inset;box-shadow:#f3f7fb 0 -1px 0 0 inset,#f3f7fb -1px 0 0 0 inset,#f3f7fb 1px 0 0 0 inset}.x-panel-header-default-framed-left{-webkit-box-shadow:#f3f7fb 0 1px 0 0 inset,#f3f7fb 0 -1px 0 0 inset,#f3f7fb 1px 0 0 0 inset;-moz-box-shadow:#f3f7fb 0 1px 0 0 inset,#f3f7fb 0 -1px 0 0 inset,#f3f7fb 1px 0 0 0 inset;box-shadow:#f3f7fb 0 1px 0 0 inset,#f3f7fb 0 -1px 0 0 inset,#f3f7fb 1px 0 0 0 inset}.x-panel-header-default-framed .x-panel-header-icon{width:16px;height:16px;background-position:center center}.x-panel-header-default-framed .x-panel-header-glyph{color:#04408c;font-size:16px;line-height:16px;opacity:.5}.x-ie8m .x-panel-header-default-framed .x-panel-header-glyph{color:#678ebf}.x-panel-header-default-framed-horizontal .x-panel-header-icon-before-title{margin:0 2px 0 0}.x-panel-header-default-framed-horizontal .x-panel-header-icon-after-title{margin:0 0 0 2px}.x-panel-header-default-framed-vertical .x-panel-header-icon-before-title{margin:0 0 2px 0}.x-panel-header-default-framed-vertical .x-panel-header-icon-after-title{margin:2px 0 0 0}.x-panel-header-default-framed-horizontal .x-tool-after-title{margin:0 0 0 2px}.x-panel-header-default-framed-horizontal .x-tool-before-title{margin:0 2px 0 0}.x-panel-header-default-framed-vertical .x-tool-after-title{margin:2px 0 0 0}.x-panel-header-default-framed-vertical .x-tool-before-title{margin:0 0 2px 0}.x-panel-default-framed-resizable .x-panel-handle{filter:alpha(opacity=0);opacity:0}.x-tip-anchor{position:absolute;overflow:hidden;height:10px;width:10px;border-style:solid;border-width:5px;border-color:#8eaace;zoom:1}.x-content-box .x-tip-anchor{height:0;width:0}.x-tip-anchor-top{border-top-color:transparent;border-left-color:transparent;border-right-color:transparent;_border-top-color:pink;_border-left-color:pink;_border-right-color:pink;_filter:chroma(color=pink)}.x-tip-anchor-bottom{border-bottom-color:transparent;border-left-color:transparent;border-right-color:transparent;_border-bottom-color:pink;_border-left-color:pink;_border-right-color:pink;_filter:chroma(color=pink)}.x-tip-anchor-left{border-top-color:transparent;border-bottom-color:transparent;border-left-color:transparent;_border-top-color:pink;_border-bottom-color:pink;_border-left-color:pink;_filter:chroma(color=pink)}.x-tip-anchor-right{border-top-color:transparent;border-bottom-color:transparent;border-right-color:transparent;_border-top-color:pink;_border-bottom-color:pink;_border-right-color:pink;_filter:chroma(color=pink)}.x-tip-default{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:2px 2px 2px 2px;border-width:1px;border-style:solid;background-color:#e9f2ff}.x-tip-default-mc{background-color:#e9f2ff}.x-nbr .x-tip-default{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-tip-default-frameInfo{font-family:th-3-3-3-3-1-1-1-1-2-2-2-2}.x-tip-default-tl{background-position:0 -6px}.x-tip-default-tr{background-position:right -9px}.x-tip-default-bl{background-position:0 -12px}.x-tip-default-br{background-position:right -15px}.x-tip-default-ml{background-position:0 top}.x-tip-default-mr{background-position:right top}.x-tip-default-tc{background-position:0 0}.x-tip-default-bc{background-position:0 -3px}.x-tip-default-tr,.x-tip-default-br,.x-tip-default-mr{padding-right:3px}.x-tip-default-tl,.x-tip-default-bl,.x-tip-default-ml{padding-left:3px}.x-tip-default-tc{height:3px}.x-tip-default-bc{height:3px}.x-tip-default-tl,.x-tip-default-bl,.x-tip-default-tr,.x-tip-default-br,.x-tip-default-tc,.x-tip-default-bc,.x-tip-default-ml,.x-tip-default-mr{zoom:1;background-image:url(images/tip/tip-default-corners.gif)}.x-tip-default-ml,.x-tip-default-mr{zoom:1;background-image:url(images/tip/tip-default-sides.gif);background-repeat:repeat-y}.x-tip-default-mc{padding:0}.x-strict .x-ie7 .x-tip-default-tl,.x-strict .x-ie7 .x-tip-default-bl{position:relative;right:0}.x-tip-default:after{display:none;content:"x-slicer:corners:url(images/tip/tip-default-corners.gif), sides:url(images/tip/tip-default-sides.gif)"}.x-tip-default{border-color:#8eaace}.x-tip-default .x-tool-img{background-color:#e9f2ff}.x-tip-header-default .x-tool-after-title{margin:0 0 0 6px}.x-tip-header-default .x-tool-before-title{margin:0 6px 0 0}.x-tip-header-body-default{padding:3px 3px 0 3px}.x-tip-header-text-container-default{color:#444;font-size:11px;font-weight:bold}.x-tip-body-default{padding:3px;color:#444;font-size:11px;font-weight:normal}.x-tip-body-default a{color:#2a2a2a}.x-tip-form-invalid{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:4px 4px 4px 4px;border-width:1px;border-style:solid;background-color:white}.x-tip-form-invalid-mc{background-color:white}.x-nbr .x-tip-form-invalid{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-tip-form-invalid-frameInfo{font-family:th-5-5-5-5-1-1-1-1-4-4-4-4}.x-tip-form-invalid-tl{background-position:0 -10px}.x-tip-form-invalid-tr{background-position:right -15px}.x-tip-form-invalid-bl{background-position:0 -20px}.x-tip-form-invalid-br{background-position:right -25px}.x-tip-form-invalid-ml{background-position:0 top}.x-tip-form-invalid-mr{background-position:right top}.x-tip-form-invalid-tc{background-position:0 0}.x-tip-form-invalid-bc{background-position:0 -5px}.x-tip-form-invalid-tr,.x-tip-form-invalid-br,.x-tip-form-invalid-mr{padding-right:5px}.x-tip-form-invalid-tl,.x-tip-form-invalid-bl,.x-tip-form-invalid-ml{padding-left:5px}.x-tip-form-invalid-tc{height:5px}.x-tip-form-invalid-bc{height:5px}.x-tip-form-invalid-tl,.x-tip-form-invalid-bl,.x-tip-form-invalid-tr,.x-tip-form-invalid-br,.x-tip-form-invalid-tc,.x-tip-form-invalid-bc,.x-tip-form-invalid-ml,.x-tip-form-invalid-mr{zoom:1;background-image:url(images/tip/tip-form-invalid-corners.gif)}.x-tip-form-invalid-ml,.x-tip-form-invalid-mr{zoom:1;background-image:url(images/tip/tip-form-invalid-sides.gif);background-repeat:repeat-y}.x-tip-form-invalid-mc{padding:0}.x-strict .x-ie7 .x-tip-form-invalid-tl,.x-strict .x-ie7 .x-tip-form-invalid-bl{position:relative;right:0}.x-tip-form-invalid:after{display:none;content:"x-slicer:corners:url(images/tip/tip-form-invalid-corners.gif), sides:url(images/tip/tip-form-invalid-sides.gif)"}.x-tip-form-invalid{border-color:#a1311f;-webkit-box-shadow:#d87166 0 1px 0 0 inset,#d87166 0 -1px 0 0 inset,#d87166 -1px 0 0 0 inset,#d87166 1px 0 0 0 inset;-moz-box-shadow:#d87166 0 1px 0 0 inset,#d87166 0 -1px 0 0 inset,#d87166 -1px 0 0 0 inset,#d87166 1px 0 0 0 inset;box-shadow:#d87166 0 1px 0 0 inset,#d87166 0 -1px 0 0 inset,#d87166 -1px 0 0 0 inset,#d87166 1px 0 0 0 inset}.x-tip-form-invalid .x-tool-img{background-color:white}.x-tip-header-form-invalid .x-tool-after-title{margin:0 0 0 6px}.x-tip-header-form-invalid .x-tool-before-title{margin:0 6px 0 0}.x-tip-header-body-form-invalid{padding:3px 3px 0 3px}.x-tip-header-text-container-form-invalid{color:#444;font-size:11px;font-weight:bold}.x-tip-body-form-invalid{padding:3px 3px 3px 22px;color:#444;font-size:11px;font-weight:normal}.x-tip-body-form-invalid a{color:#2a2a2a}.x-tip-body-form-invalid{background:1px 1px no-repeat;background-image:url(images/form/exclamation.gif)}.x-tip-body-form-invalid li{margin-bottom:4px}.x-tip-body-form-invalid li.last{margin-bottom:0}.x-btn-group-default{border-color:#b7c8d7;-webkit-box-shadow:#e3ebf5 0 1px 0 0 inset,#e3ebf5 0 -1px 0 0 inset,#e3ebf5 -1px 0 0 0 inset,#e3ebf5 1px 0 0 0 inset;-moz-box-shadow:#e3ebf5 0 1px 0 0 inset,#e3ebf5 0 -1px 0 0 inset,#e3ebf5 -1px 0 0 0 inset,#e3ebf5 1px 0 0 0 inset;box-shadow:#e3ebf5 0 1px 0 0 inset,#e3ebf5 0 -1px 0 0 inset,#e3ebf5 -1px 0 0 0 inset,#e3ebf5 1px 0 0 0 inset}.x-btn-group-header-default{margin:2px 2px 0 2px;padding:1px 0;line-height:15px;background:#c2d8f0;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0}.x-btn-group-header-default .x-tool-img{background-color:#c2d8f0}.x-btn-group-header-text-container-default{font:normal 11px tahoma,arial,verdana,sans-serif;line-height:15px;color:#3e6aaa}.x-btn-group-body-default{padding:0 1px}.x-btn-group-body-default .x-table-layout{border-spacing:0}.x-btn-group-default-framed{-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;padding:1px 1px 1px 1px;border-width:1px;border-style:solid;background-color:#d0def0}.x-btn-group-default-framed-mc{background-color:#d0def0}.x-nbr .x-btn-group-default-framed{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-group-default-framed-frameInfo{font-family:dh-2-2-2-2-1-1-1-1-1-1-1-1}.x-btn-group-default-framed-tl{background-position:0 -4px}.x-btn-group-default-framed-tr{background-position:right -6px}.x-btn-group-default-framed-bl{background-position:0 -8px}.x-btn-group-default-framed-br{background-position:right -10px}.x-btn-group-default-framed-ml{background-position:0 top}.x-btn-group-default-framed-mr{background-position:right top}.x-btn-group-default-framed-tc{background-position:0 0}.x-btn-group-default-framed-bc{background-position:0 -2px}.x-btn-group-default-framed-tr,.x-btn-group-default-framed-br,.x-btn-group-default-framed-mr{padding-right:2px}.x-btn-group-default-framed-tl,.x-btn-group-default-framed-bl,.x-btn-group-default-framed-ml{padding-left:2px}.x-btn-group-default-framed-tc{height:2px}.x-btn-group-default-framed-bc{height:2px}.x-btn-group-default-framed-tl,.x-btn-group-default-framed-bl,.x-btn-group-default-framed-tr,.x-btn-group-default-framed-br,.x-btn-group-default-framed-tc,.x-btn-group-default-framed-bc,.x-btn-group-default-framed-ml,.x-btn-group-default-framed-mr{zoom:1;background-image:url(images/btn-group/btn-group-default-framed-corners.gif)}.x-btn-group-default-framed-ml,.x-btn-group-default-framed-mr{zoom:1;background-image:url(images/btn-group/btn-group-default-framed-sides.gif);background-repeat:repeat-y}.x-btn-group-default-framed-mc{padding:0}.x-strict .x-ie7 .x-btn-group-default-framed-tl,.x-strict .x-ie7 .x-btn-group-default-framed-bl{position:relative;right:0}.x-btn-group-default-framed:after{display:none;content:"x-slicer:corners:url(images/btn-group/btn-group-default-framed-corners.gif), sides:url(images/btn-group/btn-group-default-framed-sides.gif)"}.x-btn-group-default-framed-notitle{-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;padding:1px 1px 1px 1px;border-width:1px;border-style:solid;background-color:#d0def0}.x-btn-group-default-framed-notitle-mc{background-color:#d0def0}.x-nbr .x-btn-group-default-framed-notitle{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-group-default-framed-notitle-frameInfo{font-family:dh-2-2-2-2-1-1-1-1-1-1-1-1}.x-btn-group-default-framed-notitle-tl{background-position:0 -4px}.x-btn-group-default-framed-notitle-tr{background-position:right -6px}.x-btn-group-default-framed-notitle-bl{background-position:0 -8px}.x-btn-group-default-framed-notitle-br{background-position:right -10px}.x-btn-group-default-framed-notitle-ml{background-position:0 top}.x-btn-group-default-framed-notitle-mr{background-position:right top}.x-btn-group-default-framed-notitle-tc{background-position:0 0}.x-btn-group-default-framed-notitle-bc{background-position:0 -2px}.x-btn-group-default-framed-notitle-tr,.x-btn-group-default-framed-notitle-br,.x-btn-group-default-framed-notitle-mr{padding-right:2px}.x-btn-group-default-framed-notitle-tl,.x-btn-group-default-framed-notitle-bl,.x-btn-group-default-framed-notitle-ml{padding-left:2px}.x-btn-group-default-framed-notitle-tc{height:2px}.x-btn-group-default-framed-notitle-bc{height:2px}.x-btn-group-default-framed-notitle-tl,.x-btn-group-default-framed-notitle-bl,.x-btn-group-default-framed-notitle-tr,.x-btn-group-default-framed-notitle-br,.x-btn-group-default-framed-notitle-tc,.x-btn-group-default-framed-notitle-bc,.x-btn-group-default-framed-notitle-ml,.x-btn-group-default-framed-notitle-mr{zoom:1;background-image:url(images/btn-group/btn-group-default-framed-notitle-corners.gif)}.x-btn-group-default-framed-notitle-ml,.x-btn-group-default-framed-notitle-mr{zoom:1;background-image:url(images/btn-group/btn-group-default-framed-notitle-sides.gif);background-repeat:repeat-y}.x-btn-group-default-framed-notitle-mc{padding:0}.x-strict .x-ie7 .x-btn-group-default-framed-notitle-tl,.x-strict .x-ie7 .x-btn-group-default-framed-notitle-bl{position:relative;right:0}.x-btn-group-default-framed-notitle:after{display:none;content:"x-slicer:corners:url(images/btn-group/btn-group-default-framed-notitle-corners.gif), sides:url(images/btn-group/btn-group-default-framed-notitle-sides.gif)"}.x-btn-group-default-framed{border-color:#b7c8d7;-webkit-box-shadow:#e3ebf5 0 1px 0 0 inset,#e3ebf5 0 -1px 0 0 inset,#e3ebf5 -1px 0 0 0 inset,#e3ebf5 1px 0 0 0 inset;-moz-box-shadow:#e3ebf5 0 1px 0 0 inset,#e3ebf5 0 -1px 0 0 inset,#e3ebf5 -1px 0 0 0 inset,#e3ebf5 1px 0 0 0 inset;box-shadow:#e3ebf5 0 1px 0 0 inset,#e3ebf5 0 -1px 0 0 inset,#e3ebf5 -1px 0 0 0 inset,#e3ebf5 1px 0 0 0 inset}.x-btn-group-header-default-framed{margin:2px 2px 0 2px;padding:1px 0;line-height:15px;background:#c2d8f0;-moz-border-radius-topleft:2px;-webkit-border-top-left-radius:2px;border-top-left-radius:2px;-moz-border-radius-topright:2px;-webkit-border-top-right-radius:2px;border-top-right-radius:2px}.x-btn-group-header-default-framed .x-tool-img{background-color:#c2d8f0}.x-btn-group-header-text-container-default-framed{font:normal 11px tahoma,arial,verdana,sans-serif;line-height:15px;color:#3e6aaa}.x-btn-group-body-default-framed{padding:0 1px 0 1px}.x-btn-group-body-default-framed .x-table-layout{border-spacing:0}.x-window-ghost{filter:alpha(opacity=65);opacity:.65}.x-window-default{border-color:#a2b1c5;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;-webkit-box-shadow:#ecf2fb 0 1px 0 0 inset,#ecf2fb 0 -1px 0 0 inset,#ecf2fb -1px 0 0 0 inset,#ecf2fb 1px 0 0 0 inset;-moz-box-shadow:#ecf2fb 0 1px 0 0 inset,#ecf2fb 0 -1px 0 0 inset,#ecf2fb -1px 0 0 0 inset,#ecf2fb 1px 0 0 0 inset;box-shadow:#ecf2fb 0 1px 0 0 inset,#ecf2fb 0 -1px 0 0 inset,#ecf2fb -1px 0 0 0 inset,#ecf2fb 1px 0 0 0 inset}.x-window-default{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:4px 4px 4px 4px;border-width:1px;border-style:solid;background-color:#ced9e7}.x-window-default-mc{background-color:#ced9e7}.x-nbr .x-window-default{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-default-frameInfo{font-family:dh-5-5-5-5-1-1-1-1-4-4-4-4}.x-window-default-tl{background-position:0 -10px}.x-window-default-tr{background-position:right -15px}.x-window-default-bl{background-position:0 -20px}.x-window-default-br{background-position:right -25px}.x-window-default-ml{background-position:0 top}.x-window-default-mr{background-position:right top}.x-window-default-tc{background-position:0 0}.x-window-default-bc{background-position:0 -5px}.x-window-default-tr,.x-window-default-br,.x-window-default-mr{padding-right:5px}.x-window-default-tl,.x-window-default-bl,.x-window-default-ml{padding-left:5px}.x-window-default-tc{height:5px}.x-window-default-bc{height:5px}.x-window-default-tl,.x-window-default-bl,.x-window-default-tr,.x-window-default-br,.x-window-default-tc,.x-window-default-bc,.x-window-default-ml,.x-window-default-mr{zoom:1;background-image:url(images/window/window-default-corners.gif)}.x-window-default-ml,.x-window-default-mr{zoom:1;background-image:url(images/window/window-default-sides.gif);background-repeat:repeat-y}.x-window-default-mc{padding:0}.x-strict .x-ie7 .x-window-default-tl,.x-strict .x-ie7 .x-window-default-bl{position:relative;right:0}.x-window-default:after{display:none;content:"x-slicer:corners:url(images/window/window-default-corners.gif), sides:url(images/window/window-default-sides.gif)"}.x-window-body-default{border-color:#99bbe8;border-width:1px;border-style:solid;background:#dfe8f6;color:black}.x-window-header-default{font-size:11px;border-color:#a2b1c5;zoom:1;background-color:#ced9e7}.x-window-header-default .x-tool-img{background-color:#ced9e7}.x-window-header-default-vertical .x-window-header-text-container{-webkit-transform:rotate(90deg);-webkit-transform-origin:0 0;-moz-transform:rotate(90deg);-moz-transform-origin:0 0;-o-transform:rotate(90deg);-o-transform-origin:0 0;transform:rotate(90deg);transform-origin:0 0}.x-ie9m .x-window-header-default-vertical .x-window-header-text-container{background-color:#ced9e7;filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1),progid:DXImageTransform.Microsoft.Chroma(color=#ced9e7)}.x-window-header-text-container-default{color:#04468c;font-weight:bold;line-height:15px;font-family:tahoma,arial,verdana,sans-serif;font-size:11px;padding:0 2px 1px;text-transform:none}.x-window-header-default-top{-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topright:5px;-webkit-border-top-right-radius:5px;border-top-right-radius:5px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:4px 5px 0 5px;border-width:1px 1px 0 1px;border-style:solid;background-color:#ced9e7}.x-window-header-default-top-mc{background-color:#ced9e7}.x-nbr .x-window-header-default-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-top-frameInfo{font-family:dh-5-5-0-0-1-1-0-1-4-5-0-5}.x-window-header-default-top-tl{background-position:0 -10px}.x-window-header-default-top-tr{background-position:right -15px}.x-window-header-default-top-bl{background-position:0 -20px}.x-window-header-default-top-br{background-position:right -25px}.x-window-header-default-top-ml{background-position:0 top}.x-window-header-default-top-mr{background-position:right top}.x-window-header-default-top-tc{background-position:0 0}.x-window-header-default-top-bc{background-position:0 -5px}.x-window-header-default-top-tr,.x-window-header-default-top-br,.x-window-header-default-top-mr{padding-right:5px}.x-window-header-default-top-tl,.x-window-header-default-top-bl,.x-window-header-default-top-ml{padding-left:5px}.x-window-header-default-top-tc{height:5px}.x-window-header-default-top-bc{height:0}.x-window-header-default-top-tl,.x-window-header-default-top-bl,.x-window-header-default-top-tr,.x-window-header-default-top-br,.x-window-header-default-top-tc,.x-window-header-default-top-bc,.x-window-header-default-top-ml,.x-window-header-default-top-mr{zoom:1;background-image:url(images/window-header/window-header-default-top-corners.gif)}.x-window-header-default-top-ml,.x-window-header-default-top-mr{zoom:1;background-image:url(images/window-header/window-header-default-top-sides.gif);background-repeat:repeat-y}.x-window-header-default-top-mc{padding:0 1px 0 1px}.x-strict .x-ie7 .x-window-header-default-top-tl,.x-strict .x-ie7 .x-window-header-default-top-bl{position:relative;right:0}.x-window-header-default-top:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-top-corners.gif), sides:url(images/window-header/window-header-default-top-sides.gif)"}.x-window-header-default-right{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:5px;-webkit-border-top-right-radius:5px;border-top-right-radius:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-right-radius:5px;border-bottom-right-radius:5px;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:5px 4px 5px 0;border-width:1px 1px 1px 0;border-style:solid;background-color:#ced9e7}.x-window-header-default-right-mc{background-color:#ced9e7}.x-nbr .x-window-header-default-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-right-frameInfo{font-family:dh-0-5-5-0-1-1-1-0-5-4-5-0}.x-window-header-default-right-tl{background-position:0 -10px}.x-window-header-default-right-tr{background-position:right -15px}.x-window-header-default-right-bl{background-position:0 -20px}.x-window-header-default-right-br{background-position:right -25px}.x-window-header-default-right-ml{background-position:0 top}.x-window-header-default-right-mr{background-position:right top}.x-window-header-default-right-tc{background-position:0 0}.x-window-header-default-right-bc{background-position:0 -5px}.x-window-header-default-right-tr,.x-window-header-default-right-br,.x-window-header-default-right-mr{padding-right:5px}.x-window-header-default-right-tl,.x-window-header-default-right-bl,.x-window-header-default-right-ml{padding-left:0}.x-window-header-default-right-tc{height:5px}.x-window-header-default-right-bc{height:5px}.x-window-header-default-right-tl,.x-window-header-default-right-bl,.x-window-header-default-right-tr,.x-window-header-default-right-br,.x-window-header-default-right-tc,.x-window-header-default-right-bc,.x-window-header-default-right-ml,.x-window-header-default-right-mr{zoom:1;background-image:url(images/window-header/window-header-default-right-corners.gif)}.x-window-header-default-right-ml,.x-window-header-default-right-mr{zoom:1;background-image:url(images/window-header/window-header-default-right-sides.gif);background-repeat:repeat-y}.x-window-header-default-right-mc{padding:1px 0 1px 0}.x-strict .x-ie7 .x-window-header-default-right-tl,.x-strict .x-ie7 .x-window-header-default-right-bl{position:relative;right:0}.x-window-header-default-right:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-right-corners.gif), sides:url(images/window-header/window-header-default-right-sides.gif)"}.x-window-header-default-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:5px;-webkit-border-bottom-right-radius:5px;border-bottom-right-radius:5px;-moz-border-radius-bottomleft:5px;-webkit-border-bottom-left-radius:5px;border-bottom-left-radius:5px;padding:0 5px 4px 5px;border-width:0 1px 1px 1px;border-style:solid;background-color:#ced9e7}.x-window-header-default-bottom-mc{background-color:#ced9e7}.x-nbr .x-window-header-default-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-bottom-frameInfo{font-family:dh-0-0-5-5-0-1-1-1-0-5-4-5}.x-window-header-default-bottom-tl{background-position:0 -10px}.x-window-header-default-bottom-tr{background-position:right -15px}.x-window-header-default-bottom-bl{background-position:0 -20px}.x-window-header-default-bottom-br{background-position:right -25px}.x-window-header-default-bottom-ml{background-position:0 top}.x-window-header-default-bottom-mr{background-position:right top}.x-window-header-default-bottom-tc{background-position:0 0}.x-window-header-default-bottom-bc{background-position:0 -5px}.x-window-header-default-bottom-tr,.x-window-header-default-bottom-br,.x-window-header-default-bottom-mr{padding-right:5px}.x-window-header-default-bottom-tl,.x-window-header-default-bottom-bl,.x-window-header-default-bottom-ml{padding-left:5px}.x-window-header-default-bottom-tc{height:0}.x-window-header-default-bottom-bc{height:5px}.x-window-header-default-bottom-tl,.x-window-header-default-bottom-bl,.x-window-header-default-bottom-tr,.x-window-header-default-bottom-br,.x-window-header-default-bottom-tc,.x-window-header-default-bottom-bc,.x-window-header-default-bottom-ml,.x-window-header-default-bottom-mr{zoom:1;background-image:url(images/window-header/window-header-default-bottom-corners.gif)}.x-window-header-default-bottom-ml,.x-window-header-default-bottom-mr{zoom:1;background-image:url(images/window-header/window-header-default-bottom-sides.gif);background-repeat:repeat-y}.x-window-header-default-bottom-mc{padding:0 1px 0 1px}.x-strict .x-ie7 .x-window-header-default-bottom-tl,.x-strict .x-ie7 .x-window-header-default-bottom-bl{position:relative;right:0}.x-window-header-default-bottom:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-bottom-corners.gif), sides:url(images/window-header/window-header-default-bottom-sides.gif)"}.x-window-header-default-left{-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:5px;-webkit-border-bottom-left-radius:5px;border-bottom-left-radius:5px;padding:5px 0 5px 4px;border-width:1px 0 1px 1px;border-style:solid;background-color:#ced9e7}.x-window-header-default-left-mc{background-color:#ced9e7}.x-nbr .x-window-header-default-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-left-frameInfo{font-family:dh-5-0-0-5-1-0-1-1-5-0-5-4}.x-window-header-default-left-tl{background-position:0 -10px}.x-window-header-default-left-tr{background-position:right -15px}.x-window-header-default-left-bl{background-position:0 -20px}.x-window-header-default-left-br{background-position:right -25px}.x-window-header-default-left-ml{background-position:0 top}.x-window-header-default-left-mr{background-position:right top}.x-window-header-default-left-tc{background-position:0 0}.x-window-header-default-left-bc{background-position:0 -5px}.x-window-header-default-left-tr,.x-window-header-default-left-br,.x-window-header-default-left-mr{padding-right:0}.x-window-header-default-left-tl,.x-window-header-default-left-bl,.x-window-header-default-left-ml{padding-left:5px}.x-window-header-default-left-tc{height:5px}.x-window-header-default-left-bc{height:5px}.x-window-header-default-left-tl,.x-window-header-default-left-bl,.x-window-header-default-left-tr,.x-window-header-default-left-br,.x-window-header-default-left-tc,.x-window-header-default-left-bc,.x-window-header-default-left-ml,.x-window-header-default-left-mr{zoom:1;background-image:url(images/window-header/window-header-default-left-corners.gif)}.x-window-header-default-left-ml,.x-window-header-default-left-mr{zoom:1;background-image:url(images/window-header/window-header-default-left-sides.gif);background-repeat:repeat-y}.x-window-header-default-left-mc{padding:1px 0 1px 0}.x-strict .x-ie7 .x-window-header-default-left-tl,.x-strict .x-ie7 .x-window-header-default-left-bl{position:relative;right:0}.x-window-header-default-left:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-left-corners.gif), sides:url(images/window-header/window-header-default-left-sides.gif)"}.x-window-header-default-collapsed-top{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-color:#ced9e7}.x-window-header-default-collapsed-top-mc{background-color:#ced9e7}.x-nbr .x-window-header-default-collapsed-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-collapsed-top-frameInfo{font-family:dh-5-5-5-5-1-1-1-1-4-5-4-5}.x-window-header-default-collapsed-top-tl{background-position:0 -10px}.x-window-header-default-collapsed-top-tr{background-position:right -15px}.x-window-header-default-collapsed-top-bl{background-position:0 -20px}.x-window-header-default-collapsed-top-br{background-position:right -25px}.x-window-header-default-collapsed-top-ml{background-position:0 top}.x-window-header-default-collapsed-top-mr{background-position:right top}.x-window-header-default-collapsed-top-tc{background-position:0 0}.x-window-header-default-collapsed-top-bc{background-position:0 -5px}.x-window-header-default-collapsed-top-tr,.x-window-header-default-collapsed-top-br,.x-window-header-default-collapsed-top-mr{padding-right:5px}.x-window-header-default-collapsed-top-tl,.x-window-header-default-collapsed-top-bl,.x-window-header-default-collapsed-top-ml{padding-left:5px}.x-window-header-default-collapsed-top-tc{height:5px}.x-window-header-default-collapsed-top-bc{height:5px}.x-window-header-default-collapsed-top-tl,.x-window-header-default-collapsed-top-bl,.x-window-header-default-collapsed-top-tr,.x-window-header-default-collapsed-top-br,.x-window-header-default-collapsed-top-tc,.x-window-header-default-collapsed-top-bc,.x-window-header-default-collapsed-top-ml,.x-window-header-default-collapsed-top-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-top-corners.gif)}.x-window-header-default-collapsed-top-ml,.x-window-header-default-collapsed-top-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-top-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-top-mc{padding:0 1px 0 1px}.x-strict .x-ie7 .x-window-header-default-collapsed-top-tl,.x-strict .x-ie7 .x-window-header-default-collapsed-top-bl{position:relative;right:0}.x-window-header-default-collapsed-top:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-collapsed-top-corners.gif), sides:url(images/window-header/window-header-default-collapsed-top-sides.gif)"}.x-window-header-default-collapsed-right{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:5px 4px 5px 4px;border-width:1px;border-style:solid;background-color:#ced9e7}.x-window-header-default-collapsed-right-mc{background-color:#ced9e7}.x-nbr .x-window-header-default-collapsed-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-collapsed-right-frameInfo{font-family:dh-5-5-5-5-1-1-1-1-5-4-5-4}.x-window-header-default-collapsed-right-tl{background-position:0 -10px}.x-window-header-default-collapsed-right-tr{background-position:right -15px}.x-window-header-default-collapsed-right-bl{background-position:0 -20px}.x-window-header-default-collapsed-right-br{background-position:right -25px}.x-window-header-default-collapsed-right-ml{background-position:0 top}.x-window-header-default-collapsed-right-mr{background-position:right top}.x-window-header-default-collapsed-right-tc{background-position:0 0}.x-window-header-default-collapsed-right-bc{background-position:0 -5px}.x-window-header-default-collapsed-right-tr,.x-window-header-default-collapsed-right-br,.x-window-header-default-collapsed-right-mr{padding-right:5px}.x-window-header-default-collapsed-right-tl,.x-window-header-default-collapsed-right-bl,.x-window-header-default-collapsed-right-ml{padding-left:5px}.x-window-header-default-collapsed-right-tc{height:5px}.x-window-header-default-collapsed-right-bc{height:5px}.x-window-header-default-collapsed-right-tl,.x-window-header-default-collapsed-right-bl,.x-window-header-default-collapsed-right-tr,.x-window-header-default-collapsed-right-br,.x-window-header-default-collapsed-right-tc,.x-window-header-default-collapsed-right-bc,.x-window-header-default-collapsed-right-ml,.x-window-header-default-collapsed-right-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-right-corners.gif)}.x-window-header-default-collapsed-right-ml,.x-window-header-default-collapsed-right-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-right-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-right-mc{padding:1px 0 1px 0}.x-strict .x-ie7 .x-window-header-default-collapsed-right-tl,.x-strict .x-ie7 .x-window-header-default-collapsed-right-bl{position:relative;right:0}.x-window-header-default-collapsed-right:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-collapsed-right-corners.gif), sides:url(images/window-header/window-header-default-collapsed-right-sides.gif)"}.x-window-header-default-collapsed-bottom{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-color:#ced9e7}.x-window-header-default-collapsed-bottom-mc{background-color:#ced9e7}.x-nbr .x-window-header-default-collapsed-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-collapsed-bottom-frameInfo{font-family:dh-5-5-5-5-1-1-1-1-4-5-4-5}.x-window-header-default-collapsed-bottom-tl{background-position:0 -10px}.x-window-header-default-collapsed-bottom-tr{background-position:right -15px}.x-window-header-default-collapsed-bottom-bl{background-position:0 -20px}.x-window-header-default-collapsed-bottom-br{background-position:right -25px}.x-window-header-default-collapsed-bottom-ml{background-position:0 top}.x-window-header-default-collapsed-bottom-mr{background-position:right top}.x-window-header-default-collapsed-bottom-tc{background-position:0 0}.x-window-header-default-collapsed-bottom-bc{background-position:0 -5px}.x-window-header-default-collapsed-bottom-tr,.x-window-header-default-collapsed-bottom-br,.x-window-header-default-collapsed-bottom-mr{padding-right:5px}.x-window-header-default-collapsed-bottom-tl,.x-window-header-default-collapsed-bottom-bl,.x-window-header-default-collapsed-bottom-ml{padding-left:5px}.x-window-header-default-collapsed-bottom-tc{height:5px}.x-window-header-default-collapsed-bottom-bc{height:5px}.x-window-header-default-collapsed-bottom-tl,.x-window-header-default-collapsed-bottom-bl,.x-window-header-default-collapsed-bottom-tr,.x-window-header-default-collapsed-bottom-br,.x-window-header-default-collapsed-bottom-tc,.x-window-header-default-collapsed-bottom-bc,.x-window-header-default-collapsed-bottom-ml,.x-window-header-default-collapsed-bottom-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-bottom-corners.gif)}.x-window-header-default-collapsed-bottom-ml,.x-window-header-default-collapsed-bottom-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-bottom-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-bottom-mc{padding:0 1px 0 1px}.x-strict .x-ie7 .x-window-header-default-collapsed-bottom-tl,.x-strict .x-ie7 .x-window-header-default-collapsed-bottom-bl{position:relative;right:0}.x-window-header-default-collapsed-bottom:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-collapsed-bottom-corners.gif), sides:url(images/window-header/window-header-default-collapsed-bottom-sides.gif)"}.x-window-header-default-collapsed-left{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:5px 4px 5px 4px;border-width:1px;border-style:solid;background-color:#ced9e7}.x-window-header-default-collapsed-left-mc{background-color:#ced9e7}.x-nbr .x-window-header-default-collapsed-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-collapsed-left-frameInfo{font-family:dh-5-5-5-5-1-1-1-1-5-4-5-4}.x-window-header-default-collapsed-left-tl{background-position:0 -10px}.x-window-header-default-collapsed-left-tr{background-position:right -15px}.x-window-header-default-collapsed-left-bl{background-position:0 -20px}.x-window-header-default-collapsed-left-br{background-position:right -25px}.x-window-header-default-collapsed-left-ml{background-position:0 top}.x-window-header-default-collapsed-left-mr{background-position:right top}.x-window-header-default-collapsed-left-tc{background-position:0 0}.x-window-header-default-collapsed-left-bc{background-position:0 -5px}.x-window-header-default-collapsed-left-tr,.x-window-header-default-collapsed-left-br,.x-window-header-default-collapsed-left-mr{padding-right:5px}.x-window-header-default-collapsed-left-tl,.x-window-header-default-collapsed-left-bl,.x-window-header-default-collapsed-left-ml{padding-left:5px}.x-window-header-default-collapsed-left-tc{height:5px}.x-window-header-default-collapsed-left-bc{height:5px}.x-window-header-default-collapsed-left-tl,.x-window-header-default-collapsed-left-bl,.x-window-header-default-collapsed-left-tr,.x-window-header-default-collapsed-left-br,.x-window-header-default-collapsed-left-tc,.x-window-header-default-collapsed-left-bc,.x-window-header-default-collapsed-left-ml,.x-window-header-default-collapsed-left-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-left-corners.gif)}.x-window-header-default-collapsed-left-ml,.x-window-header-default-collapsed-left-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-left-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-left-mc{padding:1px 0 1px 0}.x-strict .x-ie7 .x-window-header-default-collapsed-left-tl,.x-strict .x-ie7 .x-window-header-default-collapsed-left-bl{position:relative;right:0}.x-window-header-default-collapsed-left:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-collapsed-left-corners.gif), sides:url(images/window-header/window-header-default-collapsed-left-sides.gif)"}.x-window-header-default-top{-webkit-box-shadow:#ecf2fb 0 1px 0 0 inset,#ecf2fb -1px 0 0 0 inset,#ecf2fb 1px 0 0 0 inset;-moz-box-shadow:#ecf2fb 0 1px 0 0 inset,#ecf2fb -1px 0 0 0 inset,#ecf2fb 1px 0 0 0 inset;box-shadow:#ecf2fb 0 1px 0 0 inset,#ecf2fb -1px 0 0 0 inset,#ecf2fb 1px 0 0 0 inset}.x-window-header-default-right{-webkit-box-shadow:#ecf2fb 0 1px 0 0 inset,#ecf2fb 0 -1px 0 0 inset,#ecf2fb -1px 0 0 0 inset;-moz-box-shadow:#ecf2fb 0 1px 0 0 inset,#ecf2fb 0 -1px 0 0 inset,#ecf2fb -1px 0 0 0 inset;box-shadow:#ecf2fb 0 1px 0 0 inset,#ecf2fb 0 -1px 0 0 inset,#ecf2fb -1px 0 0 0 inset}.x-window-header-default-bottom{-webkit-box-shadow:#ecf2fb 0 -1px 0 0 inset,#ecf2fb -1px 0 0 0 inset,#ecf2fb 1px 0 0 0 inset;-moz-box-shadow:#ecf2fb 0 -1px 0 0 inset,#ecf2fb -1px 0 0 0 inset,#ecf2fb 1px 0 0 0 inset;box-shadow:#ecf2fb 0 -1px 0 0 inset,#ecf2fb -1px 0 0 0 inset,#ecf2fb 1px 0 0 0 inset}.x-window-header-default-left{-webkit-box-shadow:#ecf2fb 0 1px 0 0 inset,#ecf2fb 0 -1px 0 0 inset,#ecf2fb 1px 0 0 0 inset;-moz-box-shadow:#ecf2fb 0 1px 0 0 inset,#ecf2fb 0 -1px 0 0 inset,#ecf2fb 1px 0 0 0 inset;box-shadow:#ecf2fb 0 1px 0 0 inset,#ecf2fb 0 -1px 0 0 inset,#ecf2fb 1px 0 0 0 inset}.x-window-header-default .x-window-header-icon{width:16px;height:16px;color:#04468c;font-size:16px;line-height:16px;background-position:center center}.x-window-header-default .x-window-header-glyph{color:#04468c;font-size:16px;line-height:16px;opacity:.5}.x-ie8m .x-window-header-default .x-window-header-glyph{color:#698fb9}.x-window-header-default-horizontal .x-window-header-icon-before-title{margin:0 2px 0 0}.x-window-header-default-horizontal .x-window-header-icon-after-title{margin:0 0 0 2px}.x-window-header-default-vertical .x-window-header-icon-before-title{margin:0 0 2px 0}.x-window-header-default-vertical .x-window-header-icon-after-title{margin:2px 0 0 0}.x-window-header-default-horizontal .x-tool-after-title{margin:0 0 0 2px}.x-window-header-default-horizontal .x-tool-before-title{margin:0 2px 0 0}.x-window-header-default-vertical .x-tool-after-title{margin:2px 0 0 0}.x-window-header-default-vertical .x-tool-before-title{margin:0 0 2px 0}.x-window-default-collapsed .x-window-header{border-width:1px!important}.x-nbr .x-window-default-collapsed .x-window-header{border-width:0!important}.x-form-invalid-under{padding:2px 2px 2px 20px;color:#c0272b;font:normal 11px tahoma,arial,verdana,sans-serif;line-height:16px;background:no-repeat 0 2px;background-image:url(images/form/exclamation.gif)}div.x-lbl-top-err-icon{margin-bottom:3px}.x-form-invalid-icon{width:16px;height:16px;margin:0 1px;background-image:url(images/form/exclamation.gif);background-repeat:no-repeat}.x-form-item-label{color:black;font:normal 12px/14px tahoma,arial,verdana,sans-serif;margin-top:4px}.x-toolbar-item .x-form-item-label{font:normal 11px/13px tahoma,arial,verdana,sans-serif;margin-top:4px}.x-autocontainer-form-item,.x-anchor-form-item,.x-vbox-form-item,.x-table-form-item{margin-bottom:5px}.x-ie6 .x-form-form-item td{border-top-width:0}.x-ie6 td.x-form-item-pad{height:5px}.x-form-field{color:black}.x-form-item,.x-form-field{font:normal 12px tahoma,arial,verdana,sans-serif}.x-form-type-text textarea.x-form-invalid-field,.x-form-type-text input.x-form-invalid-field,.x-form-type-password textarea.x-form-invalid-field,.x-form-type-password input.x-form-invalid-field,.x-form-type-number textarea.x-form-invalid-field,.x-form-type-number input.x-form-invalid-field,.x-form-type-email textarea.x-form-invalid-field,.x-form-type-email input.x-form-invalid-field,.x-form-type-search textarea.x-form-invalid-field,.x-form-type-search input.x-form-invalid-field,.x-form-type-tel textarea.x-form-invalid-field,.x-form-type-tel input.x-form-invalid-field{background-color:white;background-image:url(images/grid/invalid_line.gif);background-repeat:repeat-x;background-position:bottom;border-color:#c30}.x-item-disabled .x-form-item-label,.x-item-disabled .x-form-field,.x-item-disabled .x-form-display-field,.x-item-disabled .x-form-cb-label,.x-item-disabled .x-form-trigger{filter:alpha(opacity=30);opacity:.3}.x-form-text{color:black;padding:1px 3px 2px 3px;background:white repeat-x 0 0;border-width:1px;border-style:solid;border-color:#b5b8c8;background-image:url(images/form/text-bg.gif);height:22px;line-height:17px}.x-field-toolbar .x-form-text{height:20px;line-height:15px}.x-content-box .x-form-text{height:17px}.x-content-box .x-field-toolbar .x-form-text{height:15px}.x-form-focus{border-color:#7eadd9}.x-form-empty-field,textarea.x-form-empty-field{color:gray}.x-quirks .x-ie .x-form-text,.x-ie7m .x-form-text{margin-top:-1px;margin-bottom:-1px}.x-form-textarea{line-height:normal;height:auto;background-image:url(images/form/text-bg.gif)}.x-form-display-field-body{height:22px}.x-toolbar-item .x-form-display-field-body{height:20px}.x-form-display-field{font:normal 12px/14px tahoma,arial,verdana,sans-serif;color:black;margin-top:4px}.x-toolbar-item .x-form-display-field{margin-top:4px;font:normal 11px/13px tahoma,arial,verdana,sans-serif}.x-message-box .x-window-body{background-color:#ced9e7;border-width:0}.x-message-box-info,.x-message-box-warning,.x-message-box-question,.x-message-box-error{background-position:top left;background-repeat:no-repeat}.x-message-box-info{background-image:url(images/shared/icon-info.gif)}.x-message-box-warning{background-image:url(images/shared/icon-warning.gif)}.x-message-box-question{background-image:url(images/shared/icon-question.gif)}.x-message-box-error{background-image:url(images/shared/icon-error.gif)}.x-form-cb-wrap{height:22px}.x-toolbar-item .x-form-cb-wrap{height:20px}.x-form-cb{margin-top:5px}.x-toolbar-item .x-form-cb{margin-top:4px}.x-form-checkbox{width:13px;height:13px;background:url(images/form/checkbox.gif) no-repeat}.x-form-cb-checked .x-form-checkbox{background-position:0 -13px}.x-form-checkbox-focus{background-position:-13px 0}.x-form-cb-checked .x-form-checkbox-focus{background-position:-13px -13px}.x-form-cb-label{margin-top:4px;font:normal 12px/14px tahoma,arial,verdana,sans-serif}.x-toolbar-item .x-form-cb-label{font:normal 11px/13px tahoma,arial,verdana,sans-serif;margin-top:4px}.x-form-cb-label-before{margin-right:4px}.x-form-cb-label-after{margin-left:4px}.x-form-checkboxgroup-body{padding:0 4px}.x-form-invalid .x-form-checkboxgroup-body{border:1px solid #c30;background-image:url(images/grid/invalid_line.gif);background-repeat:repeat-x;background-position:bottom}.x-check-group-alt{background:#d1ddef;border-top:1px dotted #b5b8c8;border-bottom:1px dotted #b5b8c8}.x-form-check-group-label{color:black;padding:2px;margin:0 30px 5px 0;border-width:0 0 1px 0;border-style:solid;border-color:black}.x-fieldset{border:1px solid #b5b8c8;padding:0 10px;margin:0 0 10px}.x-ie8m .x-fieldset,.x-quirks .x-ie .x-fieldset{padding-top:0}.x-ie8m .x-fieldset .x-fieldset-body,.x-quirks .x-ie .x-fieldset .x-fieldset-body{padding-top:0}.x-fieldset-header-checkbox{line-height:14px;margin:1px 3px 0 0}.x-fieldset-header{padding:0 3px 1px}.x-fieldset-header .x-tool{margin-top:1px;padding:0}.x-fieldset-header .x-form-cb-wrap{padding:1px 0}.x-fieldset-header-text{font:11px/14px bold tahoma,arial,verdana,sans-serif;color:#15428b;padding:1px 0}.x-fieldset-header-text-collapsible{cursor:pointer}.x-fieldset-with-title .x-fieldset-header-checkbox,.x-fieldset-with-title .x-tool{margin:1px 3px 0 0}.x-webkit .x-fieldset-header{-webkit-padding-start:3px;-webkit-padding-end:3px}.x-opera .x-fieldset-with-legend{margin-top:-1px}.x-opera.x-mac .x-fieldset-header-text{padding:2px 0 0}.x-strict .x-ie8 .x-fieldset-header{margin-bottom:-1px}.x-strict .x-ie8 .x-fieldset-header .x-tool,.x-strict .x-ie8 .x-fieldset-header .x-fieldset-header-text,.x-strict .x-ie8 .x-fieldset-header .x-fieldset-header-checkbox{position:relative;top:-1px}.x-quirks .x-ie .x-fieldset-header,.x-ie8m .x-fieldset-header{padding-left:1px;padding-right:1px}.x-fieldset-collapsed .x-fieldset-body{display:none}.x-fieldset-collapsed{padding-bottom:0!important;border-width:1px 1px 0 1px!important;border-left-color:transparent!important;border-right-color:transparent!important}.x-ie6 .x-fieldset-collapsed{border-width:1px 0 0 0!important;padding-bottom:0!important;margin-left:1px;margin-right:1px}.x-ie .x-fieldset-bwrap{zoom:1}.x-fieldset .x-tool-toggle{background-position:0 -60px}.x-fieldset .x-tool-over .x-tool-toggle{background-position:-15px -60px}.x-fieldset-collapsed .x-tool-toggle{background-position:0 -75px}.x-fieldset-collapsed .x-tool-over .x-tool-toggle{background-position:-15px -75px}.x-ie .x-fieldset-noborder legend{position:relative;margin-bottom:23px}.x-ie .x-fieldset-noborder legend span{position:absolute;left:16px}.x-fieldset{overflow:hidden}.x-fieldset-bwrap{overflow:hidden;zoom:1}.x-fieldset-body{overflow:hidden}.x-form-radio{width:13px;height:13px;background:url(images/form/radio.gif) no-repeat}.x-form-cb-checked .x-form-radio{background-position:0 -13px}.x-form-radio-focus{background-position:-13px 0}.x-form-cb-checked .x-form-radio-focus{background-position:-13px -13px}.x-form-trigger{background:url(images/form/trigger.gif);width:17px;border-width:0 0 1px;border-color:#b5b8c8;border-style:solid}.x-trigger-cell{background-color:white;width:17px}.x-form-trigger-over{background-position:-17px 0;border-color:#7eadd9}.x-form-trigger-wrap-focus .x-form-trigger{background-position:-51px 0;border-color:#7eadd9}.x-form-trigger-wrap-focus .x-form-trigger-over{background-position:-68px 0}.x-form-trigger-click,.x-form-trigger-wrap-focus .x-form-trigger-click{background-position:-34px 0}.x-form-clear-trigger{background-image:url(images/form/clear-trigger.gif)}.x-form-search-trigger{background-image:url(images/form/search-trigger.gif)}.x-quirks .prefixie6 .x-form-trigger-input-cell{height:22px}.x-quirks .prefixie6 .x-field-toolbar .x-form-trigger-input-cell{height:20px}div.x-form-spinner-up,div.x-form-spinner-down{background-image:url(images/form/spinner.gif);background-color:white;width:17px;height:11px}.x-form-spinner-down{background-position:0 -11px}.x-form-trigger-wrap-focus .x-form-spinner-down{background-position:-51px -11px}.x-form-trigger-wrap .x-form-spinner-down-over{background-position:-17px -11px}.x-form-trigger-wrap-focus .x-form-spinner-down-over{background-position:-68px -11px}.x-form-trigger-wrap .x-form-spinner-down-click{background-position:-34px -11px}.x-toolbar-item div.x-form-spinner-up,.x-toolbar-item div.x-form-spinner-down{background-image:url(images/form/spinner-small.gif);height:10px}.x-toolbar-item .x-form-spinner-down{background-position:0 -10px}.x-toolbar-item .x-form-trigger-wrap-focus .x-form-spinner-down{background-position:-51px -10px}.x-toolbar-item .x-form-trigger-wrap .x-form-spinner-down-over{background-position:-17px -10px}.x-toolbar-item .x-form-trigger-wrap-focus .x-form-spinner-down-over{background-position:-68px -10px}.x-toolbar-item .x-form-trigger-wrap .x-form-spinner-down-click{background-position:-34px -10px}.x-tbar-page-number{width:30px}.x-tbar-page-first{background-image:url(images/grid/page-first.gif)}.x-tbar-page-prev{background-image:url(images/grid/page-prev.gif)}.x-tbar-page-next{background-image:url(images/grid/page-next.gif)}.x-tbar-page-last{background-image:url(images/grid/page-last.gif)}.x-tbar-loading{background-image:url(images/grid/refresh.gif)}.x-item-disabled .x-tbar-page-first{background-image:url(images/grid/page-first-disabled.gif)}.x-item-disabled .x-tbar-page-prev{background-image:url(images/grid/page-prev-disabled.gif)}.x-item-disabled .x-tbar-page-next{background-image:url(images/grid/page-next-disabled.gif)}.x-item-disabled .x-tbar-page-last{background-image:url(images/grid/page-last-disabled.gif)}.x-item-disabled .x-tbar-loading{background-image:url(images/grid/refresh-disabled.gif)}.x-boundlist{border-width:1px;border-style:solid;border-color:#98c0f4;background:white}.x-strict .x-ie7m .x-boundlist-list-ct{position:relative}.x-boundlist-item{padding:0 3px;line-height:20px;cursor:pointer;cursor:hand;position:relative;zoom:1;border-width:1px;border-style:dotted;border-color:white}.x-boundlist-selected{background:#cbdaf0;border-color:#8eabe4}.x-boundlist-item-over{background:#dfe8f6;border-color:#a3bae9}.x-boundlist-floating{border-top-width:0}.x-boundlist-above{border-top-width:1px;border-bottom-width:1px}.x-datepicker{border-width:1px;border-style:solid;border-color:#1b376c;background-color:white;width:177px}.x-datepicker-header{padding:3px 6px;text-align:center;background-image:none;background-color:#23427c;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#264888),color-stop(100%,#1f3a6c));background-image:-webkit-linear-gradient(top,#264888,#1f3a6c);background-image:-moz-linear-gradient(top,#264888,#1f3a6c);background-image:-o-linear-gradient(top,#264888,#1f3a6c);background-image:linear-gradient(top,#264888,#1f3a6c)}.x-datepicker-arrow{width:15px;height:15px;top:6px;cursor:pointer;background-color:#23427c;filter:alpha(opacity=70);opacity:.7}a.x-datepicker-arrow:hover{filter:alpha(opacity=100);opacity:1}.x-datepicker-next{right:6px;background-image:url(images/shared/right-btn.gif)}.x-datepicker-prev{left:6px;background-image:url(images/shared/left-btn.gif)}.x-datepicker-month .x-btn,.x-datepicker-month .x-btn .x-btn-tc,.x-datepicker-month .x-btn .x-btn-tl,.x-datepicker-month .x-btn .x-btn-tr,.x-datepicker-month .x-btn .x-btn-mc,.x-datepicker-month .x-btn .x-btn-ml,.x-datepicker-month .x-btn .x-btn-mr,.x-datepicker-month .x-btn .x-btn-bc,.x-datepicker-month .x-btn .x-btn-bl,.x-datepicker-month .x-btn .x-btn-br{background:transparent;border-width:0!important}.x-datepicker-month .x-btn-inner{color:white}.x-datepicker-month .x-btn-split-right{background-image:url(images/button/s-arrow-light.gif);padding-right:12px}.x-datepicker-column-header{width:25px;color:#233d6d;font:normal 10px tahoma,arial,verdana,sans-serif;text-align:right;border-width:0 0 1px;border-style:solid;border-color:#b2d1f5;background-image:none;background-color:#dfecfb;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#edf4fd),color-stop(100%,#cde1f9));background-image:-webkit-linear-gradient(top,#edf4fd,#cde1f9);background-image:-moz-linear-gradient(top,#edf4fd,#cde1f9);background-image:-o-linear-gradient(top,#edf4fd,#cde1f9);background-image:linear-gradient(top,#edf4fd,#cde1f9)}.x-datepicker-column-header-inner{line-height:19px;padding:0 7px 0 0}.x-datepicker-cell{text-align:right;border-width:1px;border-style:solid;border-color:white}.x-datepicker-date{padding:0 4px 0 0;font:normal 11px tahoma,arial,verdana,sans-serif;color:black;cursor:pointer;line-height:18px}a.x-datepicker-date:hover{color:black;background-color:#ddecfe}.x-datepicker-selected{border-style:solid;border-color:#8db2e3}.x-datepicker-selected .x-datepicker-date{background-color:#dae5f3;font-weight:bold}.x-datepicker-today{border-color:darkred;border-style:solid}.x-datepicker-prevday .x-datepicker-date,.x-datepicker-nextday .x-datepicker-date{color:#aaa}.x-datepicker-disabled a.x-datepicker-date{background-color:#eee;cursor:default;color:#bbb}.x-datepicker-disabled a.x-datepicker-date:hover{background-color:#eee}.x-datepicker-footer,.x-monthpicker-buttons{padding:4px 0;border-width:1px 0 0;border-style:solid;border-color:#b2d1f5;background-image:none;background-color:#dfecfb;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dee8f5),color-stop(49%,#d1dff0),color-stop(51%,#c7d8ed),color-stop(100%,#cbdaee));background-image:-webkit-linear-gradient(top,#dee8f5,#d1dff0 49%,#c7d8ed 51%,#cbdaee);background-image:-moz-linear-gradient(top,#dee8f5,#d1dff0 49%,#c7d8ed 51%,#cbdaee);background-image:-o-linear-gradient(top,#dee8f5,#d1dff0 49%,#c7d8ed 51%,#cbdaee);background-image:linear-gradient(top,#dee8f5,#d1dff0 49%,#c7d8ed 51%,#cbdaee);text-align:center}.x-datepicker-footer .x-btn,.x-monthpicker-buttons .x-btn{margin:0 2px 0 2px}.x-monthpicker{width:177px;border-width:1px;border-style:solid;border-color:#1b376c;background-color:white}.x-monthpicker-months{border-width:0 1px 0 0;border-color:#1b376c;border-style:solid;width:87px}.x-monthpicker-months .x-monthpicker-item{width:43px}.x-monthpicker-years{width:88px}.x-monthpicker-years .x-monthpicker-item{width:44px}.x-monthpicker-item{margin:5px 0 4px;font:normal 11px tahoma,arial,verdana,sans-serif;text-align:center}.x-monthpicker-item-inner{margin:0 5px 0 5px;color:#15428b;border-width:1px;border-style:solid;border-color:white;line-height:16px;cursor:pointer}a.x-monthpicker-item-inner:hover{background-color:#ddecfe}.x-monthpicker-selected{background-color:#dae5f3;border-style:solid;border-color:#8db2e3}.x-monthpicker-yearnav{height:27px}.x-monthpicker-yearnav-button-ct{width:44px}.x-monthpicker-yearnav-button{height:15px;width:15px;cursor:pointer;margin-top:6px;background-color:white}.x-monthpicker-yearnav-next{background-image:url(images/tools/tool-sprites.gif);background-position:0 -120px}.x-monthpicker-yearnav-next-over{background-position:-15px -120px}.x-monthpicker-yearnav-prev{background-image:url(images/tools/tool-sprites.gif);background-position:0 -105px}.x-monthpicker-yearnav-prev-over{background-position:-15px -105px}.x-monthpicker-small .x-monthpicker-item{margin:2px 0 2px}.x-monthpicker-small .x-monthpicker-item-inner{margin:0 5px 0 5px}.x-monthpicker-small .x-monthpicker-yearnav{height:22px}.x-monthpicker-small .x-monthpicker-yearnav-button{margin-top:3px}.x-nlg .x-datepicker-header{background-image:url(images/datepicker/datepicker-header-bg.gif);background-repeat:repeat-x;background-position:top left}.x-nlg .x-datepicker-footer,.x-nlg .x-monthpicker-buttons{background-image:url(images/datepicker/datepicker-footer-bg.gif);background-repeat:repeat-x;background-position:top left}.x-datepicker-header:after{display:none;content:"x-slicer:bg:url(images/datepicker/datepicker-header-bg.gif)"}.x-datepicker-footer:after{display:none;content:"x-slicer:bg:url(images/datepicker/datepicker-footer-bg.gif)"}.x-form-date-trigger{background-image:url(images/form/date-trigger.gif)}.x-form-file-wrap .x-form-text{color:gray}.x-color-picker{width:144px;height:90px;background-color:white;border-color:white;border-width:0;border-style:solid}.x-color-picker-item{width:18px;height:18px;border-width:1px;border-color:white;border-style:solid;background-color:white;cursor:pointer;padding:2px}.x-content-box .x-color-picker-item{width:12px;height:12px}a.x-color-picker-item:hover{border-color:#8bb8f3;background-color:#deecfd}.x-color-picker-selected{border-color:#8bb8f3;background-color:#deecfd}.x-color-picker-item-inner{line-height:10px;border-color:#aca899;border-width:1px;border-style:solid}.x-html-editor-tb .x-btn-text{background:transparent no-repeat;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-bold,.x-menu-item div.x-edit-bold{background-position:0 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-italic,.x-menu-item div.x-edit-italic{background-position:-16px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-underline,.x-menu-item div.x-edit-underline{background-position:-32px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-forecolor,.x-menu-item div.x-edit-forecolor{background-position:-160px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-backcolor,.x-menu-item div.x-edit-backcolor{background-position:-176px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-justifyleft,.x-menu-item div.x-edit-justifyleft{background-position:-112px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-justifycenter,.x-menu-item div.x-edit-justifycenter{background-position:-128px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-justifyright,.x-menu-item div.x-edit-justifyright{background-position:-144px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-insertorderedlist,.x-menu-item div.x-edit-insertorderedlist{background-position:-80px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-insertunorderedlist,.x-menu-item div.x-edit-insertunorderedlist{background-position:-96px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-increasefontsize,.x-menu-item div.x-edit-increasefontsize{background-position:-48px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-decreasefontsize,.x-menu-item div.x-edit-decreasefontsize{background-position:-64px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-sourceedit,.x-menu-item div.x-edit-sourceedit{background-position:-192px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-createlink,.x-menu-item div.x-edit-createlink{background-position:-208px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tip .x-tip-bd .x-tip-bd-inner{padding:5px;padding-bottom:1px}.x-html-editor-tb .x-font-select{font-size:11px;font-family:inherit}.x-html-editor-wrap textarea{font:normal 12px tahoma,arial,verdana,sans-serif;background-color:white;resize:none}.x-grid-body{background:white;border-width:1px;border-style:solid;border-color:#99bce8}.x-grid-empty{padding:10px;color:gray;background-color:white;font:normal 11px tahoma,arial,verdana,sans-serif}.x-grid-cell{color:null;font:normal 11px/13px tahoma,arial,verdana,sans-serif;background-color:white;border-color:#ededed #d0d0d0 #ededed #d0d0d0;border-style:solid}.x-grid-row-alt .x-grid-td{background-color:#fafafa}.x-grid-row-before-over .x-grid-td{border-bottom-style:solid;border-bottom-color:#ddd}.x-grid-row-over .x-grid-td{border-bottom-style:solid;border-bottom-color:#ddd}.x-grid-row-before-selected .x-grid-td{border-bottom-style:dotted;border-bottom-color:#a3bae9}.x-grid-row-selected .x-grid-td{border-bottom-style:dotted;border-bottom-color:#a3bae9}.x-grid-row-before-focused .x-grid-td{border-bottom-style:dotted;border-bottom-color:#464646;border-bottom-width:1px}.x-grid-row-focused .x-grid-td{background-color:#efefef}.x-grid-row-over .x-grid-td{background-color:#efefef}.x-grid-row-selected .x-grid-td{background-color:#dfe8f6}.x-grid-row-focused .x-grid-td{border-bottom-style:dotted;border-bottom-color:#464646;border-bottom-width:1px}.x-grid-table .x-grid-row-focused-first .x-grid-td{border-top:1px dotted #464646}.x-grid-row-selected .x-grid-row-summary .x-grid-td{border-bottom-color:#dfe8f6;border-top-width:0}.x-grid-row-focused .x-grid-row-summary .x-grid-td{border-bottom-color:#efefef;border-top-width:0}.x-grid-with-row-lines .x-grid-td{border-bottom-width:1px}.x-grid-with-row-lines .x-grid-table{border-top:1px solid white}.x-grid-with-row-lines .x-grid-table-over-first{border-top-style:solid;border-top-color:#ddd}.x-grid-with-row-lines .x-grid-table-selected-first{border-top-style:dotted;border-top-color:#a3bae9}.x-grid-body .x-grid-table-focused-first{border-top:1px dotted #464646}.x-grid-cell-inner{text-overflow:ellipsis;padding:3px 6px 4px 6px}.x-grid-no-row-lines .x-grid-row-focused .x-grid-cell-inner{padding-top:2px;padding-bottom:3px}.x-grid-cell-special{border-color:#ededed #d0d0d0 #ededed #d0d0d0;border-style:solid;border-right-width:1px;background-image:none;background-color:#f6f6f6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f6f6f6),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#f6f6f6,#e9e9e9);background-image:-moz-linear-gradient(top,#f6f6f6,#e9e9e9);background-image:-o-linear-gradient(top,#f6f6f6,#e9e9e9);background-image:linear-gradient(top,#f6f6f6,#e9e9e9)}.x-grid-row-selected .x-grid-cell-special{border-right-color:#ededed #aaccf6;background-image:none;background-color:#dfe8f6;background-image:-webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,#dfe8f6),color-stop(100%,#cbdaf0));background-image:-webkit-linear-gradient(left,#dfe8f6,#cbdaf0);background-image:-moz-linear-gradient(left,#dfe8f6,#cbdaf0);background-image:-o-linear-gradient(left,#dfe8f6,#cbdaf0);background-image:linear-gradient(left,#dfe8f6,#cbdaf0)}.x-nlg .x-grid-cell-special{background-repeat:repeat-y;background-image:url(images/grid/cell-special-bg.gif)}.x-nlg .x-grid-row-selected .x-grid-cell-special{background-image:url(images/grid/cell-special-selected-bg.gif)}.x-grid-cell-special .x-grid-cell-special:after{display:none;content:"x-slicer:bg:url(images/grid/cell-special-bg.gif)"}.x-grid-cell-special .x-grid-cell-special-selected:after{display:none;content:"x-slicer:bg:url(images/grid/cell-special-selected-bg.gif)"}.x-grid-dirty-cell{background:url(images/grid/dirty.gif) no-repeat 0 0}.x-grid-row .x-grid-cell-selected{color:null;background-color:#b8cfee}.x-grid-with-col-lines .x-grid-cell{border-right-width:1px}.x-grid-resize-marker{width:1px;background-color:#0f0f0f}.x-grid-drop-indicator{position:absolute;height:1px;line-height:0;background-color:#77bc71;overflow:visible;pointer-events:none}.x-grid-drop-indicator .x-grid-drop-indicator-left{position:absolute;top:-8px;left:-12px;background-image:url(images/grid/dd-insert-arrow-right.png);height:16px;width:16px}.x-grid-drop-indicator .x-grid-drop-indicator-right{position:absolute;top:-8px;right:-11px;background-image:url(images/grid/dd-insert-arrow-left.png);height:16px;width:16px}.x-ie6 .x-grid-drop-indicator-left{background-image:url(images/grid/dd-insert-arrow-right.gif)}.x-ie6 .x-grid-drop-indicator-right{background-image:url(images/grid/dd-insert-arrow-left.gif)}.col-move-top,.col-move-bottom{width:9px;height:9px}.col-move-top{background-image:url(images/grid/col-move-top.gif)}.col-move-bottom{background-image:url(images/grid/col-move-bottom.gif)}.x-grid-header-ct{border:1px solid #99bce8;border-bottom-color:#c5c5c5;background-color:#c5c5c5;background-image:none;background-color:#c5c5c5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f9f9f9),color-stop(100%,#e3e4e6));background-image:-webkit-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:-moz-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:-o-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:linear-gradient(top,#f9f9f9,#e3e4e6)}.x-accordion-item .x-grid-header-ct{border-width:0 0 1px!important}.x-accordion-item .x-grid-header-ct-hidden{border:0!important}.x-grid-body{border-top-color:#c5c5c5}.x-hmenu-sort-asc .x-menu-item-icon{background-image:url(images/grid/hmenu-asc.gif)}.x-hmenu-sort-desc .x-menu-item-icon{background-image:url(images/grid/hmenu-desc.gif)}.x-cols-icon .x-menu-item-icon{background-image:url(images/grid/columns.gif)}.x-column-header{border-right:1px solid #c5c5c5;color:black;font:normal 11px/13px tahoma,arial,verdana,sans-serif;background-image:none;background-color:#c5c5c5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f9f9f9),color-stop(100%,#e3e4e6));background-image:-webkit-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:-moz-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:-o-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:linear-gradient(top,#f9f9f9,#e3e4e6)}.x-group-sub-header{background:transparent;border-top:1px solid #c5c5c5}.x-group-sub-header .x-column-header-inner{padding:3px 6px 5px 6px}.x-column-header-inner{padding:4px 6px 5px 6px;text-overflow:ellipsis}.x-column-header-over,.x-column-header-sort-ASC,.x-column-header-sort-DESC{background-image:none;background-color:#aaccf6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#ebf3fd),color-stop(39%,#ebf3fd),color-stop(40%,#d9e8fb),color-stop(100%,#d9e8fb));background-image:-webkit-linear-gradient(top,#ebf3fd,#ebf3fd 39%,#d9e8fb 40%,#d9e8fb);background-image:-moz-linear-gradient(top,#ebf3fd,#ebf3fd 39%,#d9e8fb 40%,#d9e8fb);background-image:-o-linear-gradient(top,#ebf3fd,#ebf3fd 39%,#d9e8fb 40%,#d9e8fb);background-image:linear-gradient(top,#ebf3fd,#ebf3fd 39%,#d9e8fb 40%,#d9e8fb)}.x-nlg .x-grid-header-ct,.x-nlg .x-column-header{background-image:url(images/grid/column-header-bg.gif)}.x-nlg .x-column-header-over,.x-nlg .x-column-header-sort-ASC,.x-nlg .x-column-header-sort-DESC{background-image:url(images/grid/column-header-over-bg.gif)}.x-column-header-open{background-color:transparent}.x-column-header-open .x-column-header-trigger{background-color:transparent}.x-column-header-trigger{width:14px;cursor:pointer;background-color:transparent;background-position:0 center}.x-column-header-align-right .x-column-header-text{margin-right:9px}.x-column-header-sort-ASC .x-column-header-text,.x-column-header-sort-DESC .x-column-header-text{padding-right:12px;background-position:right center}.x-column-header-sort-ASC .x-column-header-text{background-image:url(images/grid/sort_asc.gif)}.x-column-header-sort-DESC .x-column-header-text{background-image:url(images/grid/sort_desc.gif)}.x-column-header:after{display:none;content:"x-slicer:bg:url(images/grid/column-header-bg.gif), stretch:bottom"}.x-column-header-over:after{display:none;content:"x-slicer:bg:url(images/grid/column-header-over-bg.gif), stretch:bottom"}.x-grid-cell-inner-action-col{padding:2px 2px 2px 2px}.x-grid-no-row-lines .x-grid-row-focused .x-grid-cell-inner-action-col{padding-top:1px;padding-bottom:1px}.x-action-col-cell .x-item-disabled{filter:alpha(opacity=30);opacity:.3}.x-action-col-icon{height:16px;width:16px;cursor:pointer}.x-grid-cell-inner-checkcolumn{padding:4px 6px 3px 6px}.x-grid-no-row-lines .x-grid-row-focused .x-grid-cell-inner-checkcolumn{padding-top:3px;padding-bottom:2px}.x-grid-checkcolumn{width:13px;height:13px;background:url(images/form/checkbox.gif) 0 0 no-repeat}.x-item-disabled .x-grid-checkcolumn{filter:alpha(opacity=30);opacity:.3}.x-grid-checkcolumn-checked{background-position:0 -13px}.x-grid-cell-inner-row-numberer{padding:3px 5px 4px 3px}.x-grid-group-hd{border-width:0 0 2px 0;border-style:solid;border-color:#99bbe8;padding:10px 4px 4px 4px;background:white;cursor:pointer}.x-grid-group-hd-not-collapsible{cursor:default}.x-grid-group-hd-collapsible .x-grid-group-title{background-repeat:no-repeat;background-position:left center;background-image:url(images/grid/group-collapse.gif);padding:0 0 0 14px}.x-grid-group-title{color:#3764a0;font:bold 11px/13px tahoma,arial,verdana,sans-serif}.x-grid-group-hd-collapsed .x-grid-group-title{background-image:url(images/grid/group-expand.gif)}.x-grid-group-collapsed .x-grid-group-title{background-image:url(images/grid/group-expand.gif)}.x-group-by-icon{background-image:url(images/grid/group-by.gif)}.x-show-groups-icon{background-image:url(images/grid/group-by.gif)}.x-grid-rowbody{font:normal 11px/13px tahoma,arial,verdana,sans-serif;padding:5px 6px 5px 6px}.x-grid-no-row-lines .x-grid-row-focused .x-grid-rowbody{padding-top:6px;padding-bottom:4px}.x-grid-rowwrap{border-color:#ededed #d0d0d0 #ededed #d0d0d0;border-style:solid}.x-summary-bottom{border-bottom-color:#c5c5c5}.x-docked-summary{border-width:1px;border-color:#99bce8;border-style:solid}.x-docked-summary .x-grid-table{width:100%}.x-grid-row-summary .x-grid-cell,.x-grid-row-summary .x-grid-rowwrap,.x-grid-row-summary .x-grid-cell-rowbody{border-color:#ededed #d0d0d0 #ededed #d0d0d0;background-color:transparent!important;border-top-width:0;font:normal 11px/13px tahoma,arial,verdana,sans-serif}.x-grid-with-row-lines .x-grid-table-summary{border:0}.x-grid-locked .x-grid-inner-locked{border-width:0 1px 0 0;border-style:solid}.x-grid-inner-locked .x-column-header-last,.x-grid-inner-locked .x-grid-cell-last{border-right-width:0!important}.x-hmenu-lock .x-menu-item-icon{background-image:url(images/grid/hmenu-lock.gif)}.x-hmenu-unlock .x-menu-item-icon{background-image:url(images/grid/hmenu-unlock.gif)}.x-grid-editor .x-form-text{font:normal 11px/15px tahoma,arial,verdana,sans-serif;padding:1px 5px 2px 5px;height:20px}.x-content-box .x-grid-editor .x-form-text{height:15px}.x-gecko .x-grid-editor .x-form-text{padding-left:4px;padding-right:4px}.x-grid-editor .x-form-trigger{height:20px}.x-grid-editor .x-form-spinner-up,.x-grid-editor .x-form-spinner-down{height:10px}.x-grid-editor .x-form-cb{margin-top:4px}.x-grid-editor .x-form-cb-wrap{height:20px}.x-grid-editor .x-form-display-field-body{height:20px}.x-grid-editor .x-form-display-field{font:normal 11px/15px tahoma,arial,verdana,sans-serif;padding:2px 6px 3px 6px;text-overflow:ellipsis}.x-grid-editor .x-form-action-col-field{padding:2px 2px 2px 2px}.x-tree-cell-editor .x-form-text{padding-left:2px;padding-right:2px}.x-gecko .x-tree-cell-editor .x-form-text{padding-left:1px;padding-right:1px}.x-grid-row-editor .x-field{margin:0 1px 0 1px}.x-grid-row-editor .x-form-display-field{padding:2px 5px 3px 5px}.x-grid-row-editor .x-form-action-col-field{padding:2px 1px 2px 1px}.x-grid-row-editor .x-form-text{padding:1px 4px 2px 4px}.x-gecko .x-grid-row-editor .x-form-text{padding-left:3px;padding-right:3px}.x-grid-row-editor .x-panel-body{border-top:1px solid #99bce8!important;border-bottom:1px solid #99bce8!important;padding:4px 0 4px 0;background-color:#eaf1fb}.x-grid-with-col-lines .x-grid-row-editor .x-form-cb{margin-right:1px}.x-grid-row-editor-buttons-default-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:5px;-webkit-border-bottom-right-radius:5px;border-bottom-right-radius:5px;-moz-border-radius-bottomleft:5px;-webkit-border-bottom-left-radius:5px;border-bottom-left-radius:5px;padding:4px 4px 4px 4px;border-width:0 1px 1px 1px;border-style:solid;background-color:#eaf1fb}.x-grid-row-editor-buttons-default-bottom-mc{background-color:#eaf1fb}.x-nbr .x-grid-row-editor-buttons-default-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-grid-row-editor-buttons-default-bottom-frameInfo{font-family:th-0-0-5-5-0-1-1-1-4-4-4-4}.x-grid-row-editor-buttons-default-bottom-tl{background-position:0 -10px}.x-grid-row-editor-buttons-default-bottom-tr{background-position:right -15px}.x-grid-row-editor-buttons-default-bottom-bl{background-position:0 -20px}.x-grid-row-editor-buttons-default-bottom-br{background-position:right -25px}.x-grid-row-editor-buttons-default-bottom-ml{background-position:0 top}.x-grid-row-editor-buttons-default-bottom-mr{background-position:right top}.x-grid-row-editor-buttons-default-bottom-tc{background-position:0 0}.x-grid-row-editor-buttons-default-bottom-bc{background-position:0 -5px}.x-grid-row-editor-buttons-default-bottom-tr,.x-grid-row-editor-buttons-default-bottom-br,.x-grid-row-editor-buttons-default-bottom-mr{padding-right:5px}.x-grid-row-editor-buttons-default-bottom-tl,.x-grid-row-editor-buttons-default-bottom-bl,.x-grid-row-editor-buttons-default-bottom-ml{padding-left:5px}.x-grid-row-editor-buttons-default-bottom-tc{height:0}.x-grid-row-editor-buttons-default-bottom-bc{height:5px}.x-grid-row-editor-buttons-default-bottom-tl,.x-grid-row-editor-buttons-default-bottom-bl,.x-grid-row-editor-buttons-default-bottom-tr,.x-grid-row-editor-buttons-default-bottom-br,.x-grid-row-editor-buttons-default-bottom-tc,.x-grid-row-editor-buttons-default-bottom-bc,.x-grid-row-editor-buttons-default-bottom-ml,.x-grid-row-editor-buttons-default-bottom-mr{zoom:1;background-image:url(images/grid-row-editor-buttons/grid-row-editor-buttons-default-bottom-corners.gif)}.x-grid-row-editor-buttons-default-bottom-ml,.x-grid-row-editor-buttons-default-bottom-mr{zoom:1;background-image:url(images/grid-row-editor-buttons/grid-row-editor-buttons-default-bottom-sides.gif);background-repeat:repeat-y}.x-grid-row-editor-buttons-default-bottom-mc{padding:4px 0 0 0}.x-strict .x-ie7 .x-grid-row-editor-buttons-default-bottom-tl,.x-strict .x-ie7 .x-grid-row-editor-buttons-default-bottom-bl{position:relative;right:0}.x-grid-row-editor-buttons-default-bottom:after{display:none;content:"x-slicer:corners:url(images/grid-row-editor-buttons/grid-row-editor-buttons-default-bottom-corners.gif), sides:url(images/grid-row-editor-buttons/grid-row-editor-buttons-default-bottom-sides.gif)"}.x-grid-row-editor-buttons-default-top{-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topright:5px;-webkit-border-top-right-radius:5px;border-top-right-radius:5px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:4px 4px 4px 4px;border-width:1px 1px 0 1px;border-style:solid;background-color:#eaf1fb}.x-grid-row-editor-buttons-default-top-mc{background-color:#eaf1fb}.x-nbr .x-grid-row-editor-buttons-default-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-grid-row-editor-buttons-default-top-frameInfo{font-family:th-5-5-0-0-1-1-0-1-4-4-4-4}.x-grid-row-editor-buttons-default-top-tl{background-position:0 -10px}.x-grid-row-editor-buttons-default-top-tr{background-position:right -15px}.x-grid-row-editor-buttons-default-top-bl{background-position:0 -20px}.x-grid-row-editor-buttons-default-top-br{background-position:right -25px}.x-grid-row-editor-buttons-default-top-ml{background-position:0 top}.x-grid-row-editor-buttons-default-top-mr{background-position:right top}.x-grid-row-editor-buttons-default-top-tc{background-position:0 0}.x-grid-row-editor-buttons-default-top-bc{background-position:0 -5px}.x-grid-row-editor-buttons-default-top-tr,.x-grid-row-editor-buttons-default-top-br,.x-grid-row-editor-buttons-default-top-mr{padding-right:5px}.x-grid-row-editor-buttons-default-top-tl,.x-grid-row-editor-buttons-default-top-bl,.x-grid-row-editor-buttons-default-top-ml{padding-left:5px}.x-grid-row-editor-buttons-default-top-tc{height:5px}.x-grid-row-editor-buttons-default-top-bc{height:0}.x-grid-row-editor-buttons-default-top-tl,.x-grid-row-editor-buttons-default-top-bl,.x-grid-row-editor-buttons-default-top-tr,.x-grid-row-editor-buttons-default-top-br,.x-grid-row-editor-buttons-default-top-tc,.x-grid-row-editor-buttons-default-top-bc,.x-grid-row-editor-buttons-default-top-ml,.x-grid-row-editor-buttons-default-top-mr{zoom:1;background-image:url(images/grid-row-editor-buttons/grid-row-editor-buttons-default-top-corners.gif)}.x-grid-row-editor-buttons-default-top-ml,.x-grid-row-editor-buttons-default-top-mr{zoom:1;background-image:url(images/grid-row-editor-buttons/grid-row-editor-buttons-default-top-sides.gif);background-repeat:repeat-y}.x-grid-row-editor-buttons-default-top-mc{padding:0 0 4px 0}.x-strict .x-ie7 .x-grid-row-editor-buttons-default-top-tl,.x-strict .x-ie7 .x-grid-row-editor-buttons-default-top-bl{position:relative;right:0}.x-grid-row-editor-buttons-default-top:after{display:none;content:"x-slicer:corners:url(images/grid-row-editor-buttons/grid-row-editor-buttons-default-top-corners.gif), sides:url(images/grid-row-editor-buttons/grid-row-editor-buttons-default-top-sides.gif)"}.x-grid-row-editor-buttons-default-bottom{top:29px}.x-grid-row-editor-buttons-default-top{bottom:29px}.x-grid-row-editor-buttons{border-color:#99bce8}.x-row-editor-update-button{margin-right:2px}.x-row-editor-cancel-button{margin-left:2px}.x-grid-row-editor-errors .x-tip-body{padding:5px}.x-grid-row-editor-errors-item{list-style:disc;margin-left:15px}.x-grid-cell-inner-row-expander{padding:6px 7px 5px 7px}.x-grid-no-row-lines .x-grid-row-focused .x-grid-cell-inner-row-expander{padding-top:5px;padding-bottom:4px}.x-grid-row-expander{width:9px;height:9px;cursor:pointer;background-image:url(images/grid/group-collapse.gif)}.x-grid-row-collapsed .x-grid-row-expander{background-image:url(images/grid/group-expand.gif)}.x-grid-cell-inner-property-name{background-image:url(images/grid/property-cell-bg.gif);background-repeat:no-repeat;background-position:-16px 2px;padding-left:12px}.x-accordion-layout-ct{background-color:white;padding:0}.x-accordion-hd .x-panel-header-text-container{color:black;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;text-transform:none}.x-accordion-item{margin:0}.x-accordion-item .x-accordion-hd{background:#d9e7f8;border-top-color:#f3f7fb;padding:4px 5px 5px 5px}.x-accordion-item .x-accordion-hd-sibling-expanded{border-top-color:#99bce8}.x-accordion-item .x-accordion-hd-last-collapsed{border-bottom-color:#d9e7f8}.x-accordion-item .x-accordion-body{border-width:0}.x-accordion-hd .x-tool-collapse-top,.x-accordion-hd .x-tool-collapse-bottom{background-position:0 -255px}.x-accordion-hd .x-tool-expand-top,.x-accordion-hd .x-tool-expand-bottom{background-position:0 -240px}.x-accordion-hd .x-tool-over .x-tool-collapse-top,.x-accordion-hd .x-tool-over .x-tool-collapse-bottom{background-position:-15px -255px}.x-accordion-hd .x-tool-over .x-tool-expand-top,.x-accordion-hd .x-tool-over .x-tool-expand-bottom{background-position:-15px -240px}.x-accordion-hd .x-tool-img{background-color:#d9e7f8}.x-collapse-el{cursor:pointer}.x-layout-split-left,.x-layout-split-right{top:50%;margin-top:-18px;width:5px;height:35px}.x-layout-split-top,.x-layout-split-bottom{left:50%;width:35px;height:5px;margin-left:-18px}.x-layout-split-left{background-image:url(images/util/splitter/mini-left.gif)}.x-layout-split-right{background-image:url(images/util/splitter/mini-right.gif)}.x-layout-split-top{background-image:url(images/util/splitter/mini-top.gif)}.x-layout-split-bottom{background-image:url(images/util/splitter/mini-bottom.gif)}.x-splitter-collapsed .x-layout-split-left{background-image:url(images/util/splitter/mini-right.gif)}.x-splitter-collapsed .x-layout-split-right{background-image:url(images/util/splitter/mini-left.gif)}.x-splitter-collapsed .x-layout-split-top{background-image:url(images/util/splitter/mini-bottom.gif)}.x-splitter-collapsed .x-layout-split-bottom{background-image:url(images/util/splitter/mini-top.gif)}.x-splitter-active{background-color:#b4b4b4;filter:alpha(opacity=80);opacity:.8}.x-splitter-active .x-collapse-el{filter:alpha(opacity=30);opacity:.3}.x-border-layout-ct{background-color:#dfe8f6}.x-menu-body{background:#f0f0f0;padding:2px}.x-menu-icon-separator{left:24px;border-left:solid 1px #e0e0e0;background-color:white;width:2px}.x-menu-item{padding:1px;cursor:pointer}.x-menu-item-indent{margin-left:30px}.x-menu-item-active{background-image:none;background-color:#d9e8fb;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#e7f0fc),color-stop(100%,#c7ddf9));background-image:-webkit-linear-gradient(top,#e7f0fc,#c7ddf9);background-image:-moz-linear-gradient(top,#e7f0fc,#c7ddf9);background-image:-o-linear-gradient(top,#e7f0fc,#c7ddf9);background-image:linear-gradient(top,#e7f0fc,#c7ddf9);border-color:#a9cbf5;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;border-width:1px;border-style:solid;padding:0}.x-nlg .x-menu-item-active{background:#d9e8fb repeat-x left top;background-image:url(images/menu/menu-item-active-bg.gif)}.x-menu-item-link{line-height:22px;padding:0 0 0 30px;display:inline-block}.x-right-check-item-text{padding-right:22px}.x-menu-item-icon{width:16px;height:16px;top:4px;left:3px;background-position:center center}.x-menu-item-glyph{font-size:16px;line-height:16px;color:#222;opacity:.5}.x-ie8m .x-menu-item-glyph{color:#898989}.x-gecko .x-menu-item-active .x-menu-item-icon,.x-quirks .x-menu-item-active .x-menu-item-icon,.x-ie9m .x-menu-item-active .x-menu-item-icon{top:3px;left:2px}.x-menu-item-icon-right{width:16px;height:16px;top:3px;right:3px;background-position:center center}.x-menu-item-text{font-size:11px;color:#222;cursor:pointer;margin-right:16px}.x-menu-item-checked .x-menu-item-icon,.x-menu-item-checked .x-menu-item-icon-right{background-image:url(images/menu/checked.gif)}.x-menu-item-checked .x-menu-group-icon{background-image:url(images/menu/group-checked.gif)}.x-menu-item-unchecked .x-menu-item-icon,.x-menu-item-unchecked .x-menu-item-icon-right{background-image:url(images/menu/unchecked.gif)}.x-menu-item-unchecked .x-menu-group-icon{background-image:none}.x-menu-item-separator{height:2px;border-top:solid 1px #e0e0e0;background-color:white;margin:2px 0;padding:0}.x-menu-item-arrow{width:12px;height:9px;top:7px;right:0;background-image:url(images/menu/menu-parent.gif)}.x-gecko .x-menu-item-active .x-menu-item-arrow,.x-quirks .x-menu-item-active .x-menu-item-arrow,.x-ie9m .x-menu-item-active .x-menu-item-arrow{top:6px;right:-1px}.x-menu-item-disabled{filter:alpha(opacity=50);opacity:.5}.x-content-box .x-menu-icon-separator{width:1px}.x-content-box .x-menu-item-separator{height:1px}.x-ie .x-menu-item-disabled .x-menu-item-icon{filter:alpha(opacity=50);opacity:.5}.x-ie .x-menu-item-disabled .x-menu-item-text{background-color:transparent}.x-menu-date-item{border-color:#99bbe8}.x-menu-item .x-form-item-label{font-size:11px;color:#222}.x-menu-scroll-top{height:8px;background-image:url(images/menu/scroll-top.gif)}.x-menu-scroll-bottom{height:8px;background-image:url(images/menu/scroll-bottom.gif)}.x-menu-scroll-top,.x-menu-scroll-bottom{background-color:#f0f0f0}.x-menu-item-link:after{display:none;content:"x-slicer:bg:url(images/menu/menu-item-active-bg.gif)"}.x-tool{cursor:pointer}.x-tool-img{overflow:hidden;width:15px;height:15px;background-image:url(images/tools/tool-sprites.gif);margin:0}.x-tool-placeholder{visibility:hidden}.x-tool-close{background-position:0 0}.x-tool-minimize{background-position:0 -15px}.x-tool-maximize{background-position:0 -30px}.x-tool-restore{background-position:0 -45px}.x-tool-toggle{background-position:0 -60px}.x-panel-collapsed .x-tool-toggle{background-position:0 -75px}.x-tool-gear{background-position:0 -90px}.x-tool-prev{background-position:0 -105px}.x-tool-next{background-position:0 -120px}.x-tool-pin{background-position:0 -135px}.x-tool-unpin{background-position:0 -150px}.x-tool-right{background-position:0 -165px}.x-tool-left{background-position:0 -180px}.x-tool-down{background-position:0 -195px}.x-tool-up{background-position:0 -210px}.x-tool-refresh{background-position:0 -225px}.x-tool-plus{background-position:0 -240px}.x-tool-minus{background-position:0 -255px}.x-tool-search{background-position:0 -270px}.x-tool-save{background-position:0 -285px}.x-tool-help{background-position:0 -300px}.x-tool-print{background-position:0 -315px}.x-tool-expand{background-position:0 -330px}.x-tool-collapse{background-position:0 -345px}.x-tool-resize{background-position:0 -360px}.x-tool-move{background-position:0 -375px}.x-tool-expand-bottom,.x-tool-collapse-bottom{background-position:0 -195px}.x-tool-expand-top,.x-tool-collapse-top{background-position:0 -210px}.x-tool-expand-left,.x-tool-collapse-left{background-position:0 -180px}.x-tool-expand-right,.x-tool-collapse-right{background-position:0 -165px}.x-tool-over .x-tool-close{background-position:-15px 0}.x-tool-over .x-tool-minimize{background-position:-15px -15px}.x-tool-over .x-tool-maximize{background-position:-15px -30px}.x-tool-over .x-tool-restore{background-position:-15px -45px}.x-tool-over .x-tool-toggle{background-position:-15px -60px}.x-panel-collapsed .x-tool-over .x-tool-toggle{background-position:-15px -75px}.x-tool-over .x-tool-gear{background-position:-15px -90px}.x-tool-over .x-tool-prev{background-position:-15px -105px}.x-tool-over .x-tool-next{background-position:-15px -120px}.x-tool-over .x-tool-pin{background-position:-15px -135px}.x-tool-over .x-tool-unpin{background-position:-15px -150px}.x-tool-over .x-tool-right{background-position:-15px -165px}.x-tool-over .x-tool-left{background-position:-15px -180px}.x-tool-over .x-tool-down{background-position:-15px -195px}.x-tool-over .x-tool-up{background-position:-15px -210px}.x-tool-over .x-tool-refresh{background-position:-15px -225px}.x-tool-over .x-tool-plus{background-position:-15px -240px}.x-tool-over .x-tool-minus{background-position:-15px -255px}.x-tool-over .x-tool-search{background-position:-15px -270px}.x-tool-over .x-tool-save{background-position:-15px -285px}.x-tool-over .x-tool-help{background-position:-15px -300px}.x-tool-over .x-tool-print{background-position:-15px -315px}.x-tool-over .x-tool-expand{background-position:-15px -330px}.x-tool-over .x-tool-collapse{background-position:-15px -345px}.x-tool-over .x-tool-resize{background-position:-15px -360px}.x-tool-over .x-tool-move{background-position:-15px -375px}.x-tool-over .x-tool-expand-bottom,.x-tool-over .x-tool-collapse-bottom{background-position:-15px -195px}.x-tool-over .x-tool-expand-top,.x-tool-over .x-tool-collapse-top{background-position:-15px -210px}.x-tool-over .x-tool-expand-left,.x-tool-over .x-tool-collapse-left{background-position:-15px -180px}.x-tool-over .x-tool-expand-right,.x-tool-over .x-tool-collapse-right{background-position:-15px -165px}.x-resizable-handle{position:absolute;z-index:100;font-size:1px;line-height:6px;overflow:hidden;zoom:1;filter:alpha(opacity=0);opacity:0;background-color:#fff}.x-collapsed .x-resizable-handle{display:none}.x-resizable-over .x-resizable-handle-north{cursor:n-resize}.x-resizable-over .x-resizable-handle-south{cursor:s-resize}.x-resizable-over .x-resizable-handle-east{cursor:e-resize}.x-resizable-over .x-resizable-handle-west{cursor:w-resize}.x-resizable-over .x-resizable-handle-southeast{cursor:se-resize}.x-resizable-over .x-resizable-handle-northwest{cursor:nw-resize}.x-resizable-over .x-resizable-handle-northeast{cursor:ne-resize}.x-resizable-over .x-resizable-handle-southwest{cursor:sw-resize}.x-resizable-handle-east{width:6px;height:100%;right:0;top:0}.x-resizable-handle-south{width:100%;height:6px;left:0;bottom:0}.x-resizable-handle-west{width:6px;height:100%;left:0;top:0}.x-resizable-handle-north{width:100%;height:6px;left:0;top:0}.x-resizable-handle-southeast{width:6px;height:6px;right:0;bottom:0;z-index:101}.x-resizable-handle-northwest{width:6px;height:6px;left:0;top:0;z-index:101}.x-resizable-handle-northeast{width:6px;height:6px;right:0;top:0;z-index:101}.x-resizable-handle-southwest{width:6px;height:6px;left:0;bottom:0;z-index:101}.x-ie .x-resizable-handle-east{margin-right:-1px}.x-ie .x-resizable-handle-south{margin-bottom:-1px}.x-resizable-pinned .x-resizable-handle,.x-resizable-over .x-resizable-handle{filter:alpha(opacity=100);opacity:1}.x-window .x-window-handle{filter:alpha(opacity=0);opacity:0}.x-window-collapsed .x-window-handle{display:none}.x-resizable-proxy{border:1px dashed #3b5a82;position:absolute;overflow:hidden;z-index:50000}.x-resizable-over .x-resizable-handle-east,.x-resizable-over .x-resizable-handle-west,.x-resizable-pinned .x-resizable-handle-east,.x-resizable-pinned .x-resizable-handle-west{background-image:url(images/sizer/e-handle.gif)}.x-resizable-over .x-resizable-handle-south,.x-resizable-over .x-resizable-handle-north,.x-resizable-pinned .x-resizable-handle-south,.x-resizable-pinned .x-resizable-handle-north{background-image:url(images/sizer/s-handle.gif)}.x-resizable-over .x-resizable-handle-southeast,.x-resizable-pinned .x-resizable-handle-southeast{background-position:top left;background-image:url(images/sizer/se-handle.gif)}.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{background-position:bottom right;background-image:url(images/sizer/nw-handle.gif)}.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{background-position:bottom left;background-image:url(images/sizer/ne-handle.gif)}.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{background-position:top right;background-image:url(images/sizer/sw-handle.gif)}.x-slider-horz{padding-left:7px;background:no-repeat 0 -15px}.x-slider-horz .x-slider-end{padding-right:7px;background:no-repeat right -30px}.x-slider-horz .x-slider-inner{height:15px}.x-ie6 .x-form-item .x-slider-horz,.x-ie7 .x-form-item .x-slider-horz,.x-quirks .x-ie .x-form-item .x-slider-horz{margin-top:4px}.x-slider-horz .x-slider-thumb{width:14px;height:15px;margin-left:-7px;background-image:url(images/slider/slider-thumb.png)}.x-slider-horz .x-slider-thumb-over{background-position:-14px -15px}.x-slider-horz .x-slider-thumb-drag{background-position:-28px -30px}.x-slider-vert{padding-top:7px;background:no-repeat -30px 0}.x-slider-vert .x-slider-end{padding-bottom:7px;background:no-repeat -15px bottom;width:15px}.x-slider-vert .x-slider-inner{width:15px}.x-slider-vert .x-slider-thumb{width:15px;height:14px;margin-bottom:-7px;background-image:url(images/slider/slider-v-thumb.png)}.x-slider-vert .x-slider-thumb-over{background-position:-15px -14px}.x-slider-vert .x-slider-thumb-drag{background-position:-30px -28px}.x-slider-horz,.x-slider-horz .x-slider-end,.x-slider-horz .x-slider-inner{background-image:url(images/slider/slider-bg.png)}.x-slider-vert,.x-slider-vert .x-slider-end,.x-slider-vert .x-slider-inner{background-image:url(images/slider/slider-v-bg.png)}.x-tab-default-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:3px 9px 3px 9px;border-width:1px 1px 0 1px;border-style:solid;background-image:none;background-color:#deecfd;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#ccdef6),color-stop(25%,#d6e6fa),color-stop(45%,#deecfd));background-image:-webkit-linear-gradient(top,#ccdef6,#d6e6fa 25%,#deecfd 45%);background-image:-moz-linear-gradient(top,#ccdef6,#d6e6fa 25%,#deecfd 45%);background-image:-o-linear-gradient(top,#ccdef6,#d6e6fa 25%,#deecfd 45%);background-image:linear-gradient(top,#ccdef6,#d6e6fa 25%,#deecfd 45%)}.x-tab-default-top-mc{background-image:url(images/tab/tab-default-top-fbg.gif);background-position:0 top;background-color:#deecfd}.x-nlg .x-tab-default-top{background-image:url(images/tab/tab-default-top-bg.gif);background-position:0 top}.x-nbr .x-tab-default-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent;background-image:none}body.x-nbr .x-tab-default-top-frameInfo{font-family:th-4-4-0-0-1-1-0-1-3-9-3-9}.x-tab-default-top-tl{background-position:0 -8px}.x-tab-default-top-tr{background-position:right -12px}.x-tab-default-top-bl{background-position:0 -16px}.x-tab-default-top-br{background-position:right -20px}.x-tab-default-top-ml{background-position:0 top}.x-tab-default-top-mr{background-position:right top}.x-tab-default-top-tc{background-position:0 0}.x-tab-default-top-bc{background-position:0 -4px}.x-tab-default-top-tr,.x-tab-default-top-br,.x-tab-default-top-mr{padding-right:4px}.x-tab-default-top-tl,.x-tab-default-top-bl,.x-tab-default-top-ml{padding-left:4px}.x-tab-default-top-tc{height:4px}.x-tab-default-top-bc{height:0}.x-tab-default-top-tl,.x-tab-default-top-bl,.x-tab-default-top-tr,.x-tab-default-top-br,.x-tab-default-top-tc,.x-tab-default-top-bc,.x-tab-default-top-ml,.x-tab-default-top-mr{zoom:1;background-image:url(images/tab/tab-default-top-corners.gif)}.x-tab-default-top-ml,.x-tab-default-top-mr{zoom:1;background-image:url(images/tab/tab-default-top-sides.gif)}.x-tab-default-top-mc{padding:0 6px 3px 6px}.x-strict .x-ie7 .x-tab-default-top-tl,.x-strict .x-ie7 .x-tab-default-top-bl{position:relative;right:0}.x-tab-default-top:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-top-fbg.gif), bg:url(images/tab/tab-default-top-bg.gif), corners:url(images/tab/tab-default-top-corners.gif), sides:url(images/tab/tab-default-top-sides.gif)"}.x-tab-default-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:3px 9px 3px 9px;border-width:0 1px 1px 1px;border-style:solid;background-image:none;background-color:#deecfd;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#ccdef6),color-stop(25%,#d6e6fa),color-stop(45%,#deecfd));background-image:-webkit-linear-gradient(bottom,#ccdef6,#d6e6fa 25%,#deecfd 45%);background-image:-moz-linear-gradient(bottom,#ccdef6,#d6e6fa 25%,#deecfd 45%);background-image:-o-linear-gradient(bottom,#ccdef6,#d6e6fa 25%,#deecfd 45%);background-image:linear-gradient(bottom,#ccdef6,#d6e6fa 25%,#deecfd 45%)}.x-tab-default-bottom-mc{background-image:url(images/tab/tab-default-bottom-fbg.gif);background-position:0 top;background-color:#deecfd}.x-nlg .x-tab-default-bottom{background-image:url(images/tab/tab-default-bottom-bg.gif);background-position:0 top}.x-nbr .x-tab-default-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent;background-image:none}body.x-nbr .x-tab-default-bottom-frameInfo{font-family:th-0-0-4-4-0-1-1-1-3-9-3-9}.x-tab-default-bottom-tl{background-position:0 -8px}.x-tab-default-bottom-tr{background-position:right -12px}.x-tab-default-bottom-bl{background-position:0 -16px}.x-tab-default-bottom-br{background-position:right -20px}.x-tab-default-bottom-ml{background-position:0 top}.x-tab-default-bottom-mr{background-position:right top}.x-tab-default-bottom-tc{background-position:0 0}.x-tab-default-bottom-bc{background-position:0 -4px}.x-tab-default-bottom-tr,.x-tab-default-bottom-br,.x-tab-default-bottom-mr{padding-right:4px}.x-tab-default-bottom-tl,.x-tab-default-bottom-bl,.x-tab-default-bottom-ml{padding-left:4px}.x-tab-default-bottom-tc{height:0}.x-tab-default-bottom-bc{height:4px}.x-tab-default-bottom-tl,.x-tab-default-bottom-bl,.x-tab-default-bottom-tr,.x-tab-default-bottom-br,.x-tab-default-bottom-tc,.x-tab-default-bottom-bc,.x-tab-default-bottom-ml,.x-tab-default-bottom-mr{zoom:1;background-image:url(images/tab/tab-default-bottom-corners.gif)}.x-tab-default-bottom-ml,.x-tab-default-bottom-mr{zoom:1;background-image:url(images/tab/tab-default-bottom-sides.gif)}.x-tab-default-bottom-mc{padding:3px 6px 0 6px}.x-strict .x-ie7 .x-tab-default-bottom-tl,.x-strict .x-ie7 .x-tab-default-bottom-bl{position:relative;right:0}.x-tab-default-bottom:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-bottom-fbg.gif), bg:url(images/tab/tab-default-bottom-bg.gif), corners:url(images/tab/tab-default-bottom-corners.gif), sides:url(images/tab/tab-default-bottom-sides.gif)"}.x-tab-default-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:3px 9px 3px 9px;border-width:1px 1px 0 1px;border-style:solid;background-image:none;background-color:#deecfd;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#ccdef6),color-stop(25%,#d6e6fa),color-stop(45%,#deecfd));background-image:-webkit-linear-gradient(top,#ccdef6,#d6e6fa 25%,#deecfd 45%);background-image:-moz-linear-gradient(top,#ccdef6,#d6e6fa 25%,#deecfd 45%);background-image:-o-linear-gradient(top,#ccdef6,#d6e6fa 25%,#deecfd 45%);background-image:linear-gradient(top,#ccdef6,#d6e6fa 25%,#deecfd 45%)}.x-tab-default-left-mc{background-image:url(images/tab/tab-default-top-fbg.gif);background-position:0 top;background-color:#deecfd}.x-nlg .x-tab-default-left{background-image:url(images/tab/tab-default-top-bg.gif);background-position:0 top}.x-nbr .x-tab-default-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent;background-image:none}body.x-nbr .x-tab-default-left-frameInfo{font-family:th-4-4-0-0-1-1-0-1-3-9-3-9}.x-tab-default-left-tl{background-position:0 -8px}.x-tab-default-left-tr{background-position:right -12px}.x-tab-default-left-bl{background-position:0 -16px}.x-tab-default-left-br{background-position:right -20px}.x-tab-default-left-ml{background-position:0 top}.x-tab-default-left-mr{background-position:right top}.x-tab-default-left-tc{background-position:0 0}.x-tab-default-left-bc{background-position:0 -4px}.x-tab-default-left-tr,.x-tab-default-left-br,.x-tab-default-left-mr{padding-right:4px}.x-tab-default-left-tl,.x-tab-default-left-bl,.x-tab-default-left-ml{padding-left:4px}.x-tab-default-left-tc{height:4px}.x-tab-default-left-bc{height:0}.x-tab-default-left-tl,.x-tab-default-left-bl,.x-tab-default-left-tr,.x-tab-default-left-br,.x-tab-default-left-tc,.x-tab-default-left-bc,.x-tab-default-left-ml,.x-tab-default-left-mr{zoom:1;background-image:url(images/tab/tab-default-top-corners.gif)}.x-tab-default-left-ml,.x-tab-default-left-mr{zoom:1;background-image:url(images/tab/tab-default-top-sides.gif)}.x-tab-default-left-mc{padding:0 6px 3px 6px}.x-strict .x-ie7 .x-tab-default-left-tl,.x-strict .x-ie7 .x-tab-default-left-bl{position:relative;right:0}.x-tab-default-left:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-top-fbg.gif), bg:url(images/tab/tab-default-top-bg.gif), corners:url(images/tab/tab-default-top-corners.gif), sides:url(images/tab/tab-default-top-sides.gif)"}.x-tab-default-right{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:3px 9px 3px 9px;border-width:1px 1px 0 1px;border-style:solid;background-image:none;background-color:#deecfd;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#ccdef6),color-stop(25%,#d6e6fa),color-stop(45%,#deecfd));background-image:-webkit-linear-gradient(top,#ccdef6,#d6e6fa 25%,#deecfd 45%);background-image:-moz-linear-gradient(top,#ccdef6,#d6e6fa 25%,#deecfd 45%);background-image:-o-linear-gradient(top,#ccdef6,#d6e6fa 25%,#deecfd 45%);background-image:linear-gradient(top,#ccdef6,#d6e6fa 25%,#deecfd 45%)}.x-tab-default-right-mc{background-image:url(images/tab/tab-default-top-fbg.gif);background-position:0 top;background-color:#deecfd}.x-nlg .x-tab-default-right{background-image:url(images/tab/tab-default-top-bg.gif);background-position:0 top}.x-nbr .x-tab-default-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent;background-image:none}body.x-nbr .x-tab-default-right-frameInfo{font-family:th-4-4-0-0-1-1-0-1-3-9-3-9}.x-tab-default-right-tl{background-position:0 -8px}.x-tab-default-right-tr{background-position:right -12px}.x-tab-default-right-bl{background-position:0 -16px}.x-tab-default-right-br{background-position:right -20px}.x-tab-default-right-ml{background-position:0 top}.x-tab-default-right-mr{background-position:right top}.x-tab-default-right-tc{background-position:0 0}.x-tab-default-right-bc{background-position:0 -4px}.x-tab-default-right-tr,.x-tab-default-right-br,.x-tab-default-right-mr{padding-right:4px}.x-tab-default-right-tl,.x-tab-default-right-bl,.x-tab-default-right-ml{padding-left:4px}.x-tab-default-right-tc{height:4px}.x-tab-default-right-bc{height:0}.x-tab-default-right-tl,.x-tab-default-right-bl,.x-tab-default-right-tr,.x-tab-default-right-br,.x-tab-default-right-tc,.x-tab-default-right-bc,.x-tab-default-right-ml,.x-tab-default-right-mr{zoom:1;background-image:url(images/tab/tab-default-top-corners.gif)}.x-tab-default-right-ml,.x-tab-default-right-mr{zoom:1;background-image:url(images/tab/tab-default-top-sides.gif)}.x-tab-default-right-mc{padding:0 6px 3px 6px}.x-strict .x-ie7 .x-tab-default-right-tl,.x-strict .x-ie7 .x-tab-default-right-bl{position:relative;right:0}.x-tab-default-right:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-top-fbg.gif), bg:url(images/tab/tab-default-top-bg.gif), corners:url(images/tab/tab-default-top-corners.gif), sides:url(images/tab/tab-default-top-sides.gif)"}.x-tab-default{border-color:#8db3e3;margin:0 0 0 2px;cursor:pointer}.x-tab-default .x-tab-inner{font-size:11px;font-weight:bold;font-family:tahoma,arial,verdana,sans-serif;color:#416da3;line-height:13px}.x-tab-default .x-tab-icon-el{width:16px;height:16px;line-height:16px;background-position:center center}.x-tab-default .x-tab-glyph{font-size:16px;color:#416da3;opacity:.5}.x-ie8m .x-tab-default .x-tab-glyph{color:#8facd0}.x-strict .x-ie9 .x-tab-bar-vertical .x-tab-default{padding-left:0}.x-strict .x-ie9 .x-tab-bar-vertical .x-tab-default .x-tab-button{padding-left:9px}.x-strict .x-ie9 .x-tab-bar-vertical .x-tab-default .x-tab-icon-el{left:9px}.x-tab-default-icon .x-tab-inner{width:16px}.x-tab-default-left{margin:0 2px 0 0}.x-tab-default-top,.x-tab-default-left,.x-tab-default-right{border-bottom:1px solid #99bce8;background-image:none;background-color:#deecfd;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#ccdef6),color-stop(25%,#d6e6fa),color-stop(45%,#deecfd));background-image:-webkit-linear-gradient(top,#ccdef6,#d6e6fa 25%,#deecfd 45%);background-image:-moz-linear-gradient(top,#ccdef6,#d6e6fa 25%,#deecfd 45%);background-image:-o-linear-gradient(top,#ccdef6,#d6e6fa 25%,#deecfd 45%);background-image:linear-gradient(top,#ccdef6,#d6e6fa 25%,#deecfd 45%);-webkit-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset}.x-nlg .x-tab-default-top,.x-nlg .x-tab-default-left,.x-nlg .x-tab-default-right{background-image:url(images/tab/tab-default-top-bg.gif)}.x-tab-default-bottom{border-top:1px solid #99bce8;background-image:none;background-color:#deecfd;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#ccdef6),color-stop(25%,#d6e6fa),color-stop(45%,#deecfd));background-image:-webkit-linear-gradient(bottom,#ccdef6,#d6e6fa 25%,#deecfd 45%);background-image:-moz-linear-gradient(bottom,#ccdef6,#d6e6fa 25%,#deecfd 45%);background-image:-o-linear-gradient(bottom,#ccdef6,#d6e6fa 25%,#deecfd 45%);background-image:linear-gradient(bottom,#ccdef6,#d6e6fa 25%,#deecfd 45%);-webkit-box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset}.x-nlg .x-tab-default-bottom{background-image:url(images/tab/tab-default-bottom-bg.gif)}.x-tab-default-left{-webkit-transform:rotate(270deg);-webkit-transform-origin:100% 0;-moz-transform:rotate(270deg);-moz-transform-origin:100% 0;-o-transform:rotate(270deg);-o-transform-origin:100% 0;transform:rotate(270deg);transform-origin:100% 0}.x-ie9m .x-tab-default-left{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.x-tab-default-right{-webkit-transform:rotate(90deg);-webkit-transform-origin:0 0;-moz-transform:rotate(90deg);-moz-transform-origin:0 0;-o-transform:rotate(90deg);-o-transform-origin:0 0;transform:rotate(90deg);transform-origin:0 0}.x-ie9m .x-tab-default-right{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.x-tab-default-icon-text-left .x-tab-inner{padding-left:20px}.x-tab-default-over{background-color:#e8f2ff}.x-tab-default-over .x-tab-glyph{color:#416da3}.x-ie8m .x-tab-default-over .x-tab-glyph{color:#94afd1}.x-tab-default-top-over,.x-tab-default-left-over,.x-tab-default-right-over{background-image:none;background-color:#e8f2ff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#d7e5fd),color-stop(25%,#e0edff),color-stop(45%,#e8f2ff));background-image:-webkit-linear-gradient(top,#d7e5fd,#e0edff 25%,#e8f2ff 45%);background-image:-moz-linear-gradient(top,#d7e5fd,#e0edff 25%,#e8f2ff 45%);background-image:-o-linear-gradient(top,#d7e5fd,#e0edff 25%,#e8f2ff 45%);background-image:linear-gradient(top,#d7e5fd,#e0edff 25%,#e8f2ff 45%)}.x-nlg .x-tab-default-top-over,.x-nlg .x-tab-default-left-over,.x-nlg .x-tab-default-right-over{background-image:url(images/tab/tab-default-top-over-bg.gif)}.x-tab-default-bottom-over{background-image:none;background-color:#e8f2ff;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#d7e5fd),color-stop(25%,#e0edff),color-stop(45%,#e8f2ff));background-image:-webkit-linear-gradient(bottom,#d7e5fd,#e0edff 25%,#e8f2ff 45%);background-image:-moz-linear-gradient(bottom,#d7e5fd,#e0edff 25%,#e8f2ff 45%);background-image:-o-linear-gradient(bottom,#d7e5fd,#e0edff 25%,#e8f2ff 45%);background-image:linear-gradient(bottom,#d7e5fd,#e0edff 25%,#e8f2ff 45%)}.x-nlg .x-tab-default-bottom-over{background-image:url(images/tab/tab-default-bottom-over-bg.gif)}.x-tab-default-active{background-color:#deecfd}.x-tab-default-active .x-tab-inner{color:#15498b}.x-tab-default-active .x-tab-glyph{color:#15498b}.x-ie8m .x-tab-default-active .x-tab-glyph{color:#799ac4}.x-tab-default-top-active,.x-tab-default-left-active,.x-tab-default-right-active{border-bottom:1px solid #deecfd;background-image:none;background-color:#deecfd;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(25%,#f5f9fe),color-stop(45%,#deecfd));background-image:-webkit-linear-gradient(top,#fff,#f5f9fe 25%,#deecfd 45%);background-image:-moz-linear-gradient(top,#fff,#f5f9fe 25%,#deecfd 45%);background-image:-o-linear-gradient(top,#fff,#f5f9fe 25%,#deecfd 45%);background-image:linear-gradient(top,#fff,#f5f9fe 25%,#deecfd 45%)}.x-nlg .x-tab-default-top-active,.x-nlg .x-tab-default-left-active,.x-nlg .x-tab-default-right-active{background-image:url(images/tab/tab-default-top-active-bg.gif)}.x-tab-default-bottom-active{border-top:1px solid #deecfd;background-image:none;background-color:#deecfd;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#fff),color-stop(25%,#f5f9fe),color-stop(45%,#deecfd));background-image:-webkit-linear-gradient(bottom,#fff,#f5f9fe 25%,#deecfd 45%);background-image:-moz-linear-gradient(bottom,#fff,#f5f9fe 25%,#deecfd 45%);background-image:-o-linear-gradient(bottom,#fff,#f5f9fe 25%,#deecfd 45%);background-image:linear-gradient(bottom,#fff,#f5f9fe 25%,#deecfd 45%)}.x-nlg .x-tab-default-bottom-active{background-image:url(images/tab/tab-default-bottom-active-bg.gif)}.x-tab-default-disabled{border-color:#bbd2ef;cursor:default}.x-tab-default-disabled .x-tab-inner{color:#c3b3b3}.x-tab-default-disabled .x-tab-icon-el{filter:alpha(opacity=50);opacity:.5}.x-tab-default-disabled .x-tab-glyph{color:#c3b3b3;opacity:.3;filter:none}.x-ie8m .x-tab-default-disabled .x-tab-glyph{color:#d8dae4}.x-tab-default-top-disabled,.x-tab-default-left-disabled,.x-tab-default-right-disabled{border-color:#bbd2ef #bbd2ef #99bce8}.x-tab-default-bottom-disabled{border-color:#99bce8 #bbd2ef #bbd2ef #bbd2ef}.x-tab-default-top-disabled,.x-tab-default-left-disabled,.x-tab-default-right-disabled{background-image:none;background-color:#e1ecfa;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#e1ecfa),color-stop(100%,#ecf4fe));background-image:-webkit-linear-gradient(top,#e1ecfa,#ecf4fe);background-image:-moz-linear-gradient(top,#e1ecfa,#ecf4fe);background-image:-o-linear-gradient(top,#e1ecfa,#ecf4fe);background-image:linear-gradient(top,#e1ecfa,#ecf4fe)}.x-nlg .x-tab-default-top-disabled,.x-nlg .x-tab-default-left-disabled,.x-nlg .x-tab-default-right-disabled{background-image:url(images/tab/tab-default-top-disabled-bg.gif)}.x-tab-default-bottom-disabled{background-image:none;background-color:#e1ecfa;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#e1ecfa),color-stop(100%,#ecf4fe));background-image:-webkit-linear-gradient(bottom,#e1ecfa,#ecf4fe);background-image:-moz-linear-gradient(bottom,#e1ecfa,#ecf4fe);background-image:-o-linear-gradient(bottom,#e1ecfa,#ecf4fe);background-image:linear-gradient(bottom,#e1ecfa,#ecf4fe)}.x-nlg .x-tab-default-bottom-disabled{background-image:url(images/tab/tab-default-bottom-disabled-bg.gif)}.x-nbr .x-tab-default{background-image:none}.x-tab-default-top-over .x-frame-tl,.x-tab-default-top-over .x-frame-bl,.x-tab-default-top-over .x-frame-tr,.x-tab-default-top-over .x-frame-br,.x-tab-default-top-over .x-frame-tc,.x-tab-default-top-over .x-frame-bc,.x-tab-default-left-over .x-frame-tl,.x-tab-default-left-over .x-frame-bl,.x-tab-default-left-over .x-frame-tr,.x-tab-default-left-over .x-frame-br,.x-tab-default-left-over .x-frame-tc,.x-tab-default-left-over .x-frame-bc,.x-tab-default-right-over .x-frame-tl,.x-tab-default-right-over .x-frame-bl,.x-tab-default-right-over .x-frame-tr,.x-tab-default-right-over .x-frame-br,.x-tab-default-right-over .x-frame-tc,.x-tab-default-right-over .x-frame-bc{background-image:url(images/tab/tab-default-top-over-corners.gif)}.x-tab-default-top-over .x-frame-ml,.x-tab-default-top-over .x-frame-mr,.x-tab-default-left-over .x-frame-ml,.x-tab-default-left-over .x-frame-mr,.x-tab-default-right-over .x-frame-ml,.x-tab-default-right-over .x-frame-mr{background-image:url(images/tab/tab-default-top-over-sides.gif)}.x-tab-default-top-over .x-frame-mc,.x-tab-default-left-over .x-frame-mc,.x-tab-default-right-over .x-frame-mc{background-color:#e8f2ff;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-over-fbg.gif)}.x-tab-default-bottom-over .x-frame-tl,.x-tab-default-bottom-over .x-frame-bl,.x-tab-default-bottom-over .x-frame-tr,.x-tab-default-bottom-over .x-frame-br,.x-tab-default-bottom-over .x-frame-tc,.x-tab-default-bottom-over .x-frame-bc{background-image:url(images/tab/tab-default-bottom-over-corners.gif)}.x-tab-default-bottom-over .x-frame-ml,.x-tab-default-bottom-over .x-frame-mr{background-image:url(images/tab/tab-default-bottom-over-sides.gif)}.x-tab-default-bottom-over .x-frame-mc{background-color:#e8f2ff;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-over-fbg.gif)}.x-tab-default-top-active .x-frame-tl,.x-tab-default-top-active .x-frame-bl,.x-tab-default-top-active .x-frame-tr,.x-tab-default-top-active .x-frame-br,.x-tab-default-top-active .x-frame-tc,.x-tab-default-top-active .x-frame-bc,.x-tab-default-left-active .x-frame-tl,.x-tab-default-left-active .x-frame-bl,.x-tab-default-left-active .x-frame-tr,.x-tab-default-left-active .x-frame-br,.x-tab-default-left-active .x-frame-tc,.x-tab-default-left-active .x-frame-bc,.x-tab-default-right-active .x-frame-tl,.x-tab-default-right-active .x-frame-bl,.x-tab-default-right-active .x-frame-tr,.x-tab-default-right-active .x-frame-br,.x-tab-default-right-active .x-frame-tc,.x-tab-default-right-active .x-frame-bc{background-image:url(images/tab/tab-default-top-active-corners.gif)}.x-tab-default-top-active .x-frame-ml,.x-tab-default-top-active .x-frame-mr,.x-tab-default-left-active .x-frame-ml,.x-tab-default-left-active .x-frame-mr,.x-tab-default-right-active .x-frame-ml,.x-tab-default-right-active .x-frame-mr{background-image:url(images/tab/tab-default-top-active-sides.gif)}.x-tab-default-top-active .x-frame-mc,.x-tab-default-left-active .x-frame-mc,.x-tab-default-right-active .x-frame-mc{background-color:#deecfd;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-active-fbg.gif)}.x-tab-default-bottom-active .x-frame-tl,.x-tab-default-bottom-active .x-frame-bl,.x-tab-default-bottom-active .x-frame-tr,.x-tab-default-bottom-active .x-frame-br,.x-tab-default-bottom-active .x-frame-tc,.x-tab-default-bottom-active .x-frame-bc{background-image:url(images/tab/tab-default-bottom-active-corners.gif)}.x-tab-default-bottom-active .x-frame-ml,.x-tab-default-bottom-active .x-frame-mr{background-image:url(images/tab/tab-default-bottom-active-sides.gif)}.x-tab-default-bottom-active .x-frame-mc{background-color:#deecfd;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-active-fbg.gif)}.x-tab-default-top-disabled .x-frame-tl,.x-tab-default-top-disabled .x-frame-bl,.x-tab-default-top-disabled .x-frame-tr,.x-tab-default-top-disabled .x-frame-br,.x-tab-default-top-disabled .x-frame-tc,.x-tab-default-top-disabled .x-frame-bc,.x-tab-default-left-disabled .x-frame-tl,.x-tab-default-left-disabled .x-frame-bl,.x-tab-default-left-disabled .x-frame-tr,.x-tab-default-left-disabled .x-frame-br,.x-tab-default-left-disabled .x-frame-tc,.x-tab-default-left-disabled .x-frame-bc,.x-tab-default-right-disabled .x-frame-tl,.x-tab-default-right-disabled .x-frame-bl,.x-tab-default-right-disabled .x-frame-tr,.x-tab-default-right-disabled .x-frame-br,.x-tab-default-right-disabled .x-frame-tc,.x-tab-default-right-disabled .x-frame-bc{background-image:url(images/tab/tab-default-top-disabled-corners.gif)}.x-tab-default-top-disabled .x-frame-ml,.x-tab-default-top-disabled .x-frame-mr,.x-tab-default-left-disabled .x-frame-ml,.x-tab-default-left-disabled .x-frame-mr,.x-tab-default-right-disabled .x-frame-ml,.x-tab-default-right-disabled .x-frame-mr{background-image:url(images/tab/tab-default-top-disabled-sides.gif)}.x-tab-default-top-disabled .x-frame-mc,.x-tab-default-left-disabled .x-frame-mc,.x-tab-default-right-disabled .x-frame-mc{background-color:#e1ecfa;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-disabled-fbg.gif)}.x-tab-default-bottom-disabled .x-frame-tl,.x-tab-default-bottom-disabled .x-frame-bl,.x-tab-default-bottom-disabled .x-frame-tr,.x-tab-default-bottom-disabled .x-frame-br,.x-tab-default-bottom-disabled .x-frame-tc,.x-tab-default-bottom-disabled .x-frame-bc{background-image:url(images/tab/tab-default-bottom-disabled-corners.gif)}.x-tab-default-bottom-disabled .x-frame-ml,.x-tab-default-bottom-disabled .x-frame-mr{background-image:url(images/tab/tab-default-bottom-disabled-sides.gif)}.x-tab-default-bottom-disabled .x-frame-mc{background-color:#e1ecfa;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-disabled-fbg.gif)}.x-nbr .x-tab-default-top,.x-nbr .x-tab-default-left,.x-nbr .x-tab-default-right{border-bottom-width:1px!important}.x-nbr .x-tab-default-bottom{border-top-width:1px!important}.x-tab-default .x-tab-close-btn{width:11px;height:11px;background-image:url(images/tab/tab-default-close.gif);filter:alpha(opacity=60);opacity:.6}.x-tab-default .x-tab-close-btn-over{filter:alpha(opacity=100);opacity:1}.x-tab-default .x-tab-close-btn{top:2px;right:2px}.x-tab-default-disabled .x-tab-close-btn{filter:alpha(opacity=30);opacity:.3}.x-tab-default-closable .x-tab-wrap{padding-right:14px}.x-tab-default-top-over:after{display:none;content:"x-slicer:bg:url(images/tab/tab-default-top-over-bg.gif), corners:url(images/tab/tab-default-top-over-corners.gif), sides:url(images/tab/tab-default-top-over-sides.gif), frame-bg:url(images/tab/tab-default-top-over-fbg.gif)"}.x-tab-default-bottom-over:after{display:none;content:"x-slicer:bg:url(images/tab/tab-default-bottom-over-bg.gif), corners:url(images/tab/tab-default-bottom-over-corners.gif), sides:url(images/tab/tab-default-bottom-over-sides.gif), frame-bg:url(images/tab/tab-default-bottom-over-fbg.gif)"}.x-tab-default-top-active:after{display:none;content:"x-slicer:bg:url(images/tab/tab-default-top-active-bg.gif), corners:url(images/tab/tab-default-top-active-corners.gif), sides:url(images/tab/tab-default-top-active-sides.gif), frame-bg:url(images/tab/tab-default-top-active-fbg.gif)"}.x-tab-default-bottom-active:after{display:none;content:"x-slicer:bg:url(images/tab/tab-default-bottom-active-bg.gif), corners:url(images/tab/tab-default-bottom-active-corners.gif), sides:url(images/tab/tab-default-bottom-active-sides.gif), frame-bg:url(images/tab/tab-default-bottom-active-fbg.gif)"}.x-tab-default-top-disabled:after{display:none;content:"x-slicer:bg:url(images/tab/tab-default-top-disabled-bg.gif), corners:url(images/tab/tab-default-top-disabled-corners.gif), sides:url(images/tab/tab-default-top-disabled-sides.gif), frame-bg:url(images/tab/tab-default-top-disabled-fbg.gif)"}.x-tab-default-bottom-disabled:after{display:none;content:"x-slicer:bg:url(images/tab/tab-default-bottom-disabled-bg.gif), corners:url(images/tab/tab-default-bottom-disabled-corners.gif), sides:url(images/tab/tab-default-bottom-disabled-sides.gif), frame-bg:url(images/tab/tab-default-bottom-disabled-fbg.gif)"}.x-tab-bar-default{border-style:solid;border-color:#99bce8}.x-tab-bar-default-top{padding:1px 0 0;border-width:1px 1px 0}.x-tab-bar-default-bottom{padding:0 0 1px 0;border-width:0 1px 1px 1px}.x-tab-bar-default-left{padding:0 0 0 1px;border-width:1px 0 1px 1px}.x-tab-bar-default-right{padding:0 1px 0 0;border-width:1px 1px 1px 0}.x-tab-bar-default-horizontal{height:25px}.x-content-box .x-tab-bar-default-horizontal{height:23px}.x-tab-bar-default-vertical{width:25px}.x-content-box .x-tab-bar-default-vertical{width:23px}.x-tab-bar-body-default-top{padding-bottom:2px}.x-tab-bar-body-default-bottom{padding-top:2px}.x-tab-bar-body-default-left{padding-right:2px}.x-tab-bar-body-default-right{padding-left:2px}.x-tab-bar-strip-default{border-style:solid;border-color:#99bce8;background-color:#deecfd}.x-content-box .x-tab-bar-strip-default-horizontal{height:2px}.x-content-box .x-tab-bar-strip-default-vertical{width:2px}.x-tab-bar-strip-default-top{border-width:1px 0 0 0;height:3px}.x-tab-bar-plain .x-tab-bar-strip-default-top{border-width:1px 1px 0}.x-tab-bar-strip-default-bottom{border-width:0 0 1px 0;height:3px}.x-tab-bar-plain .x-tab-bar-strip-default-bottom{border-width:0 1px 1px 1px}.x-tab-bar-strip-default-left{border-width:0 0 0 1px;width:3px}.x-tab-bar-plain .x-tab-bar-strip-default-left{border-width:1px 0 1px 1px}.x-tab-bar-strip-default-right{border-width:0 1px 0 0;width:3px}.x-tab-bar-plain .x-tab-bar-strip-default-right{border-width:1px 1px 1px 0}.x-tab-bar-default{background-color:#cbdbef}.x-tab-bar-default-top{background-image:none;background-color:#cbdbef;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dde8f5),color-stop(100%,#cbdbef));background-image:-webkit-linear-gradient(top,#dde8f5,#cbdbef);background-image:-moz-linear-gradient(top,#dde8f5,#cbdbef);background-image:-o-linear-gradient(top,#dde8f5,#cbdbef);background-image:linear-gradient(top,#dde8f5,#cbdbef)}.x-nlg .x-tab-bar-default-top{background:url(images/tab-bar/tab-bar-default-top-bg.gif)}.x-tab-bar-default-bottom{background-image:none;background-color:#cbdbef;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#dde8f5),color-stop(100%,#cbdbef));background-image:-webkit-linear-gradient(bottom,#dde8f5,#cbdbef);background-image:-moz-linear-gradient(bottom,#dde8f5,#cbdbef);background-image:-o-linear-gradient(bottom,#dde8f5,#cbdbef);background-image:linear-gradient(bottom,#dde8f5,#cbdbef)}.x-nlg .x-tab-bar-default-bottom{background:url(images/tab-bar/tab-bar-default-bottom-bg.gif) bottom 0}.x-tab-bar-default-left{background-image:none;background-color:#cbdbef;background-image:-webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,#dde8f5),color-stop(100%,#cbdbef));background-image:-webkit-linear-gradient(left,#dde8f5,#cbdbef);background-image:-moz-linear-gradient(left,#dde8f5,#cbdbef);background-image:-o-linear-gradient(left,#dde8f5,#cbdbef);background-image:linear-gradient(left,#dde8f5,#cbdbef)}.x-nlg .x-tab-bar-default-left{background:url(images/tab-bar/tab-bar-default-left-bg.gif)}.x-tab-bar-default-right{background-image:none;background-color:#cbdbef;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#dde8f5),color-stop(100%,#cbdbef));background-image:-webkit-linear-gradient(right,#dde8f5,#cbdbef);background-image:-moz-linear-gradient(right,#dde8f5,#cbdbef);background-image:-o-linear-gradient(right,#dde8f5,#cbdbef);background-image:linear-gradient(right,#dde8f5,#cbdbef)}.x-nlg .x-tab-bar-default-right{background:url(images/tab-bar/tab-bar-default-right-bg.gif) 0 right}.x-tab-bar-default .x-box-scroller{cursor:pointer}.x-tab-bar-default .x-tabbar-scroll-left,.x-tab-bar-default .x-tabbar-scroll-right{height:20px;width:18px}.x-tab-bar-default .x-tabbar-scroll-top,.x-tab-bar-default .x-tabbar-scroll-bottom{width:20px;height:18px}.x-tab-bar-default-bottom .x-box-scroller{margin-top:1px}.x-tab-bar-default-right .x-box-scroller{margin-left:1px}.x-tab-bar-default-top .x-tabbar-scroll-left{background-image:url(images/tab-bar/default-scroll-left-top.gif)}.x-tab-bar-default-top .x-tabbar-scroll-right{background-image:url(images/tab-bar/default-scroll-right-top.gif)}.x-tab-bar-default-bottom .x-tabbar-scroll-left{background-image:url(images/tab-bar/default-scroll-left-bottom.gif)}.x-tab-bar-default-bottom .x-tabbar-scroll-right{background-image:url(images/tab-bar/default-scroll-right-bottom.gif)}.x-tab-bar-default-left .x-tabbar-scroll-top{background-image:url(images/tab-bar/default-scroll-top-left.gif)}.x-tab-bar-default-left .x-tabbar-scroll-bottom{background-image:url(images/tab-bar/default-scroll-bottom-left.gif)}.x-tab-bar-default-right .x-tabbar-scroll-top{background-image:url(images/tab-bar/default-scroll-top-right.gif)}.x-tab-bar-default-right .x-tabbar-scroll-bottom{background-image:url(images/tab-bar/default-scroll-bottom-right.gif)}.x-tab-bar-default .x-tabbar-scroll-left-hover,.x-tab-bar-default .x-tabbar-scroll-right-hover{background-position:-18px 0}.x-tab-bar-default .x-tabbar-scroll-top-hover,.x-tab-bar-default .x-tabbar-scroll-bottom-hover{background-position:0 -18px}.x-tab-bar-default .x-box-scroller-disabled{filter:alpha(opacity=50);opacity:.5;cursor:default}.x-tab-bar-default-top:after{display:none;content:"x-slicer:bg:url(images/tab-bar/tab-bar-default-top-bg.gif), stretch:bottom"}.x-tab-bar-default-bottom:after{display:none;content:"x-slicer:bg:url(images/tab-bar/tab-bar-default-bottom-bg.gif), stretch:top"}.x-tab-bar-default-left:after{display:none;content:"x-slicer:bg:url(images/tab-bar/tab-bar-default-left-bg.gif), stretch:right"}.x-tab-bar-default-right:after{display:none;content:"x-slicer:bg:url(images/tab-bar/tab-bar-default-right-bg.gif), stretch:left"}.x-tab-bar-plain{border-width:0;padding:0;height:23px}.x-column-header-checkbox{border-color:#c5c5c5}.x-grid-row-checker,.x-column-header-checkbox .x-column-header-text{height:13px;width:13px;background-image:url(images/form/checkbox.gif);line-height:13px}.x-column-header-checkbox .x-column-header-inner{padding:5px 5px 4px 5px}.x-grid-cell-row-checker .x-grid-cell-inner{padding:4px 5px 3px 5px}.x-grid-no-row-lines .x-grid-row-focused .x-grid-cell-row-checker .x-grid-cell-inner{padding-top:3px;padding-bottom:2px}.x-grid-hd-checker-on .x-column-header-text,.x-grid-row-selected .x-grid-row-checker,.x-grid-row-checked .x-grid-row-checker{background-position:0 -13px}.x-tree-expander{cursor:pointer}.x-tree-arrows .x-tree-expander{background-image:url(images/tree/arrows.gif)}.x-tree-arrows .x-tree-expander-over .x-tree-expander{background-position:-32px center}.x-tree-arrows .x-grid-tree-node-expanded .x-tree-expander{background-position:-16px center}.x-tree-arrows .x-grid-tree-node-expanded .x-tree-expander-over .x-tree-expander{background-position:-48px center}.x-tree-lines .x-tree-elbow{background-image:url(images/tree/elbow.gif)}.x-tree-lines .x-tree-elbow-end{background-image:url(images/tree/elbow-end.gif)}.x-tree-lines .x-tree-elbow-plus{background-image:url(images/tree/elbow-plus.gif)}.x-tree-lines .x-tree-elbow-end-plus{background-image:url(images/tree/elbow-end-plus.gif)}.x-tree-lines .x-grid-tree-node-expanded .x-tree-elbow-plus{background-image:url(images/tree/elbow-minus.gif)}.x-tree-lines .x-grid-tree-node-expanded .x-tree-elbow-end-plus{background-image:url(images/tree/elbow-end-minus.gif)}.x-tree-lines .x-tree-elbow-line{background-image:url(images/tree/elbow-line.gif)}.x-tree-no-row-lines .x-tree-expander{background-image:url(images/tree/elbow-plus-nl.gif)}.x-tree-no-row-lines .x-grid-tree-node-expanded .x-tree-expander{background-image:url(images/tree/elbow-minus-nl.gif)}.x-tree-icon{width:16px;height:20px}.x-tree-elbow-img{width:16px;height:20px;margin-right:0}.x-tree-icon,.x-tree-elbow-img,.x-tree-checkbox{margin-top:-3px;margin-bottom:-4px}.x-tree-icon-leaf{background-image:url(images/tree/leaf.gif)}.x-tree-icon-parent{background-image:url(images/tree/folder.gif)}.x-grid-tree-node-expanded .x-tree-icon-parent{background-image:url(images/tree/folder-open.gif)}.x-tree-checkbox{margin-right:3px;top:4px;width:13px;height:13px;background-image:url(images/form/checkbox.gif)}.x-tree-checkbox-checked{background-position:0 -13px}.x-grid-tree-loading .x-tree-icon{background-image:url(images/tree/loading.gif)}.x-grid-cell-inner-treecolumn{font-size:1px;line-height:0}.x-tree-node-text{font-size:11px;line-height:13px;padding-left:3px}.x-grid-cell-inner-treecolumn{padding:3px 6px 4px 0}.x-tree-drop-ok-append .x-dd-drop-icon{background-image:url(images/tree/drop-append.gif)}.x-tree-drop-ok-above .x-dd-drop-icon{background-image:url(images/tree/drop-above.gif)}.x-tree-drop-ok-below .x-dd-drop-icon{background-image:url(images/tree/drop-below.gif)}.x-tree-drop-ok-between .x-dd-drop-icon{background-image:url(images/tree/drop-between.gif)}.x-tree-ddindicator{height:1px;border-width:1px 0 0;border-style:dotted;border-color:green}.x-box-tl{background:transparent no-repeat 0 0;zoom:1}.x-box-tc{height:8px;background:transparent repeat-x 0 0;overflow:hidden}.x-box-tr{background:transparent no-repeat right -8px}.x-box-ml{background:transparent repeat-y 0;padding-left:4px;overflow:hidden;zoom:1}.x-box-mc{background:repeat-x 0 -16px;padding:4px 10px}.x-box-mc h3{margin:0 0 4px 0;zoom:1}.x-box-mr{background:transparent repeat-y right;padding-right:4px;overflow:hidden}.x-box-bl{background:transparent no-repeat 0 -16px;zoom:1}.x-box-bc{background:transparent repeat-x 0 -8px;height:8px;overflow:hidden}.x-box-br{background:transparent no-repeat right -24px}.x-box-tl,.x-box-bl{padding-left:8px;overflow:hidden}.x-box-tr,.x-box-br{padding-right:8px;overflow:hidden}.x-box-tl{background-image:url(images/box/corners.gif)}.x-box-tc{background-image:url(images/box/tb.gif)}.x-box-tr{background-image:url(images/box/corners.gif)}.x-box-ml{background-image:url(images/box/l.gif)}.x-box-mc{background-color:#eee;background-image:url(images/box/tb.gif);font-family:"Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif;color:#393939;font-size:15px}.x-box-mc h3{font-size:18px;font-weight:bold}.x-box-mr{background-image:url(images/box/r.gif)}.x-box-bl{background-image:url(images/box/corners.gif)}.x-box-bc{background-image:url(images/box/tb.gif)}.x-box-br{background-image:url(images/box/corners.gif)}.x-box-blue .x-box-bl,.x-box-blue .x-box-br,.x-box-blue .x-box-tl,.x-box-blue .x-box-tr{background-image:url(images/box/corners-blue.gif)}.x-box-blue .x-box-bc,.x-box-blue .x-box-mc,.x-box-blue .x-box-tc{background-image:url(images/box/tb-blue.gif)}.x-box-blue .x-box-mc{background-color:#c3daf9}.x-box-blue .x-box-mc h3{color:#17385b}.x-box-blue .x-box-ml{background-image:url(images/box/l-blue.gif)}.x-box-blue .x-box-mr{background-image:url(images/box/r-blue.gif)}.x-message-box .x-msg-box-wait{background-image:url(images/shared/blue-loading.gif)}.x-form-trigger{height:22px}.x-content-box .x-form-trigger{height:21px}.x-field-toolbar .x-form-trigger{height:20px}.x-content-box .x-field-toolbar .x-form-trigger{height:19px}.x-content-box div.x-form-spinner-up,.x-content-box div.x-form-spinner-down{height:10px}.x-content-box .x-toolbar-item div.x-form-spinner-up,.x-content-box .x-toolbar-item div.x-form-spinner-down{height:9px}.x-html-editor-wrap .x-toolbar{border-left-color:#b5b8c8;border-top-color:#b5b8c8;border-right-color:#b5b8c8}.x-html-editor-input{border:1px solid #b5b8c8;border-top-width:0}.x-column-header-trigger{background-color:#c5c5c5;background-image:url(images/grid/grid3-hd-btn.gif)}.x-content-box .x-grid-editor .x-form-trigger{height:19px}.x-grid-editor .x-form-spinner-up,.x-grid-editor .x-form-spinner-down{background-image:url(images/form/spinner-small.gif)}.x-content-box .x-grid-editor .x-form-spinner-up,.x-content-box .x-grid-editor .x-form-spinner-down{height:9px}.x-accordion-hd{border-width:1px 0!important;-webkit-box-shadow:inset 0 0 0 0 #d9e7f8;-moz-box-shadow:inset 0 0 0 0 #d9e7f8;box-shadow:inset 0 0 0 0 #d9e7f8}.x-accordion-hd-sibling-expanded{-webkit-box-shadow:inset 0 1px 0 0 #f3f7fb;-moz-box-shadow:inset 0 1px 0 0 #f3f7fb;box-shadow:inset 0 1px 0 0 #f3f7fb}.x-resizable-over .x-resizable-handle-east,.x-resizable-over .x-resizable-handle-west,.x-resizable-pinned .x-resizable-handle-east,.x-resizable-pinned .x-resizable-handle-west{background-position:left}.x-resizable-over .x-resizable-handle-south,.x-resizable-over .x-resizable-handle-north,.x-resizable-pinned .x-resizable-handle-south,.x-resizable-pinned .x-resizable-handle-north{background-position:top}.x-resizable-over .x-resizable-handle-southeast,.x-resizable-pinned .x-resizable-handle-southeast{background-position:top left}.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{background-position:bottom right}.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{background-position:bottom left}.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{background-position:top right}.x-ie6 .x-slider-horz,.x-ie6 .x-slider-horz .x-slider-end,.x-ie6 .x-slider-horz .x-slider-inner{background-image:url(images/slider/slider-bg.gif)}.x-ie6 .x-slider-horz .x-slider-thumb{background-image:url(images/slider/slider-thumb.gif)}.x-ie6 .x-slider-vert,.x-ie6 .x-slider-vert .x-slider-end,.x-ie6 .x-slider-vert .x-slider-inner{background-image:url(images/slider/slider-v-bg.gif)}.x-ie6 .x-slider-vert .x-slider-thumb{background-image:url(images/slider/slider-v-thumb.gif)}.x-tab-icon-el{top:-1px}.x-tab-noicon .x-tab-icon{display:none}.vendor-add {background:url('../../resources/themes/images/default/dd/drop-add.gif');}
|
js/amosoft/extjs/css/images/boundlist/trigger-arrow.png
ADDED
Binary file
|
js/amosoft/extjs/css/images/box/corners-blue.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/box/corners.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/box/l-blue.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/box/l.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/box/r-blue.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/box/r.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/box/tb-blue.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/box/tb.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/button/arrow.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/button/btn.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/button/group-cs.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/button/group-lr.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/button/group-tb.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/button/s-arrow-b-noline.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/button/s-arrow-b.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/button/s-arrow-bo.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/button/s-arrow-light.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/button/s-arrow-noline.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/button/s-arrow-o.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/button/s-arrow.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/datepicker/datepicker-footer-bg.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/datepicker/datepicker-footer-bg.png
ADDED
Binary file
|
js/amosoft/extjs/css/images/datepicker/datepicker-header-bg.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/datepicker/datepicker-header-bg.png
ADDED
Binary file
|
js/amosoft/extjs/css/images/dd/drop-add.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/dd/drop-no.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/dd/drop-yes.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/editor/tb-sprite.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/form/checkbox.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/form/clear-trigger.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/form/date-trigger.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/form/error-tip-corners.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/form/exclamation.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/form/radio.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/form/search-trigger.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/form/spinner-small.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/form/spinner.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/form/text-bg.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/form/trigger-square.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/form/trigger-tpl.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/form/trigger.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/arrow-left-white.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/arrow-right-white.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/cell-special-bg.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/cell-special-bg.png
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/cell-special-selected-bg.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/cell-special-selected-bg.png
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/checked.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/col-move-bottom.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/col-move-top.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/column-header-bg.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/column-header-bg.png
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/column-header-over-bg.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/column-header-over-bg.png
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/columns.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/dd-insert-arrow-left.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/dd-insert-arrow-left.png
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/dd-insert-arrow-right.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/dd-insert-arrow-right.png
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/dirty.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/done.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/drop-no.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/drop-yes.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/footer-bg.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/grid-blue-hd.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/grid-blue-split.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/grid-hrow.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/grid-loading.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/grid-split.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/grid-vista-hd.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/grid3-hd-btn.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/grid3-hrow-over.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/grid3-hrow.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/grid3-rowheader.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/group-by.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/group-collapse.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/group-expand-sprite.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/group-expand.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/hd-pop.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/hmenu-asc.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/hmenu-desc.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/hmenu-lock.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/hmenu-lock.png
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/hmenu-unlock.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/hmenu-unlock.png
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/invalid_line.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/loading.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/mso-hd.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/nowait.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/page-first-disabled.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/page-first.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/page-last-disabled.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/page-last.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/page-next-disabled.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/page-next.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/page-prev-disabled.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/page-prev.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/pick-button.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/property-cell-bg.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/property-cell-selected-bg.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/refresh-disabled.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/refresh.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/row-check-sprite.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/row-expand-sprite.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/row-over.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/row-sel.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/sort-hd.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/sort_asc.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/sort_desc.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/unchecked.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/grid/wait.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/layout/mini-bottom.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/layout/mini-left.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/layout/mini-right.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/layout/mini-top.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/menu/checked.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/menu/group-checked.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/menu/item-over.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/menu/menu-item-active-bg.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/menu/menu-item-active-corners.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/menu/menu-item-active-sides.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/menu/menu-parent.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/menu/menu.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/menu/unchecked.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/progress/progress-default-bg.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/shared/blue-loading.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/shared/calendar.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/shared/glass-bg.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/shared/hd-sprite.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/shared/icon-error.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/shared/icon-info.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/shared/icon-question.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/shared/icon-warning.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/shared/large-loading.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/shared/left-btn.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/shared/loading-balls.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/shared/right-btn.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/shared/shadow-c.png
ADDED
Binary file
|
js/amosoft/extjs/css/images/shared/shadow-lr.png
ADDED
Binary file
|
js/amosoft/extjs/css/images/shared/shadow.png
ADDED
Binary file
|
js/amosoft/extjs/css/images/shared/warning.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/sizer/e-handle-dark.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/sizer/e-handle.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/sizer/ne-handle-dark.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/sizer/ne-handle.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/sizer/nw-handle-dark.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/sizer/nw-handle.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/sizer/s-handle-dark.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/sizer/s-handle.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/sizer/se-handle-dark.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/sizer/se-handle.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/sizer/square.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/sizer/sw-handle-dark.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/sizer/sw-handle.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/slider/slider-bg.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/slider/slider-bg.png
ADDED
Binary file
|
js/amosoft/extjs/css/images/slider/slider-thumb.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/slider/slider-thumb.png
ADDED
Binary file
|
js/amosoft/extjs/css/images/slider/slider-v-bg.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/slider/slider-v-bg.png
ADDED
Binary file
|
js/amosoft/extjs/css/images/slider/slider-v-thumb.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/slider/slider-v-thumb.png
ADDED
Binary file
|
js/amosoft/extjs/css/images/tab-bar/scroll-left.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tab-bar/scroll-right.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tab-bar/tab-bar-default-bg.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tip/tip-corners.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tip/tip-sides.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/toolbar/more.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/toolbar/scroll-left.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/toolbar/scroll-right.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/toolbar/toolbar-default-bg.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tools/tool-sprite-tpl.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tools/tool-sprites.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tools/tools-sprites-trans.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/arrows.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/drop-above.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/drop-add.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/drop-append.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/drop-below.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/drop-between.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/drop-no.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/drop-over.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/drop-under.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/drop-yes.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/elbow-end-minus-nl.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/elbow-end-minus.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/elbow-end-plus-nl.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/elbow-end-plus.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/elbow-end.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/elbow-line.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/elbow-minus-nl.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/elbow-minus.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/elbow-plus-nl.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/elbow-plus.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/elbow.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/folder-open.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/folder.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/leaf.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/loading.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/tree/s.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/util/splitter/mini-bottom.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/util/splitter/mini-left.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/util/splitter/mini-right.gif
ADDED
Binary file
|
js/amosoft/extjs/css/images/util/splitter/mini-top.gif
ADDED
Binary file
|
js/amosoft/extjs/dnd_grid_to_grid.js
ADDED
@@ -0,0 +1,120 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
Ext.require([
|
2 |
+
'Ext.grid.*',
|
3 |
+
'Ext.data.*',
|
4 |
+
'Ext.dd.*'
|
5 |
+
]);
|
6 |
+
|
7 |
+
Ext.define('DataObject', {
|
8 |
+
extend: 'Ext.data.Model',
|
9 |
+
fields: ['name', 'column1', 'column2']
|
10 |
+
});
|
11 |
+
|
12 |
+
Ext.onReady(function(){
|
13 |
+
|
14 |
+
var myData = [
|
15 |
+
{ name : "Rec 0", column1 : "0", column2 : "0" },
|
16 |
+
{ name : "Rec 1", column1 : "1", column2 : "1" },
|
17 |
+
{ name : "Rec 2", column1 : "2", column2 : "2" },
|
18 |
+
{ name : "Rec 3", column1 : "3", column2 : "3" },
|
19 |
+
{ name : "Rec 4", column1 : "4", column2 : "4" },
|
20 |
+
{ name : "Rec 5", column1 : "5", column2 : "5" },
|
21 |
+
{ name : "Rec 6", column1 : "6", column2 : "6" },
|
22 |
+
{ name : "Rec 7", column1 : "7", column2 : "7" },
|
23 |
+
{ name : "Rec 8", column1 : "8", column2 : "8" },
|
24 |
+
{ name : "Rec 9", column1 : "9", column2 : "9" }
|
25 |
+
];
|
26 |
+
|
27 |
+
// create the data store
|
28 |
+
var firstGridStore = Ext.create('Ext.data.Store', {
|
29 |
+
model: 'DataObject',
|
30 |
+
data: myData
|
31 |
+
});
|
32 |
+
|
33 |
+
|
34 |
+
// Column Model shortcut array
|
35 |
+
var columns = [
|
36 |
+
{text: "Record Name", flex: 1, sortable: true, dataIndex: 'name'},
|
37 |
+
{text: "column1", width: 70, sortable: true, dataIndex: 'column1'},
|
38 |
+
{text: "column2", width: 70, sortable: true, dataIndex: 'column2'}
|
39 |
+
];
|
40 |
+
|
41 |
+
// declare the source Grid
|
42 |
+
var firstGrid = Ext.create('Ext.grid.Panel', {
|
43 |
+
viewConfig: {
|
44 |
+
plugins: {
|
45 |
+
ptype: 'gridviewdragdrop',
|
46 |
+
dragGroup: 'firstGridDDGroup',
|
47 |
+
dropGroup: 'secondGridDDGroup'
|
48 |
+
},
|
49 |
+
listeners: {
|
50 |
+
drop: function(node, data, dropRec, dropPosition) {
|
51 |
+
var dropOn = dropRec ? ' ' + dropPosition + ' ' + dropRec.get('name') : ' on empty view';
|
52 |
+
Ext.example.msg("Drag from right to left", 'Dropped ' + data.records[0].get('name') + dropOn);
|
53 |
+
}
|
54 |
+
}
|
55 |
+
},
|
56 |
+
store : firstGridStore,
|
57 |
+
columns : columns,
|
58 |
+
stripeRows : true,
|
59 |
+
title : 'First Grid',
|
60 |
+
margins : '0 2 0 0'
|
61 |
+
});
|
62 |
+
|
63 |
+
var secondGridStore = Ext.create('Ext.data.Store', {
|
64 |
+
model: 'DataObject'
|
65 |
+
});
|
66 |
+
|
67 |
+
// create the destination Grid
|
68 |
+
var secondGrid = Ext.create('Ext.grid.Panel', {
|
69 |
+
viewConfig: {
|
70 |
+
plugins: {
|
71 |
+
ptype: 'gridviewdragdrop',
|
72 |
+
dragGroup: 'secondGridDDGroup',
|
73 |
+
dropGroup: 'firstGridDDGroup'
|
74 |
+
},
|
75 |
+
listeners: {
|
76 |
+
drop: function(node, data, dropRec, dropPosition) {
|
77 |
+
var dropOn = dropRec ? ' ' + dropPosition + ' ' + dropRec.get('name') : ' on empty view';
|
78 |
+
Ext.example.msg("Drag from left to right", 'Dropped ' + data.records[0].get('name') + dropOn);
|
79 |
+
}
|
80 |
+
}
|
81 |
+
},
|
82 |
+
store : secondGridStore,
|
83 |
+
columns : columns,
|
84 |
+
stripeRows : true,
|
85 |
+
title : 'Second Grid',
|
86 |
+
margins : '0 0 0 3'
|
87 |
+
});
|
88 |
+
|
89 |
+
//Simple 'border layout' panel to house both grids
|
90 |
+
var displayPanel = Ext.create('Ext.Panel', {
|
91 |
+
width : 650,
|
92 |
+
height : 300,
|
93 |
+
layout : {
|
94 |
+
type: 'hbox',
|
95 |
+
align: 'stretch',
|
96 |
+
padding: 5
|
97 |
+
},
|
98 |
+
renderTo : 'panel',
|
99 |
+
defaults : { flex : 1 }, //auto stretch
|
100 |
+
items : [
|
101 |
+
firstGrid,
|
102 |
+
secondGrid
|
103 |
+
],
|
104 |
+
dockedItems: {
|
105 |
+
xtype: 'toolbar',
|
106 |
+
dock: 'bottom',
|
107 |
+
items: ['->', // Fill
|
108 |
+
{
|
109 |
+
text: 'Reset both grids',
|
110 |
+
handler: function(){
|
111 |
+
//refresh source grid
|
112 |
+
firstGridStore.loadData(myData);
|
113 |
+
|
114 |
+
//purge destination grid
|
115 |
+
secondGridStore.removeAll();
|
116 |
+
}
|
117 |
+
}]
|
118 |
+
}
|
119 |
+
});
|
120 |
+
});
|
js/amosoft/extjs/examples.js
ADDED
@@ -0,0 +1,110 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
Ext.example = function(){
|
2 |
+
var msgCt;
|
3 |
+
|
4 |
+
function createBox(t, s){
|
5 |
+
// return ['<div class="msg">',
|
6 |
+
// '<div class="x-box-tl"><div class="x-box-tr"><div class="x-box-tc"></div></div></div>',
|
7 |
+
// '<div class="x-box-ml"><div class="x-box-mr"><div class="x-box-mc"><h3>', t, '</h3>', s, '</div></div></div>',
|
8 |
+
// '<div class="x-box-bl"><div class="x-box-br"><div class="x-box-bc"></div></div></div>',
|
9 |
+
// '</div>'].join('');
|
10 |
+
return '<div class="msg"><h3>' + t + '</h3><p>' + s + '</p></div>';
|
11 |
+
}
|
12 |
+
return {
|
13 |
+
msg : function(title, format){
|
14 |
+
if(!msgCt){
|
15 |
+
msgCt = Ext.core.DomHelper.insertFirst(document.body, {id:'msg-div'}, true);
|
16 |
+
}
|
17 |
+
var s = Ext.String.format.apply(String, Array.prototype.slice.call(arguments, 1));
|
18 |
+
var m = Ext.core.DomHelper.append(msgCt, createBox(title, s), true);
|
19 |
+
m.hide();
|
20 |
+
m.slideIn('t').ghost("t", { delay: 1000, remove: true});
|
21 |
+
},
|
22 |
+
|
23 |
+
init : function(){
|
24 |
+
// var t = Ext.get('exttheme');
|
25 |
+
// if(!t){ // run locally?
|
26 |
+
// return;
|
27 |
+
// }
|
28 |
+
// var theme = Cookies.get('exttheme') || 'aero';
|
29 |
+
// if(theme){
|
30 |
+
// t.dom.value = theme;
|
31 |
+
// Ext.getBody().addClass('x-'+theme);
|
32 |
+
// }
|
33 |
+
// t.on('change', function(){
|
34 |
+
// Cookies.set('exttheme', t.getValue());
|
35 |
+
// setTimeout(function(){
|
36 |
+
// window.location.reload();
|
37 |
+
// }, 250);
|
38 |
+
// });
|
39 |
+
//
|
40 |
+
// var lb = Ext.get('lib-bar');
|
41 |
+
// if(lb){
|
42 |
+
// lb.show();
|
43 |
+
// }
|
44 |
+
}
|
45 |
+
};
|
46 |
+
}();
|
47 |
+
|
48 |
+
Ext.example.shortBogusMarkup = '<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed metus nibh, '+
|
49 |
+
'sodales a, porta at, vulputate eget, dui. Pellentesque ut nisl. Maecenas tortor turpis, interdum non, sodales '+
|
50 |
+
'non, iaculis ac, lacus. Vestibulum auctor, tortor quis iaculis malesuada, libero lectus bibendum purus, sit amet '+
|
51 |
+
'tincidunt quam turpis vel lacus. In pellentesque nisl non sem. Suspendisse nunc sem, pretium eget, cursus a, fringilla.</p>';
|
52 |
+
|
53 |
+
Ext.example.bogusMarkup = '<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed metus nibh, sodales a, '+
|
54 |
+
'porta at, vulputate eget, dui. Pellentesque ut nisl. Maecenas tortor turpis, interdum non, sodales non, iaculis ac, '+
|
55 |
+
'lacus. Vestibulum auctor, tortor quis iaculis malesuada, libero lectus bibendum purus, sit amet tincidunt quam turpis '+
|
56 |
+
'vel lacus. In pellentesque nisl non sem. Suspendisse nunc sem, pretium eget, cursus a, fringilla vel, urna.<br/><br/>'+
|
57 |
+
'Aliquam commodo ullamcorper erat. Nullam vel justo in neque porttitor laoreet. Aenean lacus dui, consequat eu, adipiscing '+
|
58 |
+
'eget, nonummy non, nisi. Morbi nunc est, dignissim non, ornare sed, luctus eu, massa. Vivamus eget quam. Vivamus tincidunt '+
|
59 |
+
'diam nec urna. Curabitur velit. Lorem ipsum dolor sit amet.</p>';
|
60 |
+
|
61 |
+
//Ext.onReady(Ext.example.init, Ext.example);
|
62 |
+
|
63 |
+
|
64 |
+
// old school cookie functions
|
65 |
+
var Cookies = {};
|
66 |
+
Cookies.set = function(name, value){
|
67 |
+
var argv = arguments;
|
68 |
+
var argc = arguments.length;
|
69 |
+
var expires = (argc > 2) ? argv[2] : null;
|
70 |
+
var path = (argc > 3) ? argv[3] : '/';
|
71 |
+
var domain = (argc > 4) ? argv[4] : null;
|
72 |
+
var secure = (argc > 5) ? argv[5] : false;
|
73 |
+
document.cookie = name + "=" + escape (value) +
|
74 |
+
((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
|
75 |
+
((path == null) ? "" : ("; path=" + path)) +
|
76 |
+
((domain == null) ? "" : ("; domain=" + domain)) +
|
77 |
+
((secure == true) ? "; secure" : "");
|
78 |
+
};
|
79 |
+
|
80 |
+
Cookies.get = function(name){
|
81 |
+
var arg = name + "=";
|
82 |
+
var alen = arg.length;
|
83 |
+
var clen = document.cookie.length;
|
84 |
+
var i = 0;
|
85 |
+
var j = 0;
|
86 |
+
while(i < clen){
|
87 |
+
j = i + alen;
|
88 |
+
if (document.cookie.substring(i, j) == arg)
|
89 |
+
return Cookies.getCookieVal(j);
|
90 |
+
i = document.cookie.indexOf(" ", i) + 1;
|
91 |
+
if(i == 0)
|
92 |
+
break;
|
93 |
+
}
|
94 |
+
return null;
|
95 |
+
};
|
96 |
+
|
97 |
+
Cookies.clear = function(name) {
|
98 |
+
if(Cookies.get(name)){
|
99 |
+
document.cookie = name + "=" +
|
100 |
+
"; expires=Thu, 01-Jan-70 00:00:01 GMT";
|
101 |
+
}
|
102 |
+
};
|
103 |
+
|
104 |
+
Cookies.getCookieVal = function(offset){
|
105 |
+
var endstr = document.cookie.indexOf(";", offset);
|
106 |
+
if(endstr == -1){
|
107 |
+
endstr = document.cookie.length;
|
108 |
+
}
|
109 |
+
return unescape(document.cookie.substring(offset, endstr));
|
110 |
+
};
|
js/amosoft/extjs/ext-all.js
ADDED
@@ -0,0 +1,21 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
/*
|
2 |
+
This file is part of Ext JS 4.2
|
3 |
+
|
4 |
+
Copyright (c) 2011-2013 Sencha Inc
|
5 |
+
|
6 |
+
Contact: http://www.sencha.com/contact
|
7 |
+
|
8 |
+
GNU General Public License Usage
|
9 |
+
This file may be used under the terms of the GNU General Public License version 3.0 as
|
10 |
+
published by the Free Software Foundation and appearing in the file LICENSE included in the
|
11 |
+
packaging of this file.
|
12 |
+
|
13 |
+
Please review the following information to ensure the GNU General Public License version 3.0
|
14 |
+
requirements will be met: http://www.gnu.org/copyleft/gpl.html.
|
15 |
+
|
16 |
+
If you are unsure which license is appropriate for your use, please contact the sales department
|
17 |
+
at http://www.sencha.com/contact.
|
18 |
+
|
19 |
+
Build date: 2013-05-16 14:36:50 (f9be68accb407158ba2b1be2c226a6ce1f649314)
|
20 |
+
*/
|
21 |
+
var Ext=Ext||{};if(!Ext.Direct){Ext.Direct={}}if(!Ext.Toolbar){Ext.Toolbar={}}if(!Ext.app){Ext.app={}}if(!Ext.app.domain){Ext.app.domain={}}if(!Ext.button){Ext.button={}}if(!Ext.chart){Ext.chart={}}if(!Ext.chart.axis){Ext.chart.axis={}}if(!Ext.chart.series){Ext.chart.series={}}if(!Ext.chart.theme){Ext.chart.theme={}}if(!Ext.container){Ext.container={}}if(!Ext.core){Ext.core={}}if(!Ext.data){Ext.data={}}if(!Ext.data.association){Ext.data.association={}}if(!Ext.data.flash){Ext.data.flash={}}if(!Ext.data.proxy){Ext.data.proxy={}}if(!Ext.data.reader){Ext.data.reader={}}if(!Ext.data.writer){Ext.data.writer={}}if(!Ext.dd){Ext.dd={}}if(!Ext.direct){Ext.direct={}}if(!Ext.dom){Ext.dom={}}if(!Ext.draw){Ext.draw={}}if(!Ext.draw.engine){Ext.draw.engine={}}if(!Ext.flash){Ext.flash={}}if(!Ext.form){Ext.form={}}if(!Ext.form.Action){Ext.form.Action={}}if(!Ext.form.action){Ext.form.action={}}if(!Ext.form.field){Ext.form.field={}}if(!Ext.fx){Ext.fx={}}if(!Ext.fx.target){Ext.fx.target={}}if(!Ext.grid){Ext.grid={}}if(!Ext.grid.column){Ext.grid.column={}}if(!Ext.grid.feature){Ext.grid.feature={}}if(!Ext.grid.header){Ext.grid.header={}}if(!Ext.grid.locking){Ext.grid.locking={}}if(!Ext.grid.plugin){Ext.grid.plugin={}}if(!Ext.grid.property){Ext.grid.property={}}if(!Ext.layout){Ext.layout={}}if(!Ext.layout.boxOverflow){Ext.layout.boxOverflow={}}if(!Ext.layout.component){Ext.layout.component={}}if(!Ext.layout.component.field){Ext.layout.component.field={}}if(!Ext.layout.container){Ext.layout.container={}}if(!Ext.layout.container.border){Ext.layout.container.border={}}if(!Ext.layout.container.boxOverflow){Ext.layout.container.boxOverflow={}}if(!Ext.list){Ext.list={}}if(!Ext.menu){Ext.menu={}}if(!Ext.panel){Ext.panel={}}if(!Ext.perf){Ext.perf={}}if(!Ext.picker){Ext.picker={}}if(!Ext.resizer){Ext.resizer={}}if(!Ext.rtl){Ext.rtl={}}if(!Ext.rtl.button){Ext.rtl.button={}}if(!Ext.rtl.dd){Ext.rtl.dd={}}if(!Ext.rtl.dom){Ext.rtl.dom={}}if(!Ext.rtl.form){Ext.rtl.form={}}if(!Ext.rtl.form.field){Ext.rtl.form.field={}}if(!Ext.rtl.grid){Ext.rtl.grid={}}if(!Ext.rtl.grid.column){Ext.rtl.grid.column={}}if(!Ext.rtl.grid.plugin){Ext.rtl.grid.plugin={}}if(!Ext.rtl.layout){Ext.rtl.layout={}}if(!Ext.rtl.layout.component){Ext.rtl.layout.component={}}if(!Ext.rtl.layout.component.field){Ext.rtl.layout.component.field={}}if(!Ext.rtl.layout.container){Ext.rtl.layout.container={}}if(!Ext.rtl.layout.container.boxOverflow){Ext.rtl.layout.container.boxOverflow={}}if(!Ext.rtl.panel){Ext.rtl.panel={}}if(!Ext.rtl.resizer){Ext.rtl.resizer={}}if(!Ext.rtl.selection){Ext.rtl.selection={}}if(!Ext.rtl.slider){Ext.rtl.slider={}}if(!Ext.rtl.tab){Ext.rtl.tab={}}if(!Ext.rtl.tip){Ext.rtl.tip={}}if(!Ext.rtl.tree){Ext.rtl.tree={}}if(!Ext.rtl.util){Ext.rtl.util={}}if(!Ext.rtl.view){Ext.rtl.view={}}if(!Ext.selection){Ext.selection={}}if(!Ext.slider){Ext.slider={}}if(!Ext.state){Ext.state={}}if(!Ext.tab){Ext.tab={}}if(!Ext.tip){Ext.tip={}}if(!Ext.toolbar){Ext.toolbar={}}if(!Ext.tree){Ext.tree={}}if(!Ext.tree.plugin){Ext.tree.plugin={}}if(!Ext.util){Ext.util={}}if(!Ext.ux){Ext.ux={}}if(!Ext.ux.form){Ext.ux.form={}}if(!Ext.view){Ext.view={}}if(!Ext.window){Ext.window={}}(function(j){var l=[],m=["constructor","toString","valueOf","toLocaleString"],k={},p={},b=0,h,c,o,g,a=function(){var r,q;c=Ext.Base;o=Ext.ClassManager;for(r=m.length;r-->0;){q=(1<<r);p[k[q]=m[r]]=q}for(r in p){b|=p[r]}b=~b;Function.prototype.$isFunction=1;g=Ext.Class.getPreprocessor("config").fn;for(h in c){if(c.hasOwnProperty(h)){l.push(h)}}j.derive=d;return d.apply(this,arguments)},e=function(y,u,x){var r=x.enumerableMembers,v=y.prototype,t,w,s,q;if(!u){return}for(t in u){q=u[t];if(q&&q.$isFunction&&!q.$isClass&&q!==Ext.emptyFn&&q!==Ext.identityFn){v[t]=w=q;w.$owner=y;w.$name=t}else{v[t]=q}}for(s=1;r;s<<=1){if(r&s){r&=~s;t=k[s];v[t]=w=u[t];w.$owner=y;w.$name=t}}},n=function(u){var q=function t(){return u.apply(this,arguments)||null},s,r;q.prototype=Ext.Object.chain(u.prototype);for(s=l.length;s-->0;){r=l[s];q[r]=c[r]}return q},d=function(v,y,R,q,x,F,w,O,t,H,B){var r=function A(){return this.constructor.apply(this,arguments)||null},Q=r,s={enumerableMembers:q&b,onCreated:B,onBeforeCreated:e,aliases:O},E=R.alternateClassName||[],M=Ext.global,I,L,N,D,K,U,T,u,J,z,P,G,C,S;for(N=l.length;N-->0;){T=l[N];r[T]=c[T]}if(R.$isFunction){R=R(r)}s.data=R;z=R.statics,R.$className=v;if(R.$className){r.$className=R.$className}r.extend(y);J=r.prototype;r.xtype=R.xtype=x[0];if(x){J.xtypes=x}J.xtypesChain=F;J.xtypesMap=w;R.alias=O;Q.triggerExtended(r,R,s);if(R.onClassExtended){r.onExtended(R.onClassExtended,r);delete R.onClassExtended}if(z){for(P in z){if(z.hasOwnProperty(P)){S=z[P];if(S&&S.$isFunction&&!S.$isClass&&S!==Ext.emptyFn&&S!==Ext.identityFn){r[P]=C=S;C.$owner=r;C.$name=P}r[P]=S}}}delete R.statics;if(R.inheritableStatics){r.addInheritableStatics(R.inheritableStatics)}if(J.onClassExtended){Q.onExtended(J.onClassExtended,Q);delete J.onClassExtended}if(R.config){g(r,R)}s.onBeforeCreated(r,s.data,s);for(N=0,K=t&&t.length;N<K;++N){r.mixin.apply(r,t[N])}for(N=0,K=O.length;N<K;N++){I=O[N];o.setAlias(r,I)}if(R.singleton){Q=new r()}if(!(E instanceof Array)){E=[E]}for(N=0,D=E.length;N<D;N++){L=E[N];o.classes[L]=Q;G=o.getName(Q);u=o.maps.nameToAlternates;if(G&&G!==L){o.maps.alternateToName[L]=G;E=u[G]||(u[G]=[]);E.push(L)}}for(N=0,K=H.length;N<K;N+=2){U=H[N];if(!U){U=M}U[H[N+1]]=Q}o.classes[v]=Q;G=o.getName(Q);u=o.maps.nameToAlternates;if(G&&G!==v){o.maps.alternateToName[v]=G;E=u[G]||(u[G]=[]);E.push(v)}delete J.alternateClassName;if(s.onCreated){s.onCreated.call(Q,Q)}if(v){o.triggerCreated(v)}return Q};j.derive=a}(Ext.cmd={}));var Ext=Ext||{};Ext._startTime=new Date().getTime();(function(){var a=this,d=Object.prototype,b=d.toString,l=true,m={toString:1},g=function(){},k=function(){var n=k.caller.caller;return n.$owner.prototype[n.$name].apply(this,arguments)},e,j=/\S/,h,c=/\[object\s*(?:Array|Arguments|\w*Collection|\w*List|HTML\s+document\.all\s+class)\]/;Function.prototype.$extIsFunction=true;Ext.global=a;for(e in m){l=null}if(l){l=["hasOwnProperty","valueOf","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","constructor"]}Ext.enumerables=l;Ext.apply=function(q,p,s){if(s){Ext.apply(q,s)}if(q&&p&&typeof p==="object"){var r,o,n;for(r in p){q[r]=p[r]}if(l){for(o=l.length;o--;){n=l[o];if(p.hasOwnProperty(n)){q[n]=p[n]}}}}return q};Ext.buildSettings=Ext.apply({baseCSSPrefix:"x-"},Ext.buildSettings||{});Ext.apply(Ext,{name:Ext.sandboxName||"Ext",emptyFn:g,identityFn:function(n){return n},emptyString:new String(),baseCSSPrefix:Ext.buildSettings.baseCSSPrefix,applyIf:function(o,n){var p;if(o){for(p in n){if(o[p]===undefined){o[p]=n[p]}}}return o},iterate:function(n,p,o){if(Ext.isEmpty(n)){return}if(o===undefined){o=n}if(Ext.isIterable(n)){Ext.Array.each.call(Ext.Array,n,p,o)}else{Ext.Object.each.call(Ext.Object,n,p,o)}}});Ext.apply(Ext,{extend:(function(){var n=d.constructor,o=function(q){for(var p in q){if(!q.hasOwnProperty(p)){continue}this[p]=q[p]}};return function(p,u,s){if(Ext.isObject(u)){s=u;u=p;p=s.constructor!==n?s.constructor:function(){u.apply(this,arguments)}}var r=function(){},q,t=u.prototype;r.prototype=t;q=p.prototype=new r();q.constructor=p;p.superclass=t;if(t.constructor===n){t.constructor=u}p.override=function(v){Ext.override(p,v)};q.override=o;q.proto=q;p.override(s);p.extend=function(v){return Ext.extend(p,v)};return p}}()),override:function(q,r){if(q.$isClass){q.override(r)}else{if(typeof q=="function"){Ext.apply(q.prototype,r)}else{var n=q.self,o,p;if(n&&n.$isClass){for(o in r){if(r.hasOwnProperty(o)){p=r[o];if(typeof p=="function"){p.$name=o;p.$owner=n;p.$previous=q.hasOwnProperty(o)?q[o]:k}q[o]=p}}}else{Ext.apply(q,r)}}}return q}});Ext.apply(Ext,{valueFrom:function(p,n,o){return Ext.isEmpty(p,o)?n:p},typeOf:function(o){var n,p;if(o===null){return"null"}n=typeof o;if(n==="undefined"||n==="string"||n==="number"||n==="boolean"){return n}p=b.call(o);switch(p){case"[object Array]":return"array";case"[object Date]":return"date";case"[object Boolean]":return"boolean";case"[object Number]":return"number";case"[object RegExp]":return"regexp"}if(n==="function"){return"function"}if(n==="object"){if(o.nodeType!==undefined){if(o.nodeType===3){return(j).test(o.nodeValue)?"textnode":"whitespace"}else{return"element"}}return"object"}},coerce:function(r,q){var p=Ext.typeOf(r),o=Ext.typeOf(q),n=typeof r==="string";if(p!==o){switch(o){case"string":return String(r);case"number":return Number(r);case"boolean":return n&&(!r||r==="false")?false:Boolean(r);case"null":return n&&(!r||r==="null")?null:r;case"undefined":return n&&(!r||r==="undefined")?undefined:r;case"date":return n&&isNaN(r)?Ext.Date.parse(r,Ext.Date.defaultFormat):Date(Number(r))}}return r},isEmpty:function(n,o){return(n===null)||(n===undefined)||(!o?n==="":false)||(Ext.isArray(n)&&n.length===0)},isArray:("isArray" in Array)?Array.isArray:function(n){return b.call(n)==="[object Array]"},isDate:function(n){return b.call(n)==="[object Date]"},isObject:(b.call(null)==="[object Object]")?function(n){return n!==null&&n!==undefined&&b.call(n)==="[object Object]"&&n.ownerDocument===undefined}:function(n){return b.call(n)==="[object Object]"},isSimpleObject:function(n){return n instanceof Object&&n.constructor===Object},isPrimitive:function(o){var n=typeof o;return n==="string"||n==="number"||n==="boolean"},isFunction:function(n){return !!(n&&n.$extIsFunction)},isNumber:function(n){return typeof n==="number"&&isFinite(n)},isNumeric:function(n){return !isNaN(parseFloat(n))&&isFinite(n)},isString:function(n){return typeof n==="string"},isBoolean:function(n){return typeof n==="boolean"},isElement:function(n){return n?n.nodeType===1:false},isTextNode:function(n){return n?n.nodeName==="#text":false},isDefined:function(n){return typeof n!=="undefined"},isIterable:function(n){if(!n||typeof n.length!=="number"||typeof n==="string"||n.$extIsFunction){return false}if(!n.propertyIsEnumerable){return !!n.item}if(n.hasOwnProperty("length")&&!n.propertyIsEnumerable("length")){return true}return c.test(b.call(n))}});Ext.apply(Ext,{clone:function(s){var r,q,o,n,t,p;if(s===null||s===undefined){return s}if(s.nodeType&&s.cloneNode){return s.cloneNode(true)}r=b.call(s);if(r==="[object Date]"){return new Date(s.getTime())}if(r==="[object Array]"){q=s.length;t=[];while(q--){t[q]=Ext.clone(s[q])}}else{if(r==="[object Object]"&&s.constructor===Object){t={};for(p in s){t[p]=Ext.clone(s[p])}if(l){for(o=l.length;o--;){n=l[o];if(s.hasOwnProperty(n)){t[n]=s[n]}}}}}return t||s},getUniqueGlobalNamespace:function(){var o=this.uniqueGlobalNamespace,n;if(o===undefined){n=0;do{o="ExtBox"+(++n)}while(Ext.global[o]!==undefined);Ext.global[o]=Ext;this.uniqueGlobalNamespace=o}return o},functionFactoryCache:{},cacheableFunctionFactory:function(){var s=this,p=Array.prototype.slice.call(arguments),o=s.functionFactoryCache,n,q,r;if(Ext.isSandboxed){r=p.length;if(r>0){r--;p[r]="var Ext=window."+Ext.name+";"+p[r]}}n=p.join("");q=o[n];if(!q){q=Function.prototype.constructor.apply(Function.prototype,p);o[n]=q}return q},functionFactory:function(){var p=this,n=Array.prototype.slice.call(arguments),o;if(Ext.isSandboxed){o=n.length;if(o>0){o--;n[o]="var Ext=window."+Ext.name+";"+n[o]}}return Function.prototype.constructor.apply(Function.prototype,n)},Logger:{verbose:g,log:g,info:g,warn:g,error:function(n){throw new Error(n)},deprecate:g}});Ext.type=Ext.typeOf;h=Ext.app;if(!h){h=Ext.app={}}Ext.apply(h,{namespaces:{},collectNamespaces:function(p){var n=Ext.app.namespaces,o;for(o in p){if(p.hasOwnProperty(o)){n[o]=true}}},addNamespaces:function(p){var q=Ext.app.namespaces,o,n;if(!Ext.isArray(p)){p=[p]}for(o=0,n=p.length;o<n;o++){q[p[o]]=true}},clearNamespaces:function(){Ext.app.namespaces={}},getNamespace:function(o){var q=Ext.app.namespaces,n="",p;for(p in q){if(q.hasOwnProperty(p)&&p.length>n.length&&(p+"."===o.substring(0,p.length+1))){n=p}}return n===""?undefined:n}})}());Ext.globalEval=Ext.global.execScript?function(a){execScript(a)}:function($$code){(function(){var Ext=this.Ext;eval($$code)}())};(function(){var a="4.2.1.883",b;Ext.Version=b=Ext.extend(Object,{constructor:function(c){var e,d;if(c instanceof b){return c}this.version=this.shortVersion=String(c).toLowerCase().replace(/_/g,".").replace(/[\-+]/g,"");d=this.version.search(/([^\d\.])/);if(d!==-1){this.release=this.version.substr(d,c.length);this.shortVersion=this.version.substr(0,d)}this.shortVersion=this.shortVersion.replace(/[^\d]/g,"");e=this.version.split(".");this.major=parseInt(e.shift()||0,10);this.minor=parseInt(e.shift()||0,10);this.patch=parseInt(e.shift()||0,10);this.build=parseInt(e.shift()||0,10);return this},toString:function(){return this.version},valueOf:function(){return this.version},getMajor:function(){return this.major||0},getMinor:function(){return this.minor||0},getPatch:function(){return this.patch||0},getBuild:function(){return this.build||0},getRelease:function(){return this.release||""},isGreaterThan:function(c){return b.compare(this.version,c)===1},isGreaterThanOrEqual:function(c){return b.compare(this.version,c)>=0},isLessThan:function(c){return b.compare(this.version,c)===-1},isLessThanOrEqual:function(c){return b.compare(this.version,c)<=0},equals:function(c){return b.compare(this.version,c)===0},match:function(c){c=String(c);return this.version.substr(0,c.length)===c},toArray:function(){return[this.getMajor(),this.getMinor(),this.getPatch(),this.getBuild(),this.getRelease()]},getShortVersion:function(){return this.shortVersion},gt:function(){return this.isGreaterThan.apply(this,arguments)},lt:function(){return this.isLessThan.apply(this,arguments)},gtEq:function(){return this.isGreaterThanOrEqual.apply(this,arguments)},ltEq:function(){return this.isLessThanOrEqual.apply(this,arguments)}});Ext.apply(b,{releaseValueMap:{dev:-6,alpha:-5,a:-5,beta:-4,b:-4,rc:-3,"#":-2,p:-1,pl:-1},getComponentValue:function(c){return !c?0:(isNaN(c)?this.releaseValueMap[c]||c:parseInt(c,10))},compare:function(h,g){var d,e,c;h=new b(h).toArray();g=new b(g).toArray();for(c=0;c<Math.max(h.length,g.length);c++){d=this.getComponentValue(h[c]);e=this.getComponentValue(g[c]);if(d<e){return -1}else{if(d>e){return 1}}}return 0}});Ext.apply(Ext,{versions:{},lastRegisteredVersion:null,setVersion:function(d,c){Ext.versions[d]=new b(c);Ext.lastRegisteredVersion=Ext.versions[d];return this},getVersion:function(c){if(c===undefined){return Ext.lastRegisteredVersion}return Ext.versions[c]},deprecate:function(c,e,g,d){if(b.compare(Ext.getVersion(c),e)<1){g.call(d)}}});Ext.setVersion("core",a)}());Ext.String=(function(){var k=/^[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]+|[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]+$/g,o=/('|\\)/g,j=/\{(\d+)\}/g,b=/([-.*+?\^${}()|\[\]\/\\])/g,p=/^\s+|\s+$/g,l=/\s+/,n=/(^[^a-z]*|[^\w])/gi,e,a,h,d,g=function(r,q){return e[q]},m=function(r,q){return(q in a)?a[q]:String.fromCharCode(parseInt(q.substr(2),10))},c=function(r,q){if(r===null||r===undefined||q===null||q===undefined){return false}return q.length<=r.length};return{insert:function(t,u,r){if(!t){return u}if(!u){return t}var q=t.length;if(!r&&r!==0){r=q}if(r<0){r*=-1;if(r>=q){r=0}else{r=q-r}}if(r===0){t=u+t}else{if(r>=t.length){t+=u}else{t=t.substr(0,r)+u+t.substr(r)}}return t},startsWith:function(t,u,r){var q=c(t,u);if(q){if(r){t=t.toLowerCase();u=u.toLowerCase()}q=t.lastIndexOf(u,0)===0}return q},endsWith:function(u,r,t){var q=c(u,r);if(q){if(t){u=u.toLowerCase();r=r.toLowerCase()}q=u.indexOf(r,u.length-r.length)!==-1}return q},createVarName:function(q){return q.replace(n,"")},htmlEncode:function(q){return(!q)?q:String(q).replace(h,g)},htmlDecode:function(q){return(!q)?q:String(q).replace(d,m)},addCharacterEntities:function(r){var q=[],u=[],s,t;for(s in r){t=r[s];a[s]=t;e[t]=s;q.push(t);u.push(s)}h=new RegExp("("+q.join("|")+")","g");d=new RegExp("("+u.join("|")+"|&#[0-9]{1,5};)","g")},resetCharacterEntities:function(){e={};a={};this.addCharacterEntities({"&":"&",">":">","<":"<",""":'"',"'":"'"})},urlAppend:function(r,q){if(!Ext.isEmpty(q)){return r+(r.indexOf("?")===-1?"?":"&")+q}return r},trim:function(q){return q.replace(k,"")},capitalize:function(q){return q.charAt(0).toUpperCase()+q.substr(1)},uncapitalize:function(q){return q.charAt(0).toLowerCase()+q.substr(1)},ellipsis:function(s,q,t){if(s&&s.length>q){if(t){var u=s.substr(0,q-2),r=Math.max(u.lastIndexOf(" "),u.lastIndexOf("."),u.lastIndexOf("!"),u.lastIndexOf("?"));if(r!==-1&&r>=(q-15)){return u.substr(0,r)+"..."}}return s.substr(0,q-3)+"..."}return s},escapeRegex:function(q){return q.replace(b,"\\$1")},escape:function(q){return q.replace(o,"\\$1")},toggle:function(r,s,q){return r===s?q:s},leftPad:function(r,s,t){var q=String(r);t=t||" ";while(q.length<s){q=t+q}return q},format:function(r){var q=Ext.Array.toArray(arguments,1);return r.replace(j,function(s,t){return q[t]})},repeat:function(u,t,r){if(t<1){t=0}for(var q=[],s=t;s--;){q.push(u)}return q.join(r||"")},splitWords:function(q){if(q&&typeof q=="string"){return q.replace(p,"").split(l)}return q||[]}}}());Ext.String.resetCharacterEntities();Ext.htmlEncode=Ext.String.htmlEncode;Ext.htmlDecode=Ext.String.htmlDecode;Ext.urlAppend=Ext.String.urlAppend;Ext.Number=new function(){var b=this,c=(0.9).toFixed()!=="1",a=Math;Ext.apply(this,{constrain:function(h,g,e){var d=parseFloat(h);return(d<g)?g:((d>e)?e:d)},snap:function(h,e,g,j){var d;if(h===undefined||h<g){return g||0}if(e){d=h%e;if(d!==0){h-=d;if(d*2>=e){h+=e}else{if(d*2<-e){h-=e}}}}return b.constrain(h,g,j)},snapInRange:function(h,d,g,j){var e;g=(g||0);if(h===undefined||h<g){return g}if(d&&(e=((h-g)%d))){h-=e;e*=2;if(e>=d){h+=d}}if(j!==undefined){if(h>(j=b.snapInRange(j,d,g))){h=j}}return h},toFixed:c?function(g,d){d=d||0;var e=a.pow(10,d);return(a.round(g*e)/e).toFixed(d)}:function(e,d){return e.toFixed(d)},from:function(e,d){if(isFinite(e)){e=parseFloat(e)}return !isNaN(e)?e:d},randomInt:function(e,d){return a.floor(a.random()*(d-e+1)+e)},correctFloat:function(d){return parseFloat(d.toPrecision(14))}});Ext.num=function(){return b.from.apply(this,arguments)}}();(function(){var g=Array.prototype,p=g.slice,r=(function(){var B=[],e,A=20;if(!B.splice){return false}while(A--){B.push("A")}B.splice(15,0,"F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F");e=B.length;B.splice(13,0,"XXX");if(e+1!=B.length){return false}return true}()),k="forEach" in g,v="map" in g,q="indexOf" in g,z="every" in g,c="some" in g,d="filter" in g,o=(function(){var e=[1,2,3,4,5].sort(function(){return 0});return e[0]===1&&e[1]===2&&e[2]===3&&e[3]===4&&e[4]===5}()),l=true,a,x,u,w;try{if(typeof document!=="undefined"){p.call(document.getElementsByTagName("body"))}}catch(t){l=false}function n(A,e){return(e<0)?Math.max(0,A.length+e):Math.min(A.length,e)}function y(H,G,A,K){var L=K?K.length:0,C=H.length,I=n(H,G),F,J,B,e,D,E;if(I===C){if(L){H.push.apply(H,K)}}else{F=Math.min(A,C-I);J=I+F;B=J+L-F;e=C-J;D=C-F;if(B<J){for(E=0;E<e;++E){H[B+E]=H[J+E]}}else{if(B>J){for(E=e;E--;){H[B+E]=H[J+E]}}}if(L&&I===D){H.length=D;H.push.apply(H,K)}else{H.length=D+L;for(E=0;E<L;++E){H[I+E]=K[E]}}}return H}function j(C,e,B,A){if(A&&A.length){if(e===0&&!B){C.unshift.apply(C,A)}else{if(e<C.length){C.splice.apply(C,[e,B].concat(A))}else{C.push.apply(C,A)}}}else{C.splice(e,B)}return C}function b(B,e,A){return y(B,e,A)}function s(B,e,A){B.splice(e,A);return B}function m(D,e,B){var C=n(D,e),A=D.slice(e,n(D,C+B));if(arguments.length<4){y(D,C,B)}else{y(D,C,B,p.call(arguments,3))}return A}function h(e){return e.splice.apply(e,p.call(arguments,1))}x=r?s:b;u=r?j:y;w=r?h:m;a=Ext.Array={each:function(E,C,B,e){E=a.from(E);var A,D=E.length;if(e!==true){for(A=0;A<D;A++){if(C.call(B||E[A],E[A],A,E)===false){return A}}}else{for(A=D-1;A>-1;A--){if(C.call(B||E[A],E[A],A,E)===false){return A}}}return true},forEach:k?function(B,A,e){B.forEach(A,e)}:function(D,B,A){var e=0,C=D.length;for(;e<C;e++){B.call(A,D[e],e,D)}},indexOf:q?function(B,e,A){return g.indexOf.call(B,e,A)}:function(D,B,C){var e,A=D.length;for(e=(C<0)?Math.max(0,A+C):C||0;e<A;e++){if(D[e]===B){return e}}return -1},contains:q?function(A,e){return g.indexOf.call(A,e)!==-1}:function(C,B){var e,A;for(e=0,A=C.length;e<A;e++){if(C[e]===B){return true}}return false},toArray:function(B,D,e){if(!B||!B.length){return[]}if(typeof B==="string"){B=B.split("")}if(l){return p.call(B,D||0,e||B.length)}var C=[],A;D=D||0;e=e?((e<0)?B.length+e:e):B.length;for(A=D;A<e;A++){C.push(B[A])}return C},pluck:function(E,e){var A=[],B,D,C;for(B=0,D=E.length;B<D;B++){C=E[B];A.push(C[e])}return A},map:v?function(B,A,e){return B.map(A,e)}:function(E,D,C){var B=[],A=0,e=E.length;for(;A<e;A++){B[A]=D.call(C,E[A],A,E)}return B},every:z?function(B,A,e){return B.every(A,e)}:function(D,B,A){var e=0,C=D.length;for(;e<C;++e){if(!B.call(A,D[e],e,D)){return false}}return true},some:c?function(B,A,e){return B.some(A,e)}:function(D,B,A){var e=0,C=D.length;for(;e<C;++e){if(B.call(A,D[e],e,D)){return true}}return false},equals:function(D,C){var A=D.length,e=C.length,B;if(D===C){return true}if(A!==e){return false}for(B=0;B<A;++B){if(D[B]!==C[B]){return false}}return true},clean:function(D){var A=[],e=0,C=D.length,B;for(;e<C;e++){B=D[e];if(!Ext.isEmpty(B)){A.push(B)}}return A},unique:function(D){var C=[],e=0,B=D.length,A;for(;e<B;e++){A=D[e];if(a.indexOf(C,A)===-1){C.push(A)}}return C},filter:d?function(B,A,e){return B.filter(A,e)}:function(E,C,B){var A=[],e=0,D=E.length;for(;e<D;e++){if(C.call(B,E[e],e,E)){A.push(E[e])}}return A},findBy:function(D,C,B){var A=0,e=D.length;for(;A<e;A++){if(C.call(B||D,D[A],A)){return D[A]}}return null},from:function(B,A){if(B===undefined||B===null){return[]}if(Ext.isArray(B)){return(A)?p.call(B):B}var e=typeof B;if(B&&B.length!==undefined&&e!=="string"&&(e!=="function"||!B.apply)){return a.toArray(B)}return[B]},remove:function(B,A){var e=a.indexOf(B,A);if(e!==-1){x(B,e,1)}return B},include:function(A,e){if(!a.contains(A,e)){A.push(e)}},clone:function(e){return p.call(e)},merge:function(){var e=p.call(arguments),C=[],A,B;for(A=0,B=e.length;A<B;A++){C=C.concat(e[A])}return a.unique(C)},intersect:function(){var e=[],B=p.call(arguments),M,K,G,J,N,C,A,I,L,D,H,F,E;if(!B.length){return e}M=B.length;for(H=N=0;H<M;H++){C=B[H];if(!J||C.length<J.length){J=C;N=H}}J=a.unique(J);x(B,N,1);A=J.length;M=B.length;for(H=0;H<A;H++){I=J[H];D=0;for(F=0;F<M;F++){K=B[F];G=K.length;for(E=0;E<G;E++){L=K[E];if(I===L){D++;break}}}if(D===M){e.push(I)}}return e},difference:function(A,e){var F=p.call(A),D=F.length,C,B,E;for(C=0,E=e.length;C<E;C++){for(B=0;B<D;B++){if(F[B]===e[C]){x(F,B,1);B--;D--}}}return F},slice:([1,2].slice(1,undefined).length?function(B,A,e){return p.call(B,A,e)}:function(B,A,e){if(typeof A==="undefined"){return p.call(B)}if(typeof e==="undefined"){return p.call(B,A)}return p.call(B,A,e)}),sort:o?function(A,e){if(e){return A.sort(e)}else{return A.sort()}}:function(G,F){var D=G.length,C=0,E,e,B,A;for(;C<D;C++){B=C;for(e=C+1;e<D;e++){if(F){E=F(G[e],G[B]);if(E<0){B=e}}else{if(G[e]<G[B]){B=e}}}if(B!==C){A=G[C];G[C]=G[B];G[B]=A}}return G},flatten:function(B){var A=[];function e(C){var E,F,D;for(E=0,F=C.length;E<F;E++){D=C[E];if(Ext.isArray(D)){e(D)}else{A.push(D)}}return A}return e(B)},min:function(E,D){var A=E[0],e,C,B;for(e=0,C=E.length;e<C;e++){B=E[e];if(D){if(D(A,B)===1){A=B}}else{if(B<A){A=B}}}return A},max:function(E,D){var e=E[0],A,C,B;for(A=0,C=E.length;A<C;A++){B=E[A];if(D){if(D(e,B)===-1){e=B}}else{if(B>e){e=B}}}return e},mean:function(e){return e.length>0?a.sum(e)/e.length:undefined},sum:function(D){var A=0,e,C,B;for(e=0,C=D.length;e<C;e++){B=D[e];A+=B}return A},toMap:function(D,e,B){var C={},A=D.length;if(!e){while(A--){C[D[A]]=A+1}}else{if(typeof e=="string"){while(A--){C[D[A][e]]=A+1}}else{while(A--){C[e.call(B,D[A])]=A+1}}}return C},toValueMap:function(D,e,B){var C={},A=D.length;if(!e){while(A--){C[D[A]]=D[A]}}else{if(typeof e=="string"){while(A--){C[D[A][e]]=D[A]}}else{while(A--){C[e.call(B,D[A])]=D[A]}}}return C},erase:x,insert:function(B,A,e){return u(B,A,0,e)},replace:u,splice:w,push:function(C){var e=arguments.length,B=1,A;if(C===undefined){C=[]}else{if(!Ext.isArray(C)){C=[C]}}for(;B<e;B++){A=arguments[B];Array.prototype.push[Ext.isIterable(A)?"apply":"call"](C,A)}return C}};Ext.each=a.each;a.union=a.merge;Ext.min=a.min;Ext.max=a.max;Ext.sum=a.sum;Ext.mean=a.mean;Ext.flatten=a.flatten;Ext.clean=a.clean;Ext.unique=a.unique;Ext.pluck=a.pluck;Ext.toArray=function(){return a.toArray.apply(a,arguments)}}());Ext.Function={flexSetter:function(a){return function(d,c){var e,g;if(d===null){return this}if(typeof d!=="string"){for(e in d){if(d.hasOwnProperty(e)){a.call(this,e,d[e])}}if(Ext.enumerables){for(g=Ext.enumerables.length;g--;){e=Ext.enumerables[g];if(d.hasOwnProperty(e)){a.call(this,e,d[e])}}}}else{a.call(this,d,c)}return this}},bind:function(d,c,b,a){if(arguments.length===2){return function(){return d.apply(c,arguments)}}var g=d,e=Array.prototype.slice;return function(){var h=b||arguments;if(a===true){h=e.call(arguments,0);h=h.concat(b)}else{if(typeof a=="number"){h=e.call(arguments,0);Ext.Array.insert(h,a,b)}}return g.apply(c||Ext.global,h)}},pass:function(c,a,b){if(!Ext.isArray(a)){if(Ext.isIterable(a)){a=Ext.Array.clone(a)}else{a=a!==undefined?[a]:[]}}return function(){var d=[].concat(a);d.push.apply(d,arguments);return c.apply(b||this,d)}},alias:function(b,a){return function(){return b[a].apply(b,arguments)}},clone:function(a){return function(){return a.apply(this,arguments)}},createInterceptor:function(d,c,b,a){var e=d;if(!Ext.isFunction(c)){return d}else{a=Ext.isDefined(a)?a:null;return function(){var h=this,g=arguments;c.target=h;c.method=d;return(c.apply(b||h||Ext.global,g)!==false)?d.apply(h||Ext.global,g):a}}},createDelayed:function(e,c,d,b,a){if(d||b){e=Ext.Function.bind(e,d,b,a)}return function(){var h=this,g=Array.prototype.slice.call(arguments);setTimeout(function(){e.apply(h,g)},c)}},defer:function(e,c,d,b,a){e=Ext.Function.bind(e,d,b,a);if(c>0){return setTimeout(Ext.supports.TimeoutActualLateness?function(){e()}:e,c)}e();return 0},createSequence:function(b,c,a){if(!c){return b}else{return function(){var d=b.apply(this,arguments);c.apply(a||this,arguments);return d}}},createBuffered:function(e,b,d,c){var a;return function(){var h=c||Array.prototype.slice.call(arguments,0),g=d||this;if(a){clearTimeout(a)}a=setTimeout(function(){e.apply(g,h)},b)}},createThrottled:function(e,b,d){var g,a,c,j,h=function(){e.apply(d||this,c);g=Ext.Date.now()};return function(){a=Ext.Date.now()-g;c=arguments;clearTimeout(j);if(!g||(a>=b)){h()}else{j=setTimeout(h,b-a)}}},interceptBefore:function(b,a,d,c){var e=b[a]||Ext.emptyFn;return(b[a]=function(){var g=d.apply(c||this,arguments);e.apply(this,arguments);return g})},interceptAfter:function(b,a,d,c){var e=b[a]||Ext.emptyFn;return(b[a]=function(){e.apply(this,arguments);return d.apply(c||this,arguments)})}};Ext.defer=Ext.Function.alias(Ext.Function,"defer");Ext.pass=Ext.Function.alias(Ext.Function,"pass");Ext.bind=Ext.Function.alias(Ext.Function,"bind");(function(){var a=function(){},b=Ext.Object={chain:Object.create||function(d){a.prototype=d;var c=new a();a.prototype=null;return c},toQueryObjects:function(e,k,d){var c=b.toQueryObjects,j=[],g,h;if(Ext.isArray(k)){for(g=0,h=k.length;g<h;g++){if(d){j=j.concat(c(e+"["+g+"]",k[g],true))}else{j.push({name:e,value:k[g]})}}}else{if(Ext.isObject(k)){for(g in k){if(k.hasOwnProperty(g)){if(d){j=j.concat(c(e+"["+g+"]",k[g],true))}else{j.push({name:e,value:k[g]})}}}}else{j.push({name:e,value:k})}}return j},toQueryString:function(g,d){var h=[],e=[],l,k,m,c,n;for(l in g){if(g.hasOwnProperty(l)){h=h.concat(b.toQueryObjects(l,g[l],d))}}for(k=0,m=h.length;k<m;k++){c=h[k];n=c.value;if(Ext.isEmpty(n)){n=""}else{if(Ext.isDate(n)){n=Ext.Date.toString(n)}}e.push(encodeURIComponent(c.name)+"="+encodeURIComponent(String(n)))}return e.join("&")},fromQueryString:function(d,r){var m=d.replace(/^\?/,"").split("&"),u={},s,k,w,n,q,g,o,p,c,h,t,l,v,e;for(q=0,g=m.length;q<g;q++){o=m[q];if(o.length>0){k=o.split("=");w=decodeURIComponent(k[0]);n=(k[1]!==undefined)?decodeURIComponent(k[1]):"";if(!r){if(u.hasOwnProperty(w)){if(!Ext.isArray(u[w])){u[w]=[u[w]]}u[w].push(n)}else{u[w]=n}}else{h=w.match(/(\[):?([^\]]*)\]/g);t=w.match(/^([^\[]+)/);w=t[0];l=[];if(h===null){u[w]=n;continue}for(p=0,c=h.length;p<c;p++){v=h[p];v=(v.length===2)?"":v.substring(1,v.length-1);l.push(v)}l.unshift(w);s=u;for(p=0,c=l.length;p<c;p++){v=l[p];if(p===c-1){if(Ext.isArray(s)&&v===""){s.push(n)}else{s[v]=n}}else{if(s[v]===undefined||typeof s[v]==="string"){e=l[p+1];s[v]=(Ext.isNumeric(e)||e==="")?[]:{}}s=s[v]}}}}}return u},each:function(c,e,d){for(var g in c){if(c.hasOwnProperty(g)){if(e.call(d||c,g,c[g],c)===false){return}}}},merge:function(k){var h=1,j=arguments.length,c=b.merge,e=Ext.clone,g,m,l,d;for(;h<j;h++){g=arguments[h];for(m in g){l=g[m];if(l&&l.constructor===Object){d=k[m];if(d&&d.constructor===Object){c(d,l)}else{k[m]=e(l)}}else{k[m]=l}}}return k},mergeIf:function(c){var h=1,j=arguments.length,e=Ext.clone,d,g,k;for(;h<j;h++){d=arguments[h];for(g in d){if(!(g in c)){k=d[g];if(k&&k.constructor===Object){c[g]=e(k)}else{c[g]=k}}}}return c},getKey:function(c,e){for(var d in c){if(c.hasOwnProperty(d)&&c[d]===e){return d}}return null},getValues:function(d){var c=[],e;for(e in d){if(d.hasOwnProperty(e)){c.push(d[e])}}return c},getKeys:(typeof Object.keys=="function")?function(c){if(!c){return[]}return Object.keys(c)}:function(c){var d=[],e;for(e in c){if(c.hasOwnProperty(e)){d.push(e)}}return d},getSize:function(c){var d=0,e;for(e in c){if(c.hasOwnProperty(e)){d++}}return d},isEmpty:function(c){for(var d in c){if(c.hasOwnProperty(d)){return false}}return true},equals:(function(){var c=function(g,e){var d;for(d in g){if(g.hasOwnProperty(d)){if(g[d]!==e[d]){return false}}}return true};return function(e,d){if(e===d){return true}if(e&&d){return c(e,d)&&c(d,e)}else{if(!e&&!d){return e===d}else{return false}}}})(),classify:function(g){var e=g,j=[],d={},c=function(){var l=0,m=j.length,n;for(;l<m;l++){n=j[l];this[n]=new d[n]()}},h,k;for(h in g){if(g.hasOwnProperty(h)){k=g[h];if(k&&k.constructor===Object){j.push(h);d[h]=b.classify(k)}}}c.prototype=e;return c}};Ext.merge=Ext.Object.merge;Ext.mergeIf=Ext.Object.mergeIf;Ext.urlEncode=function(){var c=Ext.Array.from(arguments),d="";if((typeof c[1]==="string")){d=c[1]+"&";c[1]=false}return d+b.toQueryString.apply(b,c)};Ext.urlDecode=function(){return b.fromQueryString.apply(b,arguments)}}());Ext.Date=new function(){var d=this,k=/(\\.)/g,a=/([gGhHisucUOPZ]|MS)/,e=/([djzmnYycU]|MS)/,j=/\\/gi,c=/\{(\d+)\}/g,g=new RegExp("\\/Date\\(([-+])?(\\d+)(?:[+-]\\d{4})?\\)\\/"),b=["var me = this, dt, y, m, d, h, i, s, ms, o, O, z, zz, u, v, W, year, jan4, week1monday, daysInMonth, dayMatched,","def = me.defaults,","from = Ext.Number.from,","results = String(input).match(me.parseRegexes[{0}]);","if(results){","{1}","if(u != null){","v = new Date(u * 1000);","}else{","dt = me.clearTime(new Date);","y = from(y, from(def.y, dt.getFullYear()));","m = from(m, from(def.m - 1, dt.getMonth()));","dayMatched = d !== undefined;","d = from(d, from(def.d, dt.getDate()));","if (!dayMatched) {","dt.setDate(1);","dt.setMonth(m);","dt.setFullYear(y);","daysInMonth = me.getDaysInMonth(dt);","if (d > daysInMonth) {","d = daysInMonth;","}","}","h = from(h, from(def.h, dt.getHours()));","i = from(i, from(def.i, dt.getMinutes()));","s = from(s, from(def.s, dt.getSeconds()));","ms = from(ms, from(def.ms, dt.getMilliseconds()));","if(z >= 0 && y >= 0){","v = me.add(new Date(y < 100 ? 100 : y, 0, 1, h, i, s, ms), me.YEAR, y < 100 ? y - 100 : 0);","v = !strict? v : (strict === true && (z <= 364 || (me.isLeapYear(v) && z <= 365))? me.add(v, me.DAY, z) : null);","}else if(strict === true && !me.isValid(y, m + 1, d, h, i, s, ms)){","v = null;","}else{","if (W) {","year = y || (new Date()).getFullYear(),","jan4 = new Date(year, 0, 4, 0, 0, 0),","week1monday = new Date(jan4.getTime() - ((jan4.getDay() - 1) * 86400000));","v = Ext.Date.clearTime(new Date(week1monday.getTime() + ((W - 1) * 604800000)));","} else {","v = me.add(new Date(y < 100 ? 100 : y, m, d, h, i, s, ms), me.YEAR, y < 100 ? y - 100 : 0);","}","}","}","}","if(v){","if(zz != null){","v = me.add(v, me.SECOND, -v.getTimezoneOffset() * 60 - zz);","}else if(o){","v = me.add(v, me.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn));","}","}","return v;"].join("\n");function h(m){var l=Array.prototype.slice.call(arguments,1);return m.replace(c,function(n,o){return l[o]})}Ext.apply(d,{now:Date.now||function(){return +new Date()},toString:function(l){var m=Ext.String.leftPad;return l.getFullYear()+"-"+m(l.getMonth()+1,2,"0")+"-"+m(l.getDate(),2,"0")+"T"+m(l.getHours(),2,"0")+":"+m(l.getMinutes(),2,"0")+":"+m(l.getSeconds(),2,"0")},getElapsed:function(m,l){return Math.abs(m-(l||d.now()))},useStrict:false,formatCodeToRegex:function(m,l){var n=d.parseCodes[m];if(n){n=typeof n=="function"?n():n;d.parseCodes[m]=n}return n?Ext.applyIf({c:n.c?h(n.c,l||"{0}"):n.c},n):{g:0,c:null,s:Ext.String.escapeRegex(m)}},parseFunctions:{MS:function(m,l){var n=(m||"").match(g);return n?new Date(((n[1]||"")+n[2])*1):null},time:function(m,l){var n=parseInt(m,10);if(n||n===0){return new Date(n)}return null},timestamp:function(m,l){var n=parseInt(m,10);if(n||n===0){return new Date(n*1000)}return null}},parseRegexes:[],formatFunctions:{MS:function(){return"\\/Date("+this.getTime()+")\\/"},time:function(){return this.getTime().toString()},timestamp:function(){return d.format(this,"U")}},y2kYear:50,MILLI:"ms",SECOND:"s",MINUTE:"mi",HOUR:"h",DAY:"d",MONTH:"mo",YEAR:"y",defaults:{},dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNumbers:{January:0,Jan:0,February:1,Feb:1,March:2,Mar:2,April:3,Apr:3,May:4,June:5,Jun:5,July:6,Jul:6,August:7,Aug:7,September:8,Sep:8,October:9,Oct:9,November:10,Nov:10,December:11,Dec:11},defaultFormat:"m/d/Y",getShortMonthName:function(l){return Ext.Date.monthNames[l].substring(0,3)},getShortDayName:function(l){return Ext.Date.dayNames[l].substring(0,3)},getMonthNumber:function(l){return Ext.Date.monthNumbers[l.substring(0,1).toUpperCase()+l.substring(1,3).toLowerCase()]},formatContainsHourInfo:function(l){return a.test(l.replace(k,""))},formatContainsDateInfo:function(l){return e.test(l.replace(k,""))},unescapeFormat:function(l){return l.replace(j,"")},formatCodes:{d:"Ext.String.leftPad(this.getDate(), 2, '0')",D:"Ext.Date.getShortDayName(this.getDay())",j:"this.getDate()",l:"Ext.Date.dayNames[this.getDay()]",N:"(this.getDay() ? this.getDay() : 7)",S:"Ext.Date.getSuffix(this)",w:"this.getDay()",z:"Ext.Date.getDayOfYear(this)",W:"Ext.String.leftPad(Ext.Date.getWeekOfYear(this), 2, '0')",F:"Ext.Date.monthNames[this.getMonth()]",m:"Ext.String.leftPad(this.getMonth() + 1, 2, '0')",M:"Ext.Date.getShortMonthName(this.getMonth())",n:"(this.getMonth() + 1)",t:"Ext.Date.getDaysInMonth(this)",L:"(Ext.Date.isLeapYear(this) ? 1 : 0)",o:"(this.getFullYear() + (Ext.Date.getWeekOfYear(this) == 1 && this.getMonth() > 0 ? +1 : (Ext.Date.getWeekOfYear(this) >= 52 && this.getMonth() < 11 ? -1 : 0)))",Y:"Ext.String.leftPad(this.getFullYear(), 4, '0')",y:"('' + this.getFullYear()).substring(2, 4)",a:"(this.getHours() < 12 ? 'am' : 'pm')",A:"(this.getHours() < 12 ? 'AM' : 'PM')",g:"((this.getHours() % 12) ? this.getHours() % 12 : 12)",G:"this.getHours()",h:"Ext.String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')",H:"Ext.String.leftPad(this.getHours(), 2, '0')",i:"Ext.String.leftPad(this.getMinutes(), 2, '0')",s:"Ext.String.leftPad(this.getSeconds(), 2, '0')",u:"Ext.String.leftPad(this.getMilliseconds(), 3, '0')",O:"Ext.Date.getGMTOffset(this)",P:"Ext.Date.getGMTOffset(this, true)",T:"Ext.Date.getTimezone(this)",Z:"(this.getTimezoneOffset() * -60)",c:function(){var q,o,n,m,p;for(q="Y-m-dTH:i:sP",o=[],n=0,m=q.length;n<m;++n){p=q.charAt(n);o.push(p=="T"?"'T'":d.getFormatCode(p))}return o.join(" + ")},U:"Math.round(this.getTime() / 1000)"},isValid:function(u,l,t,q,o,p,n){q=q||0;o=o||0;p=p||0;n=n||0;var r=d.add(new Date(u<100?100:u,l-1,t,q,o,p,n),d.YEAR,u<100?u-100:0);return u==r.getFullYear()&&l==r.getMonth()+1&&t==r.getDate()&&q==r.getHours()&&o==r.getMinutes()&&p==r.getSeconds()&&n==r.getMilliseconds()},parse:function(m,o,l){var n=d.parseFunctions;if(n[o]==null){d.createParser(o)}return n[o].call(d,m,Ext.isDefined(l)?l:d.useStrict)},parseDate:function(m,n,l){return d.parse(m,n,l)},getFormatCode:function(m){var l=d.formatCodes[m];if(l){l=typeof l=="function"?l():l;d.formatCodes[m]=l}return l||("'"+Ext.String.escape(m)+"'")},createFormat:function(p){var o=[],l=false,n="",m;for(m=0;m<p.length;++m){n=p.charAt(m);if(!l&&n=="\\"){l=true}else{if(l){l=false;o.push("'"+Ext.String.escape(n)+"'")}else{o.push(d.getFormatCode(n))}}}d.formatFunctions[p]=Ext.functionFactory("return "+o.join("+"))},createParser:function(u){var m=d.parseRegexes.length,v=1,n=[],t=[],r=false,l="",p=0,q=u.length,s=[],o;for(;p<q;++p){l=u.charAt(p);if(!r&&l=="\\"){r=true}else{if(r){r=false;t.push(Ext.String.escape(l))}else{o=d.formatCodeToRegex(l,v);v+=o.g;t.push(o.s);if(o.g&&o.c){if(o.calcAtEnd){s.push(o.c)}else{n.push(o.c)}}}}}n=n.concat(s);d.parseRegexes[m]=new RegExp("^"+t.join("")+"$","i");d.parseFunctions[u]=Ext.functionFactory("input","strict",h(b,m,n.join("")))},parseCodes:{d:{g:1,c:"d = parseInt(results[{0}], 10);\n",s:"(3[0-1]|[1-2][0-9]|0[1-9])"},j:{g:1,c:"d = parseInt(results[{0}], 10);\n",s:"(3[0-1]|[1-2][0-9]|[1-9])"},D:function(){for(var l=[],m=0;m<7;l.push(d.getShortDayName(m)),++m){}return{g:0,c:null,s:"(?:"+l.join("|")+")"}},l:function(){return{g:0,c:null,s:"(?:"+d.dayNames.join("|")+")"}},N:{g:0,c:null,s:"[1-7]"},S:{g:0,c:null,s:"(?:st|nd|rd|th)"},w:{g:0,c:null,s:"[0-6]"},z:{g:1,c:"z = parseInt(results[{0}], 10);\n",s:"(\\d{1,3})"},W:{g:1,c:"W = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},F:function(){return{g:1,c:"m = parseInt(me.getMonthNumber(results[{0}]), 10);\n",s:"("+d.monthNames.join("|")+")"}},M:function(){for(var l=[],m=0;m<12;l.push(d.getShortMonthName(m)),++m){}return Ext.applyIf({s:"("+l.join("|")+")"},d.formatCodeToRegex("F"))},m:{g:1,c:"m = parseInt(results[{0}], 10) - 1;\n",s:"(1[0-2]|0[1-9])"},n:{g:1,c:"m = parseInt(results[{0}], 10) - 1;\n",s:"(1[0-2]|[1-9])"},t:{g:0,c:null,s:"(?:\\d{2})"},L:{g:0,c:null,s:"(?:1|0)"},o:{g:1,c:"y = parseInt(results[{0}], 10);\n",s:"(\\d{4})"},Y:{g:1,c:"y = parseInt(results[{0}], 10);\n",s:"(\\d{4})"},y:{g:1,c:"var ty = parseInt(results[{0}], 10);\ny = ty > me.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"},a:{g:1,c:"if (/(am)/i.test(results[{0}])) {\nif (!h || h == 12) { h = 0; }\n} else { if (!h || h < 12) { h = (h || 0) + 12; }}",s:"(am|pm|AM|PM)",calcAtEnd:true},A:{g:1,c:"if (/(am)/i.test(results[{0}])) {\nif (!h || h == 12) { h = 0; }\n} else { if (!h || h < 12) { h = (h || 0) + 12; }}",s:"(AM|PM|am|pm)",calcAtEnd:true},g:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(1[0-2]|[0-9])"},G:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(2[0-3]|1[0-9]|[0-9])"},h:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(1[0-2]|0[1-9])"},H:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(2[0-3]|[0-1][0-9])"},i:{g:1,c:"i = parseInt(results[{0}], 10);\n",s:"([0-5][0-9])"},s:{g:1,c:"s = parseInt(results[{0}], 10);\n",s:"([0-5][0-9])"},u:{g:1,c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n",s:"(\\d+)"},O:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60),","mn = o.substring(3,5) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + Ext.String.leftPad(hr, 2, '0') + Ext.String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+-]\\d{4})"},P:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60),","mn = o.substring(4,6) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + Ext.String.leftPad(hr, 2, '0') + Ext.String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+-]\\d{2}:\\d{2})"},T:{g:0,c:null,s:"[A-Z]{1,5}"},Z:{g:1,c:"zz = results[{0}] * 1;\nzz = (-43200 <= zz && zz <= 50400)? zz : null;\n",s:"([+-]?\\d{1,5})"},c:function(){var o=[],m=[d.formatCodeToRegex("Y",1),d.formatCodeToRegex("m",2),d.formatCodeToRegex("d",3),d.formatCodeToRegex("H",4),d.formatCodeToRegex("i",5),d.formatCodeToRegex("s",6),{c:"ms = results[7] || '0'; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"},{c:["if(results[8]) {","if(results[8] == 'Z'){","zz = 0;","}else if (results[8].indexOf(':') > -1){",d.formatCodeToRegex("P",8).c,"}else{",d.formatCodeToRegex("O",8).c,"}","}"].join("\n")}],p,n;for(p=0,n=m.length;p<n;++p){o.push(m[p].c)}return{g:1,c:o.join(""),s:[m[0].s,"(?:","-",m[1].s,"(?:","-",m[2].s,"(?:","(?:T| )?",m[3].s,":",m[4].s,"(?::",m[5].s,")?","(?:(?:\\.|,)(\\d+))?","(Z|(?:[-+]\\d{2}(?::)?\\d{2}))?",")?",")?",")?"].join("")}},U:{g:1,c:"u = parseInt(results[{0}], 10);\n",s:"(-?\\d+)"}},dateFormat:function(l,m){return d.format(l,m)},isEqual:function(m,l){if(m&&l){return(m.getTime()===l.getTime())}return !(m||l)},format:function(m,n){var l=d.formatFunctions;if(!Ext.isDate(m)){return""}if(l[n]==null){d.createFormat(n)}return l[n].call(m)+""},getTimezone:function(l){return l.toString().replace(/^.* (?:\((.*)\)|([A-Z]{1,5})(?:[\-+][0-9]{4})?(?: -?\d+)?)$/,"$1$2").replace(/[^A-Z]/g,"")},getGMTOffset:function(l,m){var n=l.getTimezoneOffset();return(n>0?"-":"+")+Ext.String.leftPad(Math.floor(Math.abs(n)/60),2,"0")+(m?":":"")+Ext.String.leftPad(Math.abs(n%60),2,"0")},getDayOfYear:function(o){var n=0,q=Ext.Date.clone(o),l=o.getMonth(),p;for(p=0,q.setDate(1),q.setMonth(0);p<l;q.setMonth(++p)){n+=d.getDaysInMonth(q)}return n+o.getDate()-1},getWeekOfYear:(function(){var l=86400000,m=7*l;return function(o){var p=Date.UTC(o.getFullYear(),o.getMonth(),o.getDate()+3)/l,n=Math.floor(p/7),q=new Date(n*m).getUTCFullYear();return n-Math.floor(Date.UTC(q,0,7)/m)+1}}()),isLeapYear:function(l){var m=l.getFullYear();return !!((m&3)==0&&(m%100||(m%400==0&&m)))},getFirstDayOfMonth:function(m){var l=(m.getDay()-(m.getDate()-1))%7;return(l<0)?(l+7):l},getLastDayOfMonth:function(l){return d.getLastDateOfMonth(l).getDay()},getFirstDateOfMonth:function(l){return new Date(l.getFullYear(),l.getMonth(),1)},getLastDateOfMonth:function(l){return new Date(l.getFullYear(),l.getMonth(),d.getDaysInMonth(l))},getDaysInMonth:(function(){var l=[31,28,31,30,31,30,31,31,30,31,30,31];return function(o){var n=o.getMonth();return n==1&&d.isLeapYear(o)?29:l[n]}}()),getSuffix:function(l){switch(l.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th"}},clone:function(l){return new Date(l.getTime())},isDST:function(l){return new Date(l.getFullYear(),0,1).getTimezoneOffset()!=l.getTimezoneOffset()},clearTime:function(l,p){if(p){return Ext.Date.clearTime(Ext.Date.clone(l))}var n=l.getDate(),m,o;l.setHours(0);l.setMinutes(0);l.setSeconds(0);l.setMilliseconds(0);if(l.getDate()!=n){for(m=1,o=d.add(l,Ext.Date.HOUR,m);o.getDate()!=n;m++,o=d.add(l,Ext.Date.HOUR,m)){}l.setDate(n);l.setHours(o.getHours())}return l},add:function(o,n,r){var s=Ext.Date.clone(o),l=Ext.Date,m,q,p=0;if(!n||r===0){return s}q=r-parseInt(r,10);r=parseInt(r,10);if(r){switch(n.toLowerCase()){case Ext.Date.MILLI:s.setTime(s.getTime()+r);break;case Ext.Date.SECOND:s.setTime(s.getTime()+r*1000);break;case Ext.Date.MINUTE:s.setTime(s.getTime()+r*60*1000);break;case Ext.Date.HOUR:s.setTime(s.getTime()+r*60*60*1000);break;case Ext.Date.DAY:s.setDate(s.getDate()+r);break;case Ext.Date.MONTH:m=o.getDate();if(m>28){m=Math.min(m,Ext.Date.getLastDateOfMonth(Ext.Date.add(Ext.Date.getFirstDateOfMonth(o),Ext.Date.MONTH,r)).getDate())}s.setDate(m);s.setMonth(o.getMonth()+r);break;case Ext.Date.YEAR:m=o.getDate();if(m>28){m=Math.min(m,Ext.Date.getLastDateOfMonth(Ext.Date.add(Ext.Date.getFirstDateOfMonth(o),Ext.Date.YEAR,r)).getDate())}s.setDate(m);s.setFullYear(o.getFullYear()+r);break}}if(q){switch(n.toLowerCase()){case Ext.Date.MILLI:p=1;break;case Ext.Date.SECOND:p=1000;break;case Ext.Date.MINUTE:p=1000*60;break;case Ext.Date.HOUR:p=1000*60*60;break;case Ext.Date.DAY:p=1000*60*60*24;break;case Ext.Date.MONTH:m=d.getDaysInMonth(s);p=1000*60*60*24*m;break;case Ext.Date.YEAR:m=(d.isLeapYear(s)?366:365);p=1000*60*60*24*m;break}if(p){s.setTime(s.getTime()+p*q)}}return s},subtract:function(m,l,n){return d.add(m,l,-n)},between:function(m,o,l){var n=m.getTime();return o.getTime()<=n&&n<=l.getTime()},compat:function(){var m=window.Date,l,t=["useStrict","formatCodeToRegex","parseFunctions","parseRegexes","formatFunctions","y2kYear","MILLI","SECOND","MINUTE","HOUR","DAY","MONTH","YEAR","defaults","dayNames","monthNames","monthNumbers","getShortMonthName","getShortDayName","getMonthNumber","formatCodes","isValid","parseDate","getFormatCode","createFormat","createParser","parseCodes"],q=["dateFormat","format","getTimezone","getGMTOffset","getDayOfYear","getWeekOfYear","isLeapYear","getFirstDayOfMonth","getLastDayOfMonth","getDaysInMonth","getSuffix","clone","isDST","clearTime","add","between"],r=t.length,n=q.length,o,u,v;for(v=0;v<r;v++){o=t[v];m[o]=d[o]}for(l=0;l<n;l++){u=q[l];m.prototype[u]=function(){var p=Array.prototype.slice.call(arguments);p.unshift(this);return d[u].apply(d,p)}}}})}();(function(a){var d=[],b=function(){},c=function(k,g,j,h){var e=function(){var l=this.callParent(arguments);k.apply(this,arguments);return l};e.$name=j;e.$owner=h;if(g){e.$previous=g.$previous;g.$previous=e}return e};Ext.apply(b,{$className:"Ext.Base",$isClass:true,create:function(){return Ext.create.apply(Ext,[this].concat(Array.prototype.slice.call(arguments,0)))},extend:function(k){var e=k.prototype,n,h,j,l,g,m;h=this.prototype=Ext.Object.chain(e);h.self=this;this.superclass=h.superclass=e;if(!k.$isClass){n=Ext.Base.prototype;for(j in n){if(j in h){h[j]=n[j]}}}m=e.$inheritableStatics;if(m){for(j=0,l=m.length;j<l;j++){g=m[j];if(!this.hasOwnProperty(g)){this[g]=k[g]}}}if(k.$onExtended){this.$onExtended=k.$onExtended.slice()}h.config=new h.configClass();h.initConfigList=h.initConfigList.slice();h.initConfigMap=Ext.clone(h.initConfigMap);h.configMap=Ext.Object.chain(h.configMap)},$onExtended:[],triggerExtended:function(){var h=this.$onExtended,g=h.length,e,j;if(g>0){for(e=0;e<g;e++){j=h[e];j.fn.apply(j.scope||this,arguments)}}},onExtended:function(g,e){this.$onExtended.push({fn:g,scope:e});return this},addConfig:function(j,n){var p=this.prototype,o=Ext.Class.configNameCache,k=p.configMap,l=p.initConfigList,h=p.initConfigMap,m=p.config,e,g,q;for(g in j){if(j.hasOwnProperty(g)){if(!k[g]){k[g]=true}q=j[g];e=o[g].initialized;if(!h[g]&&q!==null&&!p[e]){h[g]=true;l.push(g)}}}if(n){Ext.merge(m,j)}else{Ext.mergeIf(m,j)}p.configClass=Ext.Object.classify(m)},addStatics:function(e){var h,g;for(g in e){if(e.hasOwnProperty(g)){h=e[g];if(typeof h=="function"&&!h.$isClass&&h!==Ext.emptyFn&&h!==Ext.identityFn){h.$owner=this;h.$name=g}this[g]=h}}return this},addInheritableStatics:function(g){var k,e,j=this.prototype,h,l;k=j.$inheritableStatics;e=j.$hasInheritableStatics;if(!k){k=j.$inheritableStatics=[];e=j.$hasInheritableStatics={}}for(h in g){if(g.hasOwnProperty(h)){l=g[h];this[h]=l;if(!e[h]){e[h]=true;k.push(h)}}}return this},addMembers:function(g){var j=this.prototype,e=Ext.enumerables,m=[],k,l,h,n;for(h in g){m.push(h)}if(e){m.push.apply(m,e)}for(k=0,l=m.length;k<l;k++){h=m[k];if(g.hasOwnProperty(h)){n=g[h];if(typeof n=="function"&&!n.$isClass&&n!==Ext.emptyFn&&n!==Ext.identityFn){n.$owner=this;n.$name=h}j[h]=n}}return this},addMember:function(e,g){if(typeof g=="function"&&!g.$isClass&&g!==Ext.emptyFn&&g!==Ext.identityFn){g.$owner=this;g.$name=e}this.prototype[e]=g;return this},implement:function(){this.addMembers.apply(this,arguments)},borrow:function(k,h){var o=this.prototype,n=k.prototype,j,l,g,m,e;h=Ext.Array.from(h);for(j=0,l=h.length;j<l;j++){g=h[j];e=n[g];if(typeof e=="function"){m=Ext.Function.clone(e);m.$owner=this;m.$name=g;o[g]=m}else{o[g]=e}}return this},override:function(g){var o=this,q=Ext.enumerables,m=o.prototype,j=Ext.Function.clone,e,l,h,p,n,k;if(arguments.length===2){e=g;g={};g[e]=arguments[1];q=null}do{n=[];p=null;for(e in g){if(e=="statics"){p=g[e]}else{if(e=="inheritableStatics"){o.addInheritableStatics(g[e])}else{if(e=="config"){o.addConfig(g[e],true)}else{n.push(e)}}}}if(q){n.push.apply(n,q)}for(l=n.length;l--;){e=n[l];if(g.hasOwnProperty(e)){h=g[e];if(typeof h=="function"&&!h.$className&&h!==Ext.emptyFn&&h!==Ext.identityFn){if(typeof h.$owner!="undefined"){h=j(h)}h.$owner=o;h.$name=e;k=m[e];if(k){h.$previous=k}}m[e]=h}}m=o;g=p}while(g);return this},callParent:function(e){var g;return(g=this.callParent.caller)&&(g.$previous||((g=g.$owner?g:g.caller)&&g.$owner.superclass.self[g.$name])).apply(this,e||d)},callSuper:function(e){var g;return(g=this.callSuper.caller)&&((g=g.$owner?g:g.caller)&&g.$owner.superclass.self[g.$name]).apply(this,e||d)},mixin:function(g,h){var l=this,s=h.prototype,n=l.prototype,r,m,j,k,q,p,o,e;if(typeof s.onClassMixedIn!="undefined"){s.onClassMixedIn.call(h,l)}if(!n.hasOwnProperty("mixins")){if("mixins" in n){n.mixins=Ext.Object.chain(n.mixins)}else{n.mixins={}}}for(r in s){p=s[r];if(r==="mixins"){Ext.merge(n.mixins,p)}else{if(r==="xhooks"){for(o in p){e=p[o];e.$previous=Ext.emptyFn;if(n.hasOwnProperty(o)){c(e,n[o],o,l)}else{n[o]=c(e,null,o,l)}}}else{if(!(r==="mixinId"||r==="config")&&(n[r]===undefined)){n[r]=p}}}}m=s.$inheritableStatics;if(m){for(j=0,k=m.length;j<k;j++){q=m[j];if(!l.hasOwnProperty(q)){l[q]=h[q]}}}if("config" in s){l.addConfig(s.config,false)}n.mixins[g]=s;return l},getName:function(){return Ext.getClassName(this)},createAlias:a(function(g,e){this.override(g,function(){return this[e].apply(this,arguments)})}),addXtype:function(k){var g=this.prototype,j=g.xtypesMap,h=g.xtypes,e=g.xtypesChain;if(!g.hasOwnProperty("xtypesMap")){j=g.xtypesMap=Ext.merge({},g.xtypesMap||{});h=g.xtypes=g.xtypes?[].concat(g.xtypes):[];e=g.xtypesChain=g.xtypesChain?[].concat(g.xtypesChain):[];g.xtype=k}if(!j[k]){j[k]=true;h.push(k);e.push(k);Ext.ClassManager.setAlias(this,"widget."+k)}return this}});b.implement({isInstance:true,$className:"Ext.Base",configClass:Ext.emptyFn,initConfigList:[],configMap:{},initConfigMap:{},statics:function(){var g=this.statics.caller,e=this.self;if(!g){return e}return g.$owner},callParent:function(g){var h,e=(h=this.callParent.caller)&&(h.$previous||((h=h.$owner?h:h.caller)&&h.$owner.superclass[h.$name]));return e.apply(this,g||d)},callSuper:function(g){var h,e=(h=this.callSuper.caller)&&((h=h.$owner?h:h.caller)&&h.$owner.superclass[h.$name]);return e.apply(this,g||d)},self:b,constructor:function(){return this},initConfig:function(h){var n=h,m=Ext.Class.configNameCache,k=new this.configClass(),q=this.initConfigList,j=this.configMap,p,l,o,g,e;this.initConfig=Ext.emptyFn;this.initialConfig=n||{};this.config=h=(n)?Ext.merge(k,h):k;if(n){q=q.slice();for(g in n){if(j[g]){if(n[g]!==null){q.push(g);this[m[g].initialized]=false}}}}for(l=0,o=q.length;l<o;l++){g=q[l];p=m[g];e=p.initialized;if(!this[e]){this[e]=true;this[p.set].call(this,h[g])}}return this},hasConfig:function(e){return Boolean(this.configMap[e])},setConfig:function(j,n){if(!j){return this}var h=Ext.Class.configNameCache,e=this.config,m=this.configMap,l=this.initialConfig,g,k;n=Boolean(n);for(g in j){if(n&&l.hasOwnProperty(g)){continue}k=j[g];e[g]=k;if(m[g]){this[h[g].set](k)}}return this},getConfig:function(g){var e=Ext.Class.configNameCache;return this[e[g].get]()},getInitialConfig:function(g){var e=this.config;if(!g){return e}else{return e[g]}},onConfigUpdate:function(l,n,o){var p=this.self,h,k,e,j,m,g;l=Ext.Array.from(l);o=o||this;for(h=0,k=l.length;h<k;h++){e=l[h];j="update"+Ext.String.capitalize(e);m=this[j]||Ext.emptyFn;g=function(){m.apply(this,arguments);o[n].apply(o,arguments)};g.$name=j;g.$owner=p;this[j]=g}},destroy:function(){this.destroy=Ext.emptyFn}});b.prototype.callOverridden=b.prototype.callParent;Ext.Base=b}(Ext.Function.flexSetter));(function(){var c,b=Ext.Base,g=[],e,d;for(e in b){if(b.hasOwnProperty(e)){g.push(e)}}d=g.length;function a(j){function h(){return this.constructor.apply(this,arguments)||null}return h}Ext.Class=c=function(j,k,h){if(typeof j!="function"){h=k;k=j;j=null}if(!k){k={}}j=c.create(j,k);c.process(j,k,h);return j};Ext.apply(c,{onBeforeCreated:function(j,k,h){j.addMembers(k);h.onCreated.call(j,j)},create:function(h,l){var j,k;if(!h){h=a()}for(k=0;k<d;k++){j=g[k];h[j]=b[j]}return h},process:function(h,p,l){var k=p.preprocessors||c.defaultPreprocessors,s=this.preprocessors,v={onBeforeCreated:this.onBeforeCreated},u=[],w,o,n,t,m,r,q;delete p.preprocessors;for(n=0,t=k.length;n<t;n++){w=k[n];if(typeof w=="string"){w=s[w];o=w.properties;if(o===true){u.push(w.fn)}else{if(o){for(m=0,r=o.length;m<r;m++){q=o[m];if(p.hasOwnProperty(q)){u.push(w.fn);break}}}}}else{u.push(w)}}v.onCreated=l?l:Ext.emptyFn;v.preprocessors=u;this.doProcess(h,p,v)},doProcess:function(j,n,h){var m=this,o=h.preprocessors,k=o.shift(),l=m.doProcess;for(;k;k=o.shift()){if(k.call(m,j,n,h,l)===false){return}}h.onBeforeCreated.apply(m,arguments)},preprocessors:{},registerPreprocessor:function(j,m,k,h,l){if(!h){h="last"}if(!k){k=[j]}this.preprocessors[j]={name:j,properties:k||false,fn:m};this.setDefaultPreprocessorPosition(j,h,l);return this},getPreprocessor:function(h){return this.preprocessors[h]},getPreprocessors:function(){return this.preprocessors},defaultPreprocessors:[],getDefaultPreprocessors:function(){return this.defaultPreprocessors},setDefaultPreprocessors:function(h){this.defaultPreprocessors=Ext.Array.from(h);return this},setDefaultPreprocessorPosition:function(k,m,l){var h=this.defaultPreprocessors,j;if(typeof m=="string"){if(m==="first"){h.unshift(k);return this}else{if(m==="last"){h.push(k);return this}}m=(m==="after")?1:-1}j=Ext.Array.indexOf(h,l);if(j!==-1){Ext.Array.splice(h,Math.max(0,j+m),0,k)}return this},configNameCache:{},getConfigNameMap:function(k){var j=this.configNameCache,l=j[k],h;if(!l){h=k.charAt(0).toUpperCase()+k.substr(1);l=j[k]={internal:k,initialized:"_is"+h+"Initialized",apply:"apply"+h,update:"update"+h,set:"set"+h,get:"get"+h,doSet:"doSet"+h,changeEvent:k.toLowerCase()+"change"}}return l}});c.registerPreprocessor("extend",function(j,l,q){var m=Ext.Base,n=m.prototype,o=l.extend,h,p,k;delete l.extend;if(o&&o!==Object){h=o}else{h=m}p=h.prototype;if(!h.$isClass){for(k in n){if(!p[k]){p[k]=n[k]}}}j.extend(h);j.triggerExtended.apply(j,arguments);if(l.onClassExtended){j.onExtended(l.onClassExtended,j);delete l.onClassExtended}},true);c.registerPreprocessor("statics",function(h,j){h.addStatics(j.statics);delete j.statics});c.registerPreprocessor("inheritableStatics",function(h,j){h.addInheritableStatics(j.inheritableStatics);delete j.inheritableStatics});c.registerPreprocessor("config",function(h,l){var k=l.config,j=h.prototype;delete l.config;Ext.Object.each(k,function(o,x){var v=c.getConfigNameMap(o),r=v.internal,m=v.initialized,w=v.apply,p=v.update,u=v.set,n=v.get,z=(u in j)||l.hasOwnProperty(u),q=(w in j)||l.hasOwnProperty(w),s=(p in j)||l.hasOwnProperty(p),y,t;if(x===null||(!z&&!q&&!s)){j[r]=x;j[m]=true}else{j[m]=false}if(!z){l[u]=function(C){var B=this[r],A=this[w],D=this[p];if(!this[m]){this[m]=true}if(A){C=A.call(this,C,B)}if(typeof C!="undefined"){this[r]=C;if(D&&C!==B){D.call(this,C,B)}}return this}}if(!(n in j)||l.hasOwnProperty(n)){t=l[n]||false;if(t){y=function(){return t.apply(this,arguments)}}else{y=function(){return this[r]}}l[n]=function(){var A;if(!this[m]){this[m]=true;this[u](this.config[o])}A=this[n];if("$previous" in A){A.$previous=y}else{this[n]=y}return y.apply(this,arguments)}}});h.addConfig(k,true)});c.registerPreprocessor("mixins",function(l,p,h){var j=p.mixins,m,k,n,o;delete p.mixins;Ext.Function.interceptBefore(h,"onCreated",function(){if(j instanceof Array){for(n=0,o=j.length;n<o;n++){k=j[n];m=k.prototype.mixinId||k.$className;l.mixin(m,k)}}else{for(var q in j){if(j.hasOwnProperty(q)){l.mixin(q,j[q])}}}})});Ext.extend=function(k,l,j){if(arguments.length===2&&Ext.isObject(l)){j=l;l=k;k=null}var h;if(!l){throw new Error("[Ext.extend] Attempting to extend from a class which has not been loaded on the page.")}j.extend=l;j.preprocessors=["extend","statics","inheritableStatics","mixins","config"];if(k){h=new c(k,j);h.prototype.constructor=k}else{h=new c(j)}h.prototype.override=function(p){for(var n in p){if(p.hasOwnProperty(n)){this[n]=p[n]}}};return h}}());(function(c,e,h,d,g){function a(){function j(){return this.constructor.apply(this,arguments)||null}return j}var b=Ext.ClassManager={classes:{},existCache:{},namespaceRewrites:[{from:"Ext.",to:Ext}],maps:{alternateToName:{},aliasToName:{},nameToAliases:{},nameToAlternates:{}},enableNamespaceParseCache:true,namespaceParseCache:{},instantiators:[],isCreated:function(n){var m=this.existCache,l,o,k,j,p;if(this.classes[n]||m[n]){return true}j=g;p=this.parseNamespace(n);for(l=0,o=p.length;l<o;l++){k=p[l];if(typeof k!="string"){j=k}else{if(!j||!j[k]){return false}j=j[k]}}m[n]=true;this.triggerCreated(n);return true},createdListeners:[],nameCreatedListeners:{},triggerCreated:function(s){var u=this.createdListeners,m=this.nameCreatedListeners,n=this.maps.nameToAlternates[s],t=[s],p,r,o,q,l,k;for(p=0,r=u.length;p<r;p++){l=u[p];l.fn.call(l.scope,s)}if(n){t.push.apply(t,n)}for(p=0,r=t.length;p<r;p++){k=t[p];u=m[k];if(u){for(o=0,q=u.length;o<q;o++){l=u[o];l.fn.call(l.scope,k)}delete m[k]}}},onCreated:function(n,m,l){var k=this.createdListeners,j=this.nameCreatedListeners,o={fn:n,scope:m};if(l){if(this.isCreated(l)){n.call(m,l);return}if(!j[l]){j[l]=[]}j[l].push(o)}else{k.push(o)}},parseNamespace:function(l){var j=this.namespaceParseCache,m,o,q,k,t,s,r,n,p;if(this.enableNamespaceParseCache){if(j.hasOwnProperty(l)){return j[l]}}m=[];o=this.namespaceRewrites;q=g;k=l;for(n=0,p=o.length;n<p;n++){t=o[n];s=t.from;r=t.to;if(k===s||k.substring(0,s.length)===s){k=k.substring(s.length);if(typeof r!="string"){q=r}else{m=m.concat(r.split("."))}break}}m.push(q);m=m.concat(k.split("."));if(this.enableNamespaceParseCache){j[l]=m}return m},setNamespace:function(m,p){var k=g,q=this.parseNamespace(m),o=q.length-1,j=q[o],n,l;for(n=0;n<o;n++){l=q[n];if(typeof l!="string"){k=l}else{if(!k[l]){k[l]={}}k=k[l]}}k[j]=p;return k[j]},createNamespaces:function(){var k=g,p,m,n,l,o,q;for(n=0,o=arguments.length;n<o;n++){p=this.parseNamespace(arguments[n]);for(l=0,q=p.length;l<q;l++){m=p[l];if(typeof m!="string"){k=m}else{if(!k[m]){k[m]={}}k=k[m]}}}return k},set:function(j,n){var m=this,p=m.maps,o=p.nameToAlternates,l=m.getName(n),k;m.classes[j]=m.setNamespace(j,n);if(l&&l!==j){p.alternateToName[j]=l;k=o[l]||(o[l]=[]);k.push(j)}return this},get:function(l){var n=this.classes,j,p,k,m,o;if(n[l]){return n[l]}j=g;p=this.parseNamespace(l);for(m=0,o=p.length;m<o;m++){k=p[m];if(typeof k!="string"){j=k}else{if(!j||!j[k]){return null}j=j[k]}}return j},setAlias:function(j,k){var m=this.maps.aliasToName,n=this.maps.nameToAliases,l;if(typeof j=="string"){l=j}else{l=this.getName(j)}if(k&&m[k]!==l){m[k]=l}if(!n[l]){n[l]=[]}if(k){Ext.Array.include(n[l],k)}return this},addNameAliasMappings:function(j){var o=this.maps.aliasToName,p=this.maps.nameToAliases,m,n,l,k;for(m in j){n=p[m]||(p[m]=[]);for(k=0;k<j[m].length;k++){l=j[m][k];if(!o[l]){o[l]=m;n.push(l)}}}return this},addNameAlternateMappings:function(m){var j=this.maps.alternateToName,p=this.maps.nameToAlternates,l,n,o,k;for(l in m){n=p[l]||(p[l]=[]);for(k=0;k<m[l].length;k++){o=m[l][k];if(!j[o]){j[o]=l;n.push(o)}}}return this},getByAlias:function(j){return this.get(this.getNameByAlias(j))},getNameByAlias:function(j){return this.maps.aliasToName[j]||""},getNameByAlternate:function(j){return this.maps.alternateToName[j]||""},getAliasesByName:function(j){return this.maps.nameToAliases[j]||[]},getName:function(j){return j&&j.$className||""},getClass:function(j){return j&&j.self||null},create:function(k,m,j){var l=a();if(typeof m=="function"){m=m(l)}m.$className=k;return new c(l,m,function(){var n=m.postprocessors||b.defaultPostprocessors,u=b.postprocessors,v=[],t,p,s,o,r,q,w;delete m.postprocessors;for(p=0,s=n.length;p<s;p++){t=n[p];if(typeof t=="string"){t=u[t];q=t.properties;if(q===true){v.push(t.fn)}else{if(q){for(o=0,r=q.length;o<r;o++){w=q[o];if(m.hasOwnProperty(w)){v.push(t.fn);break}}}}}else{v.push(t)}}m.postprocessors=v;m.createdFn=j;b.processCreate(k,this,m)})},processCreate:function(m,k,o){var n=this,j=o.postprocessors.shift(),l=o.createdFn;if(!j){if(m){n.set(m,k)}if(l){l.call(k,k)}if(m){n.triggerCreated(m)}return}if(j.call(n,m,k,o,n.processCreate)!==false){n.processCreate(m,k,o)}},createOverride:function(m,q,k){var p=this,o=q.override,l=q.requires,j=q.uses,n=function(){var r,s;if(l){s=l;l=null;Ext.Loader.require(s,n)}else{r=p.get(o);delete q.override;delete q.requires;delete q.uses;Ext.override(r,q);p.triggerCreated(m);if(j){Ext.Loader.addUsedClasses(j)}if(k){k.call(r)}}};p.existCache[m]=true;p.onCreated(n,p,o);return p},instantiateByAlias:function(){var k=arguments[0],j=h.call(arguments),l=this.getNameByAlias(k);if(!l){l=this.maps.aliasToName[k];Ext.syncRequire(l)}j[0]=l;return this.instantiate.apply(this,j)},instantiate:function(){var l=arguments[0],n=typeof l,k=h.call(arguments,1),m=l,o,j;if(n!="function"){if(n!="string"&&k.length===0){k=[l];l=l.xclass}j=this.get(l)}else{j=l}if(!j){o=this.getNameByAlias(l);if(o){l=o;j=this.get(l)}}if(!j){o=this.getNameByAlternate(l);if(o){l=o;j=this.get(l)}}if(!j){Ext.syncRequire(l);j=this.get(l)}return this.getInstantiator(k.length)(j,k)},dynInstantiate:function(k,j){j=d(j,true);j.unshift(k);return this.instantiate.apply(this,j)},getInstantiator:function(m){var l=this.instantiators,n,k,j;n=l[m];if(!n){k=m;j=[];for(k=0;k<m;k++){j.push("a["+k+"]")}n=l[m]=new Function("c","a","return new c("+j.join(",")+")")}return n},postprocessors:{},defaultPostprocessors:[],registerPostprocessor:function(k,n,l,j,m){if(!j){j="last"}if(!l){l=[k]}this.postprocessors[k]={name:k,properties:l||false,fn:n};this.setDefaultPostprocessorPosition(k,j,m);return this},setDefaultPostprocessors:function(j){this.defaultPostprocessors=d(j);return this},setDefaultPostprocessorPosition:function(k,n,m){var l=this.defaultPostprocessors,j;if(typeof n=="string"){if(n==="first"){l.unshift(k);return this}else{if(n==="last"){l.push(k);return this}}n=(n==="after")?1:-1}j=Ext.Array.indexOf(l,m);if(j!==-1){Ext.Array.splice(l,Math.max(0,j+n),0,k)}return this},getNamesByExpression:function(q){var o=this.maps.nameToAliases,r=[],j,n,l,k,s,m,p;if(q.indexOf("*")!==-1){q=q.replace(/\*/g,"(.*?)");s=new RegExp("^"+q+"$");for(j in o){if(o.hasOwnProperty(j)){l=o[j];if(j.search(s)!==-1){r.push(j)}else{for(m=0,p=l.length;m<p;m++){n=l[m];if(n.search(s)!==-1){r.push(j);break}}}}}}else{k=this.getNameByAlias(q);if(k){r.push(k)}else{k=this.getNameByAlternate(q);if(k){r.push(k)}else{r.push(q)}}}return r}};b.registerPostprocessor("alias",function(l,k,o){var j=o.alias,m,n;for(m=0,n=j.length;m<n;m++){e=j[m];this.setAlias(k,e)}},["xtype","alias"]);b.registerPostprocessor("singleton",function(k,j,m,l){if(m.singleton){l.call(this,k,new j(),m)}else{return true}return false});b.registerPostprocessor("alternateClassName",function(k,j,o){var m=o.alternateClassName,l,n,p;if(!(m instanceof Array)){m=[m]}for(l=0,n=m.length;l<n;l++){p=m[l];this.set(p,j)}});Ext.apply(Ext,{create:e(b,"instantiate"),widget:function(l,k){var p=l,m,n,j,o;if(typeof p!="string"){k=l;p=k.xtype}else{k=k||{}}if(k.isComponent){return k}m="widget."+p;n=b.getNameByAlias(m);if(!n){o=true}j=b.get(n);if(o||!j){return b.instantiateByAlias(m,k)}return new j(k)},createByAlias:e(b,"instantiateByAlias"),define:function(k,l,j){if(l.override){return b.createOverride.apply(b,arguments)}return b.create.apply(b,arguments)},undefine:function(q){var l=b.classes,s=b.maps,t=s.aliasToName,u=s.nameToAliases,w=s.alternateToName,o=s.nameToAlternates,j=u[q],r=o[q],m,v,k,n;delete b.namespaceParseCache[q];delete u[q];delete o[q];delete l[q];if(j){for(n=j.length;n--;){delete t[j[n]]}}if(r){for(n=r.length;n--;){delete w[r[n]]}}m=b.parseNamespace(q);v=m.length-1;k=m[0];for(n=1;n<v;n++){k=k[m[n]];if(!k){return}}try{delete k[m[v]]}catch(p){k[m[v]]=undefined}},getClassName:e(b,"getName"),getDisplayName:function(j){if(j){if(j.displayName){return j.displayName}if(j.$name&&j.$class){return Ext.getClassName(j.$class)+"#"+j.$name}if(j.$className){return j.$className}}return"Anonymous"},getClass:e(b,"getClass"),namespace:e(b,"createNamespaces")});Ext.createWidget=Ext.widget;Ext.ns=Ext.namespace;c.registerPreprocessor("className",function(j,k){if(k.$className){j.$className=k.$className}},true,"first");c.registerPreprocessor("alias",function(u,o){var s=u.prototype,l=d(o.xtype),j=d(o.alias),v="widget.",t=v.length,p=Array.prototype.slice.call(s.xtypesChain||[]),m=Ext.merge({},s.xtypesMap||{}),n,r,q,k;for(n=0,r=j.length;n<r;n++){q=j[n];if(q.substring(0,t)===v){k=q.substring(t);Ext.Array.include(l,k)}}u.xtype=o.xtype=l[0];o.xtypes=l;for(n=0,r=l.length;n<r;n++){k=l[n];if(!m[k]){m[k]=true;p.push(k)}}o.xtypesChain=p;o.xtypesMap=m;Ext.Function.interceptAfter(o,"onClassCreated",function(){var w=s.mixins,y,x;for(y in w){if(w.hasOwnProperty(y)){x=w[y];l=x.xtypes;if(l){for(n=0,r=l.length;n<r;n++){k=l[n];if(!m[k]){m[k]=true;p.push(k)}}}}}});for(n=0,r=l.length;n<r;n++){k=l[n];Ext.Array.include(j,v+k)}o.alias=j},["xtype","alias"])}(Ext.Class,Ext.Function.alias,Array.prototype.slice,Ext.Array.from,Ext.global));if(Ext._alternatesMetadata){Ext.ClassManager.addNameAlternateMappings(Ext._alternatesMetadata);Ext._alternatesMetadata=null}if(Ext._aliasMetadata){Ext.ClassManager.addNameAliasMappings(Ext._aliasMetadata);Ext._aliasMetadata=null}Ext.Loader=new function(){var l=this,b=Ext.ClassManager,u=Ext.Class,e=Ext.Function.flexSetter,p=Ext.Function.alias,a=Ext.Function.pass,d=Ext.Function.defer,h=Ext.Array.erase,o=["extend","mixins","requires"],w={},n=[],c=/\/\.\//g,g=/\./g,k=0;Ext.apply(l,{isInHistory:w,history:n,config:{enabled:false,scriptChainDelay:false,disableCaching:true,disableCachingParam:"_dc",garbageCollect:false,paths:{Ext:"."},preserveScripts:true,scriptCharset:undefined},setConfig:function(z,A){if(Ext.isObject(z)&&arguments.length===1){Ext.merge(l.config,z);if("paths" in z){Ext.app.collectNamespaces(z.paths)}}else{l.config[z]=(Ext.isObject(A))?Ext.merge(l.config[z],A):A;if(z==="paths"){Ext.app.collectNamespaces(A)}}return l},getConfig:function(z){if(z){return l.config[z]}return l.config},setPath:e(function(z,A){l.config.paths[z]=A;Ext.app.namespaces[z]=true;k++;return l}),addClassPathMappings:function(A){var z;if(k==0){l.config.paths=A}else{for(z in A){l.config.paths[z]=A[z]}}k++;return l},getPath:function(z){var B="",C=l.config.paths,A=l.getPrefix(z);if(A.length>0){if(A===z){return C[A]}B=C[A];z=z.substring(A.length+1)}if(B.length>0){B+="/"}return B.replace(c,"/")+z.replace(g,"/")+".js"},getPrefix:function(A){var C=l.config.paths,B,z="";if(C.hasOwnProperty(A)){return A}for(B in C){if(C.hasOwnProperty(B)&&B+"."===A.substring(0,B.length+1)){if(B.length>z.length){z=B}}}return z},isAClassNameWithAKnownPrefix:function(z){var A=l.getPrefix(z);return A!==""&&A!==z},require:function(B,A,z,C){if(A){A.call(z)}},syncRequire:function(){},exclude:function(z){return{require:function(C,B,A){return l.require(C,B,A,z)},syncRequire:function(C,B,A){return l.syncRequire(C,B,A,z)}}},onReady:function(C,B,D,z){var A;if(D!==false&&Ext.onDocumentReady){A=C;C=function(){Ext.onDocumentReady(A,B,z)}}C.call(B)}});var r=[],s={},v={},t={},q={},x=[],y=[],j={},m=function(z,A){return A.priority-z.priority};Ext.apply(l,{documentHead:typeof document!="undefined"&&(document.head||document.getElementsByTagName("head")[0]),isLoading:false,queue:r,isClassFileLoaded:s,isFileLoaded:v,readyListeners:x,optionalRequires:y,requiresMap:j,numPendingFiles:0,numLoadedFiles:0,hasFileLoadError:false,classNameToFilePathMap:t,scriptsLoading:0,syncModeEnabled:false,scriptElements:q,refreshQueue:function(){var D=r.length,A,C,z,B;if(!D&&!l.scriptsLoading){return l.triggerReady()}for(A=0;A<D;A++){C=r[A];if(C){B=C.requires;if(B.length>l.numLoadedFiles){continue}for(z=0;z<B.length;){if(b.isCreated(B[z])){h(B,z,1)}else{z++}}if(C.requires.length===0){h(r,A,1);C.callback.call(C.scope);l.refreshQueue();break}}}return l},injectScriptElement:function(z,G,D,I,B){var H=document.createElement("script"),E=false,A=l.config,F=function(){if(!E){E=true;H.onload=H.onreadystatechange=H.onerror=null;if(typeof A.scriptChainDelay=="number"){d(G,A.scriptChainDelay,I)}else{G.call(I)}l.cleanupScriptElement(H,A.preserveScripts===false,A.garbageCollect)}},C=function(J){d(D,1,I);l.cleanupScriptElement(H,A.preserveScripts===false,A.garbageCollect)};H.type="text/javascript";H.onerror=C;B=B||A.scriptCharset;if(B){H.charset=B}if("addEventListener" in H){H.onload=F}else{if("readyState" in H){H.onreadystatechange=function(){if(this.readyState=="loaded"||this.readyState=="complete"){F()}}}else{H.onload=F}}H.src=z;(l.documentHead||document.getElementsByTagName("head")[0]).appendChild(H);return H},removeScriptElement:function(z){if(q[z]){l.cleanupScriptElement(q[z],true,!!l.getConfig("garbageCollect"));delete q[z]}return l},cleanupScriptElement:function(B,A,C){var D;B.onload=B.onreadystatechange=B.onerror=null;if(A){Ext.removeNode(B);if(C){for(D in B){try{if(D!="src"){B[D]=null}delete B[D]}catch(z){}}}}return l},loadScript:function(I){var C=l.getConfig(),B=typeof I=="string",A=B?I:I.url,E=!B&&I.onError,F=!B&&I.onLoad,H=!B&&I.scope,G=function(){l.numPendingFiles--;l.scriptsLoading--;if(E){E.call(H,"Failed loading '"+A+"', please verify that the file exists")}if(l.numPendingFiles+l.scriptsLoading===0){l.refreshQueue()}},D=function(){l.numPendingFiles--;l.scriptsLoading--;if(F){F.call(H)}if(l.numPendingFiles+l.scriptsLoading===0){l.refreshQueue()}},z;l.isLoading=true;l.numPendingFiles++;l.scriptsLoading++;z=C.disableCaching?(A+"?"+C.disableCachingParam+"="+Ext.Date.now()):A;q[A]=l.injectScriptElement(z,D,G)},loadScriptFile:function(A,H,F,K,z){if(v[A]){return l}var C=l.getConfig(),L=A+(C.disableCaching?("?"+C.disableCachingParam+"="+Ext.Date.now()):""),B=false,J,D,I,E="";K=K||l;l.isLoading=true;if(!z){I=function(){};q[A]=l.injectScriptElement(L,H,I,K)}else{if(typeof XMLHttpRequest!="undefined"){J=new XMLHttpRequest()}else{J=new ActiveXObject("Microsoft.XMLHTTP")}try{J.open("GET",L,false);J.send(null)}catch(G){B=true}D=(J.status===1223)?204:(J.status===0&&((self.location||{}).protocol=="file:"||(self.location||{}).protocol=="ionp:"))?200:J.status;B=B||(D===0);if(B){}else{if((D>=200&&D<300)||(D===304)){if(!Ext.isIE){E="\n//@ sourceURL="+A}Ext.globalEval(J.responseText+E);H.call(K)}else{}}J=null}},syncRequire:function(){var z=l.syncModeEnabled;if(!z){l.syncModeEnabled=true}l.require.apply(l,arguments);if(!z){l.syncModeEnabled=false}l.refreshQueue()},require:function(R,I,C,E){var K={},B={},H=[],T=[],Q=[],A=[],G,S,M,L,z,F,P,O,N,J,D;if(E){E=(typeof E==="string")?[E]:E;for(O=0,J=E.length;O<J;O++){z=E[O];if(typeof z=="string"&&z.length>0){H=b.getNamesByExpression(z);for(N=0,D=H.length;N<D;N++){K[H[N]]=true}}}}R=(typeof R==="string")?[R]:(R?R:[]);if(I){if(I.length>0){G=function(){var V=[],U,W;for(U=0,W=A.length;U<W;U++){V.push(b.get(A[U]))}return I.apply(this,V)}}else{G=I}}else{G=Ext.emptyFn}C=C||Ext.global;for(O=0,J=R.length;O<J;O++){L=R[O];if(typeof L=="string"&&L.length>0){T=b.getNamesByExpression(L);D=T.length;for(N=0;N<D;N++){P=T[N];if(K[P]!==true){A.push(P);if(!b.isCreated(P)&&!B[P]){B[P]=true;Q.push(P)}}}}}if(Q.length>0){if(!l.config.enabled){throw new Error("Ext.Loader is not enabled, so dependencies cannot be resolved dynamically. Missing required class"+((Q.length>1)?"es":"")+": "+Q.join(", "))}}else{G.call(C);return l}S=l.syncModeEnabled;if(!S){r.push({requires:Q.slice(),callback:G,scope:C})}J=Q.length;for(O=0;O<J;O++){F=Q[O];M=l.getPath(F);if(S&&s.hasOwnProperty(F)){if(!s[F]){l.numPendingFiles--;l.removeScriptElement(M);delete s[F]}}if(!s.hasOwnProperty(F)){s[F]=false;t[F]=M;l.numPendingFiles++;l.loadScriptFile(M,a(l.onFileLoaded,[F,M],l),a(l.onFileLoadError,[F,M],l),l,S)}}if(S){G.call(C);if(J===1){return b.get(F)}}return l},onFileLoaded:function(B,A){var z=s[B];l.numLoadedFiles++;s[B]=true;v[A]=true;if(!z){l.numPendingFiles--}if(l.numPendingFiles===0){l.refreshQueue()}},onFileLoadError:function(B,A,z,C){l.numPendingFiles--;l.hasFileLoadError=true},addUsedClasses:function(B){var z,A,C;if(B){B=(typeof B=="string")?[B]:B;for(A=0,C=B.length;A<C;A++){z=B[A];if(typeof z=="string"&&!Ext.Array.contains(y,z)){y.push(z)}}}return l},triggerReady:function(){var z,A=y;if(l.isLoading){l.isLoading=false;if(A.length!==0){A=A.slice();y.length=0;l.require(A,l.triggerReady,l);return l}}Ext.Array.sort(x,m);while(x.length&&!l.isLoading){z=x.shift();z.fn.call(z.scope)}return l},onReady:function(C,B,D,z){var A;if(D!==false&&Ext.onDocumentReady){A=C;C=function(){Ext.onDocumentReady(A,B,z)}}if(!l.isLoading){C.call(B)}else{x.push({fn:C,scope:B,priority:(z&&z.priority)||0})}},historyPush:function(z){if(z&&s.hasOwnProperty(z)&&!w[z]){w[z]=true;n.push(z)}return l}});Ext.disableCacheBuster=function(A,B){var z=new Date();z.setTime(z.getTime()+(A?10*365:-1)*24*60*60*1000);z=z.toGMTString();document.cookie="ext-cache=1; expires="+z+"; path="+(B||"/")};Ext.require=p(l,"require");Ext.syncRequire=p(l,"syncRequire");Ext.exclude=p(l,"exclude");Ext.onReady=function(B,A,z){l.onReady(B,A,true,z)};u.registerPreprocessor("loader",function(P,D,O,N){var K=this,I=[],z,J=b.getName(P),C,B,H,G,M,F,A,L,E;for(C=0,H=o.length;C<H;C++){F=o[C];if(D.hasOwnProperty(F)){A=D[F];if(typeof A=="string"){I.push(A)}else{if(A instanceof Array){for(B=0,G=A.length;B<G;B++){M=A[B];if(typeof M=="string"){I.push(M)}}}else{if(typeof A!="function"){for(B in A){if(A.hasOwnProperty(B)){M=A[B];if(typeof M=="string"){I.push(M)}}}}}}}}if(I.length===0){return}l.require(I,function(){for(C=0,H=o.length;C<H;C++){F=o[C];if(D.hasOwnProperty(F)){A=D[F];if(typeof A=="string"){D[F]=b.get(A)}else{if(A instanceof Array){for(B=0,G=A.length;B<G;B++){M=A[B];if(typeof M=="string"){D[F][B]=b.get(M)}}}else{if(typeof A!="function"){for(var Q in A){if(A.hasOwnProperty(Q)){M=A[Q];if(typeof M=="string"){D[F][Q]=b.get(M)}}}}}}}}N.call(K,P,D,O)});return false},true,"after","className");b.registerPostprocessor("uses",function(B,A,C){var z=C.uses;if(z){l.addUsedClasses(z)}});b.onCreated(l.historyPush)}();if(Ext._classPathMetadata){Ext.Loader.addClassPathMappings(Ext._classPathMetadata);Ext._classPathMetadata=null}(function(){var a=document.getElementsByTagName("script"),b=a[a.length-1],d=b.src,c=d.substring(0,d.lastIndexOf("/")+1),e=Ext.Loader;e.setConfig({enabled:true,disableCaching:true,paths:{Ext:c+"src"}})})();Ext._endTime=new Date().getTime();if(Ext._beforereadyhandler){Ext._beforereadyhandler()}Ext.Error=Ext.extend(Error,{statics:{ignore:false,raise:function(a){a=a||{};if(Ext.isString(a)){a={msg:a}}var c=this.raise.caller,b;if(c){if(c.$name){a.sourceMethod=c.$name}if(c.$owner){a.sourceClass=c.$owner.$className}}if(Ext.Error.handle(a)!==true){b=Ext.Error.prototype.toString.call(a);Ext.log({msg:b,level:"error",dump:a,stack:true});throw new Ext.Error(a)}},handle:function(){return Ext.Error.ignore}},name:"Ext.Error",constructor:function(a){if(Ext.isString(a)){a={msg:a}}var b=this;Ext.apply(b,a);b.message=b.message||b.msg},toString:function(){var c=this,b=c.sourceClass?c.sourceClass:"",a=c.sourceMethod?"."+c.sourceMethod+"(): ":"",d=c.msg||"(No description provided)";return b+a+d}});Ext.deprecated=function(a){return Ext.emptyFn};Ext.JSON=(new (function(){var me=this,encodingFunction,decodingFunction,useNative=null,useHasOwn=!!{}.hasOwnProperty,isNative=function(){if(useNative===null){useNative=Ext.USE_NATIVE_JSON&&window.JSON&&JSON.toString()=="[object JSON]"}return useNative},pad=function(n){return n<10?"0"+n:n},doDecode=function(json){return eval("("+json+")")},doEncode=function(o,newline){if(o===null||o===undefined){return"null"}else{if(Ext.isDate(o)){return Ext.JSON.encodeDate(o)}else{if(Ext.isString(o)){return Ext.JSON.encodeString(o)}else{if(typeof o=="number"){return isFinite(o)?String(o):"null"}else{if(Ext.isBoolean(o)){return String(o)}else{if(o.toJSON){return o.toJSON()}else{if(Ext.isArray(o)){return encodeArray(o,newline)}else{if(Ext.isObject(o)){return encodeObject(o,newline)}else{if(typeof o==="function"){return"null"}}}}}}}}}return"undefined"},m={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\","\v":"\\u000b"},charToReplace=/[\\\"\x00-\x1f\x7f-\uffff]/g,encodeString=function(s){return'"'+s.replace(charToReplace,function(a){var c=m[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"'},encodeArray=function(o,newline){var a=["[",""],len=o.length,i;for(i=0;i<len;i+=1){a.push(Ext.JSON.encodeValue(o[i]),",")}a[a.length-1]="]";return a.join("")},encodeObject=function(o,newline){var a=["{",""],i,val;for(i in o){val=o[i];if(!useHasOwn||o.hasOwnProperty(i)){if(typeof val==="function"||val===undefined){continue}a.push(Ext.JSON.encodeValue(i),":",Ext.JSON.encodeValue(val),",")}}a[a.length-1]="}";return a.join("")};me.encodeString=encodeString;me.encodeValue=doEncode;me.encodeDate=function(o){return'"'+o.getFullYear()+"-"+pad(o.getMonth()+1)+"-"+pad(o.getDate())+"T"+pad(o.getHours())+":"+pad(o.getMinutes())+":"+pad(o.getSeconds())+'"'};me.encode=function(o){if(!encodingFunction){encodingFunction=isNative()?JSON.stringify:me.encodeValue}return encodingFunction(o)};me.decode=function(json,safe){if(!decodingFunction){decodingFunction=isNative()?JSON.parse:doDecode}try{return decodingFunction(json)}catch(e){if(safe===true){return null}Ext.Error.raise({sourceClass:"Ext.JSON",sourceMethod:"decode",msg:"You're trying to decode an invalid JSON String: "+json})}}})());Ext.encode=Ext.JSON.encode;Ext.decode=Ext.JSON.decode;Ext.apply(Ext,{userAgent:navigator.userAgent.toLowerCase(),cache:{},idSeed:1000,windowId:"ext-window",documentId:"ext-document",isReady:false,enableGarbageCollector:true,enableListenerCollection:true,rootHierarchyState:{},addCacheEntry:function(g,c,e){e=e||c.dom;var a=Ext.cache,b=g||(c&&c.id)||e.id,d=a[b]||(a[b]={data:{},events:{},dom:e,skipGarbageCollection:!!(e.getElementById||e.navigator)});if(c){c.$cache=d;d.el=c}return d},updateCacheEntry:function(a,b){a.dom=b;if(a.el){a.el.dom=b}return a},id:function(a,c){var b=this,d="";a=Ext.getDom(a,true)||{};if(a===document){a.id=b.documentId}else{if(a===window){a.id=b.windowId}}if(!a.id){if(b.isSandboxed){d=Ext.sandboxName.toLowerCase()+"-"}a.id=d+(c||"ext-gen")+(++Ext.idSeed)}return a.id},escapeId:(function(){var c=/^[a-zA-Z_][a-zA-Z0-9_\-]*$/i,d=/([\W]{1})/g,b=/^(\d)/g,a=function(h,g){return"\\"+g},e=function(h,g){return"\\00"+g.charCodeAt(0).toString(16)+" "};return function(g){return c.test(g)?g:g.replace(d,a).replace(b,e)}}()),getBody:(function(){var a;return function(){return a||(a=Ext.get(document.body))}}()),getHead:(function(){var a;return function(){return a||(a=Ext.get(document.getElementsByTagName("head")[0]))}}()),getDoc:(function(){var a;return function(){return a||(a=Ext.get(document))}}()),getOrientation:function(){return window.innerHeight>window.innerWidth?"portrait":"landscape"},destroy:function(){var c=arguments.length,b,a;for(b=0;b<c;b++){a=arguments[b];if(a){if(Ext.isArray(a)){this.destroy.apply(this,a)}else{if(a.isStore){a.destroyStore()}else{if(Ext.isFunction(a.destroy)){a.destroy()}else{if(a.dom){a.remove()}}}}}}},callback:function(g,e,c,b){var d,a;if(Ext.isFunction(g)){d=g}else{if(e&&Ext.isString(g)){d=e[g]}}if(d){c=c||[];e=e||window;if(b){Ext.defer(d,b,e,c)}else{a=d.apply(e,c)}}return a},resolveMethod:function(b,a){if(Ext.isFunction(b)){return b}return a[b]},htmlEncode:function(a){return Ext.String.htmlEncode(a)},htmlDecode:function(a){return Ext.String.htmlDecode(a)},urlAppend:function(a,b){return Ext.String.urlAppend(a,b)}});Ext.ns=Ext.namespace;window.undefined=window.undefined;(function(){var q=function(e){return e.test(Ext.userAgent)},v=document.compatMode=="CSS1Compat",H=function(T,S){var e;return(T&&(e=S.exec(Ext.userAgent)))?parseFloat(e[1]):0},r=document.documentMode,a=q(/opera/),x=a&&q(/version\/10\.5/),M=q(/\bchrome\b/),B=q(/webkit/),c=!M&&q(/safari/),K=c&&q(/applewebkit\/4/),I=c&&q(/version\/3/),F=c&&q(/version\/4/),l=c&&q(/version\/5\.0/),E=c&&q(/version\/5/),k=!a&&q(/msie/),L=k&&((q(/msie 7/)&&r!=8&&r!=9&&r!=10)||r==7),J=k&&((q(/msie 8/)&&r!=7&&r!=9&&r!=10)||r==8),G=k&&((q(/msie 9/)&&r!=7&&r!=8&&r!=10)||r==9),h=k&&((q(/msie 10/)&&r!=7&&r!=8&&r!=9)||r==10),O=k&&q(/msie 6/),b=!B&&q(/gecko/),R=b&&q(/rv:1\.9/),Q=b&&q(/rv:2\.0/),P=b&&q(/rv:5\./),t=b&&q(/rv:10\./),A=R&&q(/rv:1\.9\.0/),y=R&&q(/rv:1\.9\.1/),w=R&&q(/rv:1\.9\.2/),g=q(/windows|win32/),D=q(/macintosh|mac os x/),z=q(/linux/),n=null,o=H(true,/\bchrome\/(\d+\.\d+)/),j=H(true,/\bfirefox\/(\d+\.\d+)/),p=H(k,/msie (\d+\.\d+)/),u=H(a,/version\/(\d+\.\d+)/),d=H(c,/version\/(\d+\.\d+)/),C=H(B,/webkit\/(\d+\.\d+)/),s=/^https/i.test(window.location.protocol),m;try{document.execCommand("BackgroundImageCache",false,true)}catch(N){}m=function(){};m.info=m.warn=m.error=Ext.emptyFn;Ext.setVersion("extjs","4.2.1.883");Ext.apply(Ext,{SSL_SECURE_URL:s&&k?"javascript:''":"about:blank",plainTableCls:Ext.buildSettings.baseCSSPrefix+"table-plain",plainListCls:Ext.buildSettings.baseCSSPrefix+"list-plain",enableNestedListenerRemoval:false,USE_NATIVE_JSON:false,getDom:function(T,S){if(!T||!document){return null}if(T.dom){return T.dom}else{if(typeof T=="string"){var U=Ext.getElementById(T);if(U&&k&&S){if(T==U.getAttribute("id")){return U}else{return null}}return U}else{return T}}},removeNode:O||L||J?(function(){var e;return function(U){if(U&&U.tagName.toUpperCase()!="BODY"){(Ext.enableNestedListenerRemoval)?Ext.EventManager.purgeElement(U):Ext.EventManager.removeAll(U);var S=Ext.cache,T=U.id;if(S[T]){delete S[T].dom;delete S[T]}if(J&&U.parentNode){U.parentNode.removeChild(U)}e=e||document.createElement("div");e.appendChild(U);e.innerHTML=""}}}()):function(T){if(T&&T.parentNode&&T.tagName.toUpperCase()!="BODY"){(Ext.enableNestedListenerRemoval)?Ext.EventManager.purgeElement(T):Ext.EventManager.removeAll(T);var e=Ext.cache,S=T.id;if(e[S]){delete e[S].dom;delete e[S]}T.parentNode.removeChild(T)}},isStrict:v,isIEQuirks:k&&(!v&&(O||L||J||G)),isOpera:a,isOpera10_5:x,isWebKit:B,isChrome:M,isSafari:c,isSafari3:I,isSafari4:F,isSafari5:E,isSafari5_0:l,isSafari2:K,isIE:k,isIE6:O,isIE7:L,isIE7m:O||L,isIE7p:k&&!O,isIE8:J,isIE8m:O||L||J,isIE8p:k&&!(O||L),isIE9:G,isIE9m:O||L||J||G,isIE9p:k&&!(O||L||J),isIE10:h,isIE10m:O||L||J||G||h,isIE10p:k&&!(O||L||J||G),isGecko:b,isGecko3:R,isGecko4:Q,isGecko5:P,isGecko10:t,isFF3_0:A,isFF3_5:y,isFF3_6:w,isFF4:4<=j&&j<5,isFF5:5<=j&&j<6,isFF10:10<=j&&j<11,isLinux:z,isWindows:g,isMac:D,chromeVersion:o,firefoxVersion:j,ieVersion:p,operaVersion:u,safariVersion:d,webKitVersion:C,isSecure:s,BLANK_IMAGE_URL:(O||L)?"//www.sencha.com/s.gif":"data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==",value:function(T,e,S){return Ext.isEmpty(T,S)?e:T},escapeRe:function(e){return e.replace(/([-.*+?\^${}()|\[\]\/\\])/g,"\\$1")},addBehaviors:function(V){if(!Ext.isReady){Ext.onReady(function(){Ext.addBehaviors(V)})}else{var S={},U,e,T;for(e in V){if((U=e.split("@"))[1]){T=U[0];if(!S[T]){S[T]=Ext.select(T)}S[T].on(U[1],V[e])}}S=null}},getScrollbarSize:function(S){if(!Ext.isReady){return{}}if(S||!n){var e=document.body,T=document.createElement("div");T.style.width=T.style.height="100px";T.style.overflow="scroll";T.style.position="absolute";e.appendChild(T);n={width:T.offsetWidth-T.clientWidth,height:T.offsetHeight-T.clientHeight};e.removeChild(T)}return n},getScrollBarWidth:function(S){var e=Ext.getScrollbarSize(S);return e.width+2},copyTo:function(S,U,W,V){if(typeof W=="string"){W=W.split(/[,;\s]/)}var X,T=W?W.length:0,e;for(X=0;X<T;X++){e=W[X];if(V||U.hasOwnProperty(e)){S[e]=U[e]}}return S},destroyMembers:function(U){for(var T=1,S=arguments,e=S.length;T<e;T++){Ext.destroy(U[S[T]]);delete U[S[T]]}},log:m,partition:function(e,V){var W=[[],[]],S,U,T=e.length;for(S=0;S<T;S++){U=e[S];W[(V&&V(U,S,e))||(!V&&U)?0:1].push(U)}return W},invoke:function(e,V){var X=[],W=Array.prototype.slice.call(arguments,2),S,U,T=e.length;for(S=0;S<T;S++){U=e[S];if(U&&typeof U[V]=="function"){X.push(U[V].apply(U,W))}else{X.push(undefined)}}return X},zip:function(){var Y=Ext.partition(arguments,function(Z){return typeof Z!="function"}),V=Y[0],X=Y[1][0],e=Ext.max(Ext.pluck(V,"length")),U=[],W,T,S;for(W=0;W<e;W++){U[W]=[];if(X){U[W]=X.apply(X,Ext.pluck(V,W))}else{for(T=0,S=V.length;T<S;T++){U[W].push(V[T][W])}}}return U},toSentence:function(S,e){var V=S.length,U,T;if(V<=1){return S[0]}else{U=S.slice(0,V-1);T=S[V-1];return Ext.util.Format.format("{0} {1} {2}",U.join(", "),e||"and",T)}},setGlyphFontFamily:function(e){Ext._glyphFontFamily=e},useShims:O})}());Ext.application=function(a){var c,d,b;if(typeof a==="string"){Ext.require(a,function(){c=Ext.ClassManager.get(a)})}else{Ext.Loader.setPath(a.name,a.appFolder||"app");if(d=a.paths){for(b in d){if(d.hasOwnProperty(b)){Ext.Loader.setPath(b,d[b])}}}a["paths processed"]=true;Ext.define(a.name+".$application",Ext.apply({extend:"Ext.app.Application"},a),function(){c=this})}Ext.onReady(function(){Ext.app.Application.instance=new c()})};(function(){Ext.ns("Ext.util");var g=Ext.util.Format={},c=/<\/?[^>]+>/gi,j=/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,e=/\r?\n/g,b=/^#+$/,h=/[\d,\.#]+/,k=/[^\d\.#]/g,a,d={};Ext.apply(g,{thousandSeparator:",",decimalSeparator:".",currencyPrecision:2,currencySign:"$",currencyAtEnd:false,undef:function(l){return l!==undefined?l:""},defaultValue:function(m,l){return m!==undefined&&m!==""?m:l},substr:"ab".substr(-1)!="b"?function(m,o,l){var n=String(m);return(o<0)?n.substr(Math.max(n.length+o,0),l):n.substr(o,l)}:function(m,n,l){return String(m).substr(n,l)},lowercase:function(l){return String(l).toLowerCase()},uppercase:function(l){return String(l).toUpperCase()},usMoney:function(l){return g.currency(l,"$",2)},currency:function(n,p,m,l){var r="",q=",0",o=0;n=n-0;if(n<0){n=-n;r="-"}m=Ext.isDefined(m)?m:g.currencyPrecision;q+=(m>0?".":"");for(;o<m;o++){q+="0"}n=g.number(n,q);if((l||g.currencyAtEnd)===true){return Ext.String.format("{0}{1}{2}",r,n,p||g.currencySign)}else{return Ext.String.format("{0}{1}{2}",r,p||g.currencySign,n)}},date:function(l,m){if(!l){return""}if(!Ext.isDate(l)){l=new Date(Date.parse(l))}return Ext.Date.dateFormat(l,m||Ext.Date.defaultFormat)},dateRenderer:function(l){return function(m){return g.date(m,l)}},stripTags:function(l){return !l?l:String(l).replace(c,"")},stripScripts:function(l){return !l?l:String(l).replace(j,"")},fileSize:(function(){var l=1024,m=1048576,n=1073741824;return function(p){var o;if(p<l){if(p===1){o="1 byte"}else{o=p+" bytes"}}else{if(p<m){o=(Math.round(((p*10)/l))/10)+" KB"}else{if(p<n){o=(Math.round(((p*10)/m))/10)+" MB"}else{o=(Math.round(((p*10)/n))/10)+" GB"}}}return o}})(),math:(function(){var l={};return function(n,m){if(!l[m]){l[m]=Ext.functionFactory("v","return v "+m+";")}return l[m](n)}}()),round:function(n,m){var l=Number(n);if(typeof m=="number"){m=Math.pow(10,m);l=Math.round(n*m)/m}return l},number:function(t,o){if(!o){return t}var n=d[o];if(!n){var q=o,y=g.thousandSeparator,u=g.decimalSeparator,m,r,s,p=0,w,x,l;if(o.substr(o.length-2)=="/i"){if(!a){a=new RegExp("[^\\d\\"+g.decimalSeparator+"]","g")}o=o.substr(0,o.length-2);m=o.indexOf(y)!=-1;r=o.replace(a,"").split(u)}else{m=o.indexOf(",")!=-1;r=o.replace(k,"").split(".")}s=o.replace(h,"");if(r.length>2){}else{if(r.length===2){p=r[1].length;x=b.test(r[1])}}l=["var utilFormat=Ext.util.Format,extNumber=Ext.Number,neg,fnum,parts"+(m?",thousandSeparator,thousands=[],j,n,i":"")+(s?',formatString="'+o+'",formatPattern=/[\\d,\\.#]+/':"")+(x?",trailingZeroes=/\\.?0+$/;":";")+'return function(v){if(typeof v!=="number"&&isNaN(v=extNumber.from(v,NaN)))return"";neg=v<0;',"fnum=Ext.Number.toFixed(Math.abs(v), "+p+");"];if(m){if(p){l[l.length]='parts=fnum.split(".");';l[l.length]="fnum=parts[0];"}l[l.length]="if(v>=1000) {";l[l.length]="thousandSeparator=utilFormat.thousandSeparator;thousands.length=0;j=fnum.length;n=fnum.length%3||3;for(i=0;i<j;i+=n){if(i!==0){n=3;}thousands[thousands.length]=fnum.substr(i,n);}fnum=thousands.join(thousandSeparator);}";if(p){l[l.length]="fnum += utilFormat.decimalSeparator+parts[1];"}}else{if(p){l[l.length]='if(utilFormat.decimalSeparator!=="."){parts=fnum.split(".");fnum=parts[0]+utilFormat.decimalSeparator+parts[1];}'}}if(x){l[l.length]='fnum=fnum.replace(trailingZeroes,"");'}l[l.length]='if(neg&&fnum!=="'+(p?"0."+Ext.String.repeat("0",p):"0")+'")fnum="-"+fnum;';l[l.length]="return ";if(s){l[l.length]="formatString.replace(formatPattern, fnum);"}else{l[l.length]="fnum;"}l[l.length]="};";n=d[q]=Ext.functionFactory("Ext",l.join(""))(Ext)}return n(t)},numberRenderer:function(l){return function(m){return g.number(m,l)}},attributes:function(m){if(typeof m==="object"){var l=[],n;for(n in m){l.push(n,'="',n==="style"?Ext.DomHelper.generateStyles(m[n]):Ext.htmlEncode(m[n]),'"')}m=l.join("")}return m||""},plural:function(l,m,n){return l+" "+(l==1?m:(n?n:m+"s"))},nl2br:function(l){return Ext.isEmpty(l)?"":l.replace(e,"<br/>")},capitalize:Ext.String.capitalize,ellipsis:Ext.String.ellipsis,format:Ext.String.format,htmlDecode:Ext.String.htmlDecode,htmlEncode:Ext.String.htmlEncode,leftPad:Ext.String.leftPad,trim:Ext.String.trim,parseBox:function(m){m=m||0;if(typeof m==="number"){return{top:m,right:m,bottom:m,left:m}}var n=m.split(" "),l=n.length;if(l==1){n[1]=n[2]=n[3]=n[0]}else{if(l==2){n[2]=n[0];n[3]=n[1]}else{if(l==3){n[3]=n[1]}}}return{top:parseInt(n[0],10)||0,right:parseInt(n[1],10)||0,bottom:parseInt(n[2],10)||0,left:parseInt(n[3],10)||0}},escapeRegex:function(l){return l.replace(/([\-.*+?\^${}()|\[\]\/\\])/g,"\\$1")}})}());(Ext.cmd.derive("Ext.util.TaskRunner",Ext.Base,{interval:10,timerId:null,constructor:function(a){var b=this;if(typeof a=="number"){b.interval=a}else{if(a){Ext.apply(b,a)}}b.tasks=[];b.timerFn=Ext.Function.bind(b.onTick,b)},newTask:function(b){var a=new Ext.util.TaskRunner.Task(b);a.manager=this;return a},start:function(a){var c=this,b=Ext.Date.now();if(!a.pending){c.tasks.push(a);a.pending=true}a.stopped=false;a.taskStartTime=b;a.taskRunTime=a.fireOnStart!==false?0:a.taskStartTime;a.taskRunCount=0;if(!c.firing){if(a.fireOnStart!==false){c.startTimer(0,b)}else{c.startTimer(a.interval,b)}}return a},stop:function(a){if(!a.stopped){a.stopped=true;if(a.onStop){a.onStop.call(a.scope||a,a)}}return a},stopAll:function(){Ext.each(this.tasks,this.stop,this)},firing:false,nextExpires:1e+99,onTick:function(){var m=this,e=m.tasks,a=Ext.Date.now(),n=1e+99,k=e.length,c,o,h,b,d,g;m.timerId=null;m.firing=true;for(h=0;h<k||h<(k=e.length);++h){b=e[h];if(!(g=b.stopped)){c=b.taskRunTime+b.interval;if(c<=a){d=1;try{d=b.run.apply(b.scope||b,b.args||[++b.taskRunCount])}catch(j){try{if(b.onError){d=b.onError.call(b.scope||b,b,j)}}catch(l){}}b.taskRunTime=a;if(d===false||b.taskRunCount===b.repeat){m.stop(b);g=true}else{g=b.stopped;c=a+b.interval}}if(!g&&b.duration&&b.duration<=(a-b.taskStartTime)){m.stop(b);g=true}}if(g){b.pending=false;if(!o){o=e.slice(0,h)}}else{if(o){o.push(b)}if(n>c){n=c}}}if(o){m.tasks=o}m.firing=false;if(m.tasks.length){m.startTimer(n-a,Ext.Date.now())}if(m.fireIdleEvent!==false){Ext.EventManager.idleEvent.fire()}},startTimer:function(e,c){var d=this,b=c+e,a=d.timerId;if(a&&d.nextExpires-b>d.interval){clearTimeout(a);a=null}if(!a){if(e<d.interval){e=d.interval}d.timerId=setTimeout(d.timerFn,e);d.nextExpires=b}}},1,0,0,0,0,0,[Ext.util,"TaskRunner"],function(){var b=this,a=b.prototype;a.destroy=a.stopAll;Ext.util.TaskManager=Ext.TaskManager=new b();b.Task=new Ext.Class({isTask:true,stopped:true,fireOnStart:false,constructor:function(c){Ext.apply(this,c)},restart:function(c){if(c!==undefined){this.interval=c}this.manager.start(this)},start:function(c){if(this.stopped){this.restart(c)}},stop:function(){this.manager.stop(this)}});a=b.Task.prototype;a.destroy=a.stop}));(Ext.cmd.derive("Ext.util.TaskManager",Ext.util.TaskRunner,{alternateClassName:["Ext.TaskManager"],singleton:true},0,0,0,0,0,0,[Ext.util,"TaskManager",Ext,"TaskManager"],0));(Ext.cmd.derive("Ext.perf.Accumulator",Ext.Base,(function(){var c=null,h=Ext.global.chrome,d,b=function(){b=function(){return new Date().getTime()};var m,n;if(Ext.isChrome&&h&&h.Interval){m=new h.Interval();m.start();b=function(){return m.microseconds()/1000}}else{if(window.ActiveXObject){try{n=new ActiveXObject("SenchaToolbox.Toolbox");Ext.senchaToolbox=n;b=function(){return n.milliseconds}}catch(o){}}else{if(Date.now){b=Date.now}}}Ext.perf.getTimestamp=Ext.perf.Accumulator.getTimestamp=b;return b()};function j(n,m){n.sum+=m;n.min=Math.min(n.min,m);n.max=Math.max(n.max,m)}function e(p){var n=p?p:(b()-this.time),o=this,m=o.accum;++m.count;if(!--m.depth){j(m.total,n)}j(m.pure,n-o.childTime);c=o.parent;if(c){++c.accum.childCount;c.childTime+=n}}function a(){return{min:Number.MAX_VALUE,max:0,sum:0}}function k(n,m){return function(){var p=n.enter(),o=m.apply(this,arguments);p.leave();return o}}function l(m){return Math.round(m*100)/100}function g(o,n,m,q){var p={avg:0,min:q.min,max:q.max,sum:0};if(o){m=m||0;p.sum=q.sum-n*m;p.avg=p.sum/o}return p}return{constructor:function(m){var n=this;n.count=n.childCount=n.depth=n.maxDepth=0;n.pure=a();n.total=a();n.name=m},statics:{getTimestamp:b},format:function(m){if(!d){d=new Ext.XTemplate(["{name} - {count} call(s)",'<tpl if="count">','<tpl if="childCount">'," ({childCount} children)","</tpl>",'<tpl if="depth - 1">'," ({depth} deep)","</tpl>",'<tpl for="times">',", {type}: {[this.time(values.sum)]} msec (","avg={[this.time(values.sum / parent.count)]}",")","</tpl>","</tpl>"].join(""),{time:function(o){return Math.round(o*100)/100}})}var n=this.getData(m);n.name=this.name;n.pure.type="Pure";n.total.type="Total";n.times=[n.pure,n.total];return d.apply(n)},getData:function(m){var n=this;return{count:n.count,childCount:n.childCount,depth:n.maxDepth,pure:g(n.count,n.childCount,m,n.pure),total:g(n.count,n.childCount,m,n.total)}},enter:function(){var m=this,n={accum:m,leave:e,childTime:0,parent:c};++m.depth;if(m.maxDepth<m.depth){m.maxDepth=m.depth}c=n;n.time=b();return n},monitor:function(o,n,m){var p=this.enter();if(m){o.apply(n,m)}else{o.call(n)}p.leave()},report:function(){Ext.log(this.format())},tap:function(u,w){var v=this,p=typeof w=="string"?[w]:w,t,x,r,q,o,n,m,s;s=function(){if(typeof u=="string"){t=Ext.global;q=u.split(".");for(r=0,o=q.length;r<o;++r){t=t[q[r]]}}else{t=u}for(r=0,o=p.length;r<o;++r){n=p[r];x=n.charAt(0)=="!";if(x){n=n.substring(1)}else{x=!(n in t.prototype)}m=x?t:t.prototype;m[n]=k(v,m[n])}};Ext.ClassManager.onCreated(s,v,u);return v}}}()),1,0,0,0,0,0,[Ext.perf,"Accumulator"],function(){Ext.perf.getTimestamp=this.getTimestamp}));(Ext.cmd.derive("Ext.perf.Monitor",Ext.Base,{singleton:true,alternateClassName:"Ext.Perf",constructor:function(){this.accumulators=[];this.accumulatorsByName={}},calibrate:function(){var b=new Ext.perf.Accumulator("$"),g=b.total,c=Ext.perf.Accumulator.getTimestamp,e=0,h,a,d;d=c();do{h=b.enter();h.leave();++e}while(g.sum<100);a=c();return(a-d)/e},get:function(b){var c=this,a=c.accumulatorsByName[b];if(!a){c.accumulatorsByName[b]=a=new Ext.perf.Accumulator(b);c.accumulators.push(a)}return a},enter:function(a){return this.get(a).enter()},monitor:function(a,c,b){this.get(a).monitor(c,b)},report:function(){var c=this,b=c.accumulators,a=c.calibrate();b.sort(function(e,d){return(e.name<d.name)?-1:((d.name<e.name)?1:0)});c.updateGC();Ext.log("Calibration: "+Math.round(a*100)/100+" msec/sample");Ext.each(b,function(d){Ext.log(d.format(a))})},getData:function(c){var b={},a=this.accumulators;Ext.each(a,function(d){if(c||d.count){b[d.name]=d.getData()}});return b},reset:function(){Ext.each(this.accumulators,function(a){var b=a;b.count=b.childCount=b.depth=b.maxDepth=0;b.pure={min:Number.MAX_VALUE,max:0,sum:0};b.total={min:Number.MAX_VALUE,max:0,sum:0}})},updateGC:function(){var a=this.accumulatorsByName.GC,b=Ext.senchaToolbox,c;if(a){a.count=b.garbageCollectionCounter||0;if(a.count){c=a.pure;a.total.sum=c.sum=b.garbageCollectionMilliseconds;c.min=c.max=c.sum/a.count;c=a.total;c.min=c.max=c.sum/a.count}}},watchGC:function(){Ext.perf.getTimestamp();var a=Ext.senchaToolbox;if(a){this.get("GC");a.watchGarbageCollector(false)}},setup:function(c){if(!c){c={render:{"Ext.AbstractComponent":"render"},layout:{"Ext.layout.Context":"run"}}}this.currentConfig=c;var d,g,b,e,a;for(d in c){if(c.hasOwnProperty(d)){g=c[d];b=Ext.Perf.get(d);for(e in g){if(g.hasOwnProperty(e)){a=g[e];b.tap(e,a)}}}}this.watchGC()}},1,0,0,0,0,0,[Ext.perf,"Monitor",Ext,"Perf"],0));Ext.is={init:function(b){var c=this.platforms,e=c.length,d,a;b=b||window.navigator;for(d=0;d<e;d++){a=c[d];this[a.identity]=a.regex.test(b[a.property])}this.Desktop=this.Mac||this.Windows||(this.Linux&&!this.Android);this.Tablet=this.iPad;this.Phone=!this.Desktop&&!this.Tablet;this.iOS=this.iPhone||this.iPad||this.iPod;this.Standalone=!!window.navigator.standalone},platforms:[{property:"platform",regex:/iPhone/i,identity:"iPhone"},{property:"platform",regex:/iPod/i,identity:"iPod"},{property:"userAgent",regex:/iPad/i,identity:"iPad"},{property:"userAgent",regex:/Blackberry/i,identity:"Blackberry"},{property:"userAgent",regex:/Android/i,identity:"Android"},{property:"platform",regex:/Mac/i,identity:"Mac"},{property:"platform",regex:/Win/i,identity:"Windows"},{property:"platform",regex:/Linux/i,identity:"Linux"}]};Ext.is.init();(function(){var a=function(g,e){var d=g.ownerDocument.defaultView,h=(d?d.getComputedStyle(g,null):g.currentStyle)||g.style;return h[e]},c={"IE6-quirks":[0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0,0],"IE6-strict":[0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0],"IE7-quirks":[0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0,0],"IE7-strict":[0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0,0],"IE8-quirks":[0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0,0],"IE8-strict":[0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1],"IE9-quirks":[0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,0],"IE9-strict":[0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,1],"IE10-quirks":[1,1,0,0,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,1],"IE10-strict":[1,1,0,0,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,1]};function b(){var d=Ext.isIE6?"IE6":Ext.isIE7?"IE7":Ext.isIE8?"IE8":Ext.isIE9?"IE9":Ext.isIE10?"IE10":"";return d?d+(Ext.isStrict?"-strict":"-quirks"):""}Ext.supports={init:function(){var l=this,p=document,j=l.toRun||l.tests,h=j.length,d=h&&Ext.isReady&&p.createElement("div"),e=[],m=b(),k,g,o;if(d){d.innerHTML=['<div style="height:30px;width:50px;">','<div style="height:20px;width:20px;"></div>',"</div>",'<div style="width: 200px; height: 200px; position: relative; padding: 5px;">','<div style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></div>',"</div>",'<div style="position: absolute; left: 10%; top: 10%;"></div>','<div style="float:left; background-color:transparent;"></div>'].join("");p.body.appendChild(d)}g=c[m];while(h--){k=j[h];o=g&&g[h];if(o!==undefined){l[k.identity]=o}else{if(d||k.early){l[k.identity]=k.fn.call(l,p,d)}else{e.push(k)}}}if(d){p.body.removeChild(d)}l.toRun=e},PointerEvents:"pointerEvents" in document.documentElement.style,LocalStorage:(function(){try{return"localStorage" in window&&window.localStorage!==null}catch(d){return false}})(),CSS3BoxShadow:"boxShadow" in document.documentElement.style||"WebkitBoxShadow" in document.documentElement.style||"MozBoxShadow" in document.documentElement.style,ClassList:!!document.documentElement.classList,OrientationChange:((typeof window.orientation!="undefined")&&("onorientationchange" in window)),DeviceMotion:("ondevicemotion" in window),Touch:("ontouchstart" in window)&&(!Ext.is.Desktop),TimeoutActualLateness:(function(){setTimeout(function(){Ext.supports.TimeoutActualLateness=arguments.length!==0},0)}()),tests:[{identity:"Transitions",fn:function(k,m){var j=["webkit","Moz","o","ms","khtml"],l="TransitionEnd",d=[j[0]+l,"transitionend",j[2]+l,j[3]+l,j[4]+l],h=j.length,g=0,e=false;for(;g<h;g++){if(a(m,j[g]+"TransitionProperty")){Ext.supports.CSS3Prefix=j[g];Ext.supports.CSS3TransitionEnd=d[g];e=true;break}}return e}},{identity:"RightMargin",fn:function(e,g){var d=e.defaultView;return !(d&&d.getComputedStyle(g.firstChild.firstChild,null).marginRight!="0px")}},{identity:"DisplayChangeInputSelectionBug",early:true,fn:function(){var d=Ext.webKitVersion;return 0<d&&d<533}},{identity:"DisplayChangeTextAreaSelectionBug",early:true,fn:function(){var d=Ext.webKitVersion;return 0<d&&d<534.24}},{identity:"TransparentColor",fn:function(e,g,d){d=e.defaultView;return !(d&&d.getComputedStyle(g.lastChild,null).backgroundColor!="transparent")}},{identity:"ComputedStyle",fn:function(e,g,d){d=e.defaultView;return d&&d.getComputedStyle}},{identity:"Svg",fn:function(d){return !!d.createElementNS&&!!d.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect}},{identity:"Canvas",fn:function(d){return !!d.createElement("canvas").getContext}},{identity:"Vml",fn:function(e){var g=e.createElement("div");g.innerHTML="<!--[if vml]><br/><br/><![endif]-->";return(g.childNodes.length==2)}},{identity:"Float",fn:function(d,e){return !!e.lastChild.style.cssFloat}},{identity:"AudioTag",fn:function(d){return !!d.createElement("audio").canPlayType}},{identity:"History",fn:function(){var d=window.history;return !!(d&&d.pushState)}},{identity:"CSS3DTransform",fn:function(){return(typeof WebKitCSSMatrix!="undefined"&&new WebKitCSSMatrix().hasOwnProperty("m41"))}},{identity:"CSS3LinearGradient",fn:function(k,d){var m="background-image:",l="-webkit-gradient(linear, left top, right bottom, from(black), to(white))",j="linear-gradient(left top, black, white)",h="-moz-"+j,e="-ms-"+j,g="-o-"+j,n=[m+l,m+j,m+h,m+e,m+g];d.style.cssText=n.join(";");return((""+d.style.backgroundImage).indexOf("gradient")!==-1)&&!Ext.isIE9}},{identity:"CSS3BorderRadius",fn:function(h,j){var e=["borderRadius","BorderRadius","MozBorderRadius","WebkitBorderRadius","OBorderRadius","KhtmlBorderRadius"],g=false,d;for(d=0;d<e.length;d++){if(document.body.style[e[d]]!==undefined){return true}}return g}},{identity:"GeoLocation",fn:function(){return(typeof navigator!="undefined"&&"geolocation" in navigator)||(typeof google!="undefined"&&typeof google.gears!="undefined")}},{identity:"MouseEnterLeave",fn:function(d,e){return("onmouseenter" in e&&"onmouseleave" in e)}},{identity:"MouseWheel",fn:function(d,e){return("onmousewheel" in e)}},{identity:"Opacity",fn:function(d,e){if(Ext.isIE6||Ext.isIE7||Ext.isIE8){return false}e.firstChild.style.cssText="opacity:0.73";return e.firstChild.style.opacity=="0.73"}},{identity:"Placeholder",fn:function(d){return"placeholder" in d.createElement("input")}},{identity:"Direct2DBug",fn:function(){return Ext.isString(document.body.style.msTransformOrigin)&&Ext.isIE10m}},{identity:"BoundingClientRect",fn:function(d,e){return Ext.isFunction(e.getBoundingClientRect)}},{identity:"RotatedBoundingClientRect",fn:function(){var d=document.body,e=false,h=document.createElement("div"),g=h.style;if(h.getBoundingClientRect){g.WebkitTransform=g.MozTransform=g.OTransform=g.transform="rotate(90deg)";g.width="100px";g.height="30px";d.appendChild(h);e=h.getBoundingClientRect().height!==100;d.removeChild(h)}return e}},{identity:"IncludePaddingInWidthCalculation",fn:function(d,e){return e.childNodes[1].firstChild.offsetWidth==210}},{identity:"IncludePaddingInHeightCalculation",fn:function(d,e){return e.childNodes[1].firstChild.offsetHeight==210}},{identity:"ArraySort",fn:function(){var d=[1,2,3,4,5].sort(function(){return 0});return d[0]===1&&d[1]===2&&d[2]===3&&d[3]===4&&d[4]===5}},{identity:"Range",fn:function(){return !!document.createRange}},{identity:"CreateContextualFragment",fn:function(){var d=Ext.supports.Range?document.createRange():false;return d&&!!d.createContextualFragment}},{identity:"WindowOnError",fn:function(){return Ext.isIE||Ext.isGecko||Ext.webKitVersion>=534.16}},{identity:"TextAreaMaxLength",fn:function(){var d=document.createElement("textarea");return("maxlength" in d)}},{identity:"GetPositionPercentage",fn:function(d,e){return a(e.childNodes[2],"left")=="10%"}},{identity:"PercentageHeightOverflowBug",fn:function(h){var d=false,g,e;if(Ext.getScrollbarSize().height){e=h.createElement("div");g=e.style;g.height="50px";g.width="50px";g.overflow="auto";g.position="absolute";e.innerHTML=['<div style="display:table;height:100%;">','<div style="width:51px;"></div>',"</div>"].join("");h.body.appendChild(e);if(e.firstChild.offsetHeight===50){d=true}h.body.removeChild(e)}return d}},{identity:"xOriginBug",fn:function(h,j){j.innerHTML='<div id="b1" style="height:100px;width:100px;direction:rtl;position:relative;overflow:scroll"><div id="b2" style="position:relative;width:100%;height:20px;"></div><div id="b3" style="position:absolute;width:20px;height:20px;top:0px;right:0px"></div></div>';var g=document.getElementById("b1").getBoundingClientRect(),e=document.getElementById("b2").getBoundingClientRect(),d=document.getElementById("b3").getBoundingClientRect();return(e.left!==g.left&&d.right!==g.right)}},{identity:"ScrollWidthInlinePaddingBug",fn:function(h){var d=false,g,e;e=h.createElement("div");g=e.style;g.height="50px";g.width="50px";g.padding="10px";g.overflow="hidden";g.position="absolute";e.innerHTML='<span style="display:inline-block;zoom:1;height:60px;width:60px;"></span>';h.body.appendChild(e);if(e.scrollWidth===70){d=true}h.body.removeChild(e);return d}}]}}());Ext.supports.init();Ext.util.DelayedTask=function(e,d,b,h){var g=this,a,c=function(){clearInterval(g.id);g.id=null;e.apply(d,b||[]);Ext.EventManager.idleEvent.fire()};h=typeof h==="boolean"?h:true;g.id=null;g.delay=function(k,m,l,j){if(h){g.cancel()}a=k||a,e=m||e;d=l||d;b=j||b;if(!g.id){g.id=setInterval(c,a)}};g.cancel=function(){if(g.id){clearInterval(g.id);g.id=null}}};(Ext.cmd.derive("Ext.util.Event",Ext.Base,function(){var d=Array.prototype.slice,a=Ext.Array.insert,b=Ext.Array.toArray,c=Ext.util.DelayedTask;return{isEvent:true,suspended:0,noOptions:{},constructor:function(g,e){this.name=e;this.observable=g;this.listeners=[]},addListener:function(p,r,t){var n=this,o,j,q,e,s,m,h,l,k,g;r=r||n.observable;if(!n.isListening(p,r)){j=n.createListener(p,r,t);if(n.firing){n.listeners=n.listeners.slice(0)}o=n.listeners;l=h=o.length;q=t&&t.priority;s=n._highestNegativePriorityIndex;m=(s!==undefined);if(q){e=(q<0);if(!e||m){for(k=(e?s:0);k<h;k++){g=o[k].o?o[k].o.priority||0:0;if(g<q){l=k;break}}}else{n._highestNegativePriorityIndex=l}}else{if(m){l=s}}if(!e&&l<=s){n._highestNegativePriorityIndex++}if(l===h){n.listeners[h]=j}else{a(n.listeners,l,[j])}}},createListener:function(h,g,l){g=g||this.observable;var j=this,k={fn:h,scope:g,ev:j},e=h;if(l){k.o=l;if(l.single){e=j.createSingle(e,k,l,g)}if(l.target){e=j.createTargeted(e,k,l,g)}if(l.delay){e=j.createDelayed(e,k,l,g)}if(l.buffer){e=j.createBuffered(e,k,l,g)}}k.fireFn=e;return k},findListener:function(k,j){var h=this.listeners,e=h.length,l,g;while(e--){l=h[e];if(l){g=l.scope;if(l.fn==k&&(g==(j||this.observable))){return e}}}return -1},isListening:function(g,e){return this.findListener(g,e)!==-1},removeListener:function(j,h){var l=this,g,n,m,e;g=l.findListener(j,h);if(g!=-1){n=l.listeners[g];m=l._highestNegativePriorityIndex;if(l.firing){l.listeners=l.listeners.slice(0)}if(n.task){n.task.cancel();delete n.task}e=n.tasks&&n.tasks.length;if(e){while(e--){n.tasks[e].cancel()}delete n.tasks}l.listeners.splice(g,1);if(m){if(g<m){l._highestNegativePriorityIndex--}else{if(g===m&&g===l.listeners.length){delete l._highestNegativePriorityIndex}}}return true}return false},clearListeners:function(){var g=this.listeners,e=g.length;while(e--){this.removeListener(g[e].fn,g[e].scope)}},suspend:function(){this.suspended+=1},resume:function(){if(this.suspended){this.suspended--}},fire:function(){var l=this,j=l.listeners,k=j.length,h,g,m,e;if(!l.suspended&&k>0){l.firing=true;g=arguments.length?d.call(arguments,0):[];e=g.length;for(h=0;h<k;h++){m=j[h];if(m.o){g[e]=m.o}if(m&&m.fireFn.apply(m.scope||l.observable,g)===false){return(l.firing=false)}}}l.firing=false;return true},createTargeted:function(g,h,j,e){return function(){if(j.target===arguments[0]){g.apply(e,arguments)}}},createBuffered:function(g,h,j,e){h.task=new c();return function(){h.task.delay(j.buffer,g,e,b(arguments))}},createDelayed:function(g,h,j,e){return function(){var k=new c();if(!h.tasks){h.tasks=[]}h.tasks.push(k);k.delay(j.delay||10,g,e,b(arguments))}},createSingle:function(g,h,j,e){return function(){var k=h.ev;if(k.removeListener(h.fn,e)&&k.observable){k.observable.hasListeners[k.name]--}return g.apply(e,arguments)}}}},1,0,0,0,0,0,[Ext.util,"Event"],0));Ext.EventManager=new function(){var b=this,h=document,g=window,e=/\\/g,c=Ext.baseCSSPrefix,a=!Ext.isIE9&&"addEventListener" in h,j,d=function(){var p=h.body||h.getElementsByTagName("body")[0],l=[c+"body"],k=[],m=Ext.supports.CSS3LinearGradient,o=Ext.supports.CSS3BorderRadius,n;if(!p){return false}n=p.parentNode;function q(r){l.push(c+r)}if(Ext.isIE&&Ext.isIE9m){q("ie");if(Ext.isIE6){q("ie6")}else{q("ie7p");if(Ext.isIE7){q("ie7")}else{q("ie8p");if(Ext.isIE8){q("ie8")}else{q("ie9p");if(Ext.isIE9){q("ie9")}}}}if(Ext.isIE7m){q("ie7m")}if(Ext.isIE8m){q("ie8m")}if(Ext.isIE9m){q("ie9m")}if(Ext.isIE7||Ext.isIE8){q("ie78")}}if(Ext.isIE10){q("ie10")}if(Ext.isGecko){q("gecko");if(Ext.isGecko3){q("gecko3")}if(Ext.isGecko4){q("gecko4")}if(Ext.isGecko5){q("gecko5")}}if(Ext.isOpera){q("opera")}if(Ext.isWebKit){q("webkit")}if(Ext.isSafari){q("safari");if(Ext.isSafari2){q("safari2")}if(Ext.isSafari3){q("safari3")}if(Ext.isSafari4){q("safari4")}if(Ext.isSafari5){q("safari5")}if(Ext.isSafari5_0){q("safari5_0")}}if(Ext.isChrome){q("chrome")}if(Ext.isMac){q("mac")}if(Ext.isLinux){q("linux")}if(!o){q("nbr")}if(!m){q("nlg")}if(n){if(Ext.isStrict&&(Ext.isIE6||Ext.isIE7)){Ext.isBorderBox=false}else{Ext.isBorderBox=true}if(!Ext.isBorderBox){k.push(c+"content-box")}if(Ext.isStrict){k.push(c+"strict")}else{k.push(c+"quirks")}Ext.fly(n,"_internal").addCls(k)}Ext.fly(p,"_internal").addCls(l);return true};Ext.apply(b,{hasBoundOnReady:false,hasFiredReady:false,deferReadyEvent:1,onReadyChain:[],readyEvent:(function(){j=new Ext.util.Event();j.fire=function(){Ext._beforeReadyTime=Ext._beforeReadyTime||new Date().getTime();j.self.prototype.fire.apply(j,arguments);Ext._afterReadytime=new Date().getTime()};return j}()),idleEvent:new Ext.util.Event(),isReadyPaused:function(){return(/[?&]ext-pauseReadyFire\b/i.test(location.search)&&!Ext._continueFireReady)},bindReadyEvent:function(){if(b.hasBoundOnReady){return}if(h.readyState=="complete"){b.onReadyEvent({type:h.readyState||"body"})}else{h.addEventListener("DOMContentLoaded",b.onReadyEvent,false);g.addEventListener("load",b.onReadyEvent,false);b.hasBoundOnReady=true}},onReadyEvent:function(k){if(k&&k.type){b.onReadyChain.push(k.type)}if(b.hasBoundOnReady){h.removeEventListener("DOMContentLoaded",b.onReadyEvent,false);g.removeEventListener("load",b.onReadyEvent,false)}if(!Ext.isReady){b.fireDocReady()}},fireDocReady:function(){if(!Ext.isReady){Ext._readyTime=new Date().getTime();Ext.isReady=true;Ext.supports.init();b.onWindowUnload();j.onReadyChain=b.onReadyChain;if(Ext.isNumber(b.deferReadyEvent)){Ext.Function.defer(b.fireReadyEvent,b.deferReadyEvent);b.hasDocReadyTimer=true}else{b.fireReadyEvent()}}},fireReadyEvent:function(){b.hasDocReadyTimer=false;b.isFiring=true;while(j.listeners.length&&!b.isReadyPaused()){j.fire()}b.isFiring=false;b.hasFiredReady=true;Ext.EventManager.idleEvent.fire()},onDocumentReady:function(m,l,k){k=k||{};k.single=true;j.addListener(m,l,k);if(!(b.isFiring||b.hasDocReadyTimer)){if(Ext.isReady){b.fireReadyEvent()}else{b.bindReadyEvent()}}},stoppedMouseDownEvent:new Ext.util.Event(),propRe:/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate|freezeEvent)$/,getId:function(k){var l;k=Ext.getDom(k);if(k===h||k===g){l=k===h?Ext.documentId:Ext.windowId}else{l=Ext.id(k)}if(!Ext.cache[l]){Ext.addCacheEntry(l,null,k)}return l},prepareListenerConfig:function(n,l,p){var q=b.propRe,m,o,k;for(m in l){if(l.hasOwnProperty(m)){if(!q.test(m)){o=l[m];if(typeof o=="function"){k=[n,m,o,l.scope,l]}else{k=[n,m,o.fn,o.scope,o]}if(p){b.removeListener.apply(b,k)}else{b.addListener.apply(b,k)}}}}},mouseEnterLeaveRe:/mouseenter|mouseleave/,normalizeEvent:function(k,l){if(b.mouseEnterLeaveRe.test(k)&&!Ext.supports.MouseEnterLeave){if(l){l=Ext.Function.createInterceptor(l,b.contains)}k=k=="mouseenter"?"mouseover":"mouseout"}else{if(k=="mousewheel"&&!Ext.supports.MouseWheel&&!Ext.isOpera){k="DOMMouseScroll"}}return{eventName:k,fn:l}},contains:function(l){l=l.browserEvent||l;var k=l.currentTarget,m=b.getRelatedTarget(l);if(k&&k.firstChild){while(m){if(m===k){return false}m=m.parentNode;if(m&&(m.nodeType!=1)){m=null}}}return true},addListener:function(o,q,t,v,w){if(typeof q!=="string"){b.prepareListenerConfig(o,q);return}var n=o.dom||Ext.getDom(o),r,s,m,k,l,p,u;if(typeof t==="string"){t=Ext.resolveMethod(t,v||o)}w=w||{};s=b.normalizeEvent(q,t);m=b.createListenerWrap(n,q,s.fn,v,w);k=b.getEventListenerCache(o.dom?o:n,q);q=s.eventName;r=a||(Ext.isIE9&&!n.attachEvent);if(!r){l=b.normalizeId(n);if(l){p=Ext.cache[l][q];if(p&&p.firing){k=b.cloneEventListenerCache(n,q)}}}u=!!w.capture;k.push({fn:t,wrap:m,scope:v,capture:u});if(!r){if(k.length===1){l=b.normalizeId(n,true);t=Ext.Function.bind(b.handleSingleEvent,b,[l,q],true);Ext.cache[l][q]={firing:false,fn:t};n.attachEvent("on"+q,t)}}else{n.addEventListener(q,m,u)}if(n==h&&q=="mousedown"){b.stoppedMouseDownEvent.addListener(m)}},normalizeId:function(l,k){var m;if(l===document){m=Ext.documentId}else{if(l===window){m=Ext.windowId}else{m=l.id}}if(!m&&k){m=b.getId(l)}return m},handleSingleEvent:function(p,q,m){var n=b.getEventListenerCache(q,m),l=Ext.cache[q][m],k,o;if(l.firing){return}l.firing=true;for(o=0,k=n.length;o<k;++o){n[o].wrap(p)}l.firing=false},removeListener:function(t,v,w,y){if(typeof v!=="string"){b.prepareListenerConfig(t,v,true);return}var r=Ext.getDom(t),m,n=t.dom?t:Ext.get(r),k=b.getEventListenerCache(n,v),x=b.normalizeEvent(v).eventName,s=k.length,q,u,p,o,l;if(!r){return}p=a||(Ext.isIE9&&!r.detachEvent);if(typeof w==="string"){w=Ext.resolveMethod(w,y||t)}while(s--){o=k[s];if(o&&(!w||o.fn==w)&&(!y||o.scope===y)){l=o.wrap;if(l.task){clearTimeout(l.task);delete l.task}q=l.tasks&&l.tasks.length;if(q){while(q--){clearTimeout(l.tasks[q])}delete l.tasks}if(!p){m=b.normalizeId(r,true);u=Ext.cache[m][x];if(u&&u.firing){k=b.cloneEventListenerCache(r,x)}if(k.length===1){w=u.fn;delete Ext.cache[m][x];r.detachEvent("on"+x,w)}}else{r.removeEventListener(x,l,o.capture)}if(l&&r==h&&v=="mousedown"){b.stoppedMouseDownEvent.removeListener(l)}Ext.Array.erase(k,s,1)}}},removeAll:function(n){var o=(typeof n==="string")?n:n.id,l,m,k;if(o&&(l=Ext.cache[o])){m=l.events;for(k in m){if(m.hasOwnProperty(k)){b.removeListener(n,k)}}l.events={}}},purgeElement:function(n,l){var p=Ext.getDom(n),m=0,k,o;if(l){b.removeListener(n,l)}else{b.removeAll(n)}if(p&&p.childNodes){o=p.childNodes;for(k=o.length;m<k;m++){b.purgeElement(o[m],l)}}},createListenerWrap:function(r,l,o,n,k){k=k||{};var p,q,m=function(t,s){if(!q){p=["if(!"+Ext.name+") {return;}"];if(k.buffer||k.delay||k.freezeEvent){if(k.freezeEvent){p.push("e = X.EventObject.setEvent(e);")}p.push("e = new X.EventObjectImpl(e, "+(k.freezeEvent?"true":"false")+");")}else{p.push("e = X.EventObject.setEvent(e);")}if(k.delegate){p.push('var result, t = e.getTarget("'+(k.delegate+"").replace(e,"\\\\")+'", this);');p.push("if(!t) {return;}")}else{p.push("var t = e.target, result;")}if(k.target){p.push("if(e.target !== options.target) {return;}")}if(k.stopEvent){p.push("e.stopEvent();")}else{if(k.preventDefault){p.push("e.preventDefault();")}if(k.stopPropagation){p.push("e.stopPropagation();")}}if(k.normalized===false){p.push("e = e.browserEvent;")}if(k.buffer){p.push("(wrap.task && clearTimeout(wrap.task));");p.push("wrap.task = setTimeout(function() {")}if(k.delay){p.push("wrap.tasks = wrap.tasks || [];");p.push("wrap.tasks.push(setTimeout(function() {")}p.push("result = fn.call(scope || dom, e, t, options);");if(k.single){p.push("evtMgr.removeListener(dom, ename, fn, scope);")}if(l!=="mousemove"&&l!=="unload"){p.push("if (evtMgr.idleEvent.listeners.length) {");p.push("evtMgr.idleEvent.fire();");p.push("}")}if(k.delay){p.push("}, "+k.delay+"));")}if(k.buffer){p.push("}, "+k.buffer+");")}p.push("return result;");q=Ext.cacheableFunctionFactory("e","options","fn","scope","ename","dom","wrap","args","X","evtMgr",p.join("\n"))}return q.call(r,t,k,o,n,l,r,m,s,Ext,b)};return m},getEventCache:function(m){var l,k,n;if(!m){return[]}if(m.$cache){l=m.$cache}else{if(typeof m==="string"){n=m}else{n=b.getId(m)}l=Ext.cache[n]}k=l.events||(l.events={});return k},getEventListenerCache:function(m,k){var l=b.getEventCache(m);return l[k]||(l[k]=[])},cloneEventListenerCache:function(n,k){var m=b.getEventCache(n),l;if(m[k]){l=m[k].slice(0)}else{l=[]}m[k]=l;return l},mouseLeaveRe:/(mouseout|mouseleave)/,mouseEnterRe:/(mouseover|mouseenter)/,stopEvent:function(k){b.stopPropagation(k);b.preventDefault(k)},stopPropagation:function(k){k=k.browserEvent||k;if(k.stopPropagation){k.stopPropagation()}else{k.cancelBubble=true}},preventDefault:function(k){k=k.browserEvent||k;if(k.preventDefault){k.preventDef
|