From 00fea8dd071a892dace340a648c226e229679a32 Mon Sep 17 00:00:00 2001 From: Syam Mohan Date: Tue, 7 Oct 2014 15:31:35 +0530 Subject: [PATCH] 2.0.0 files added --- .../Block/Adminhtml/Catalog/Product/Grid.php | 68 ++++ .../MarketPlace/Block/Adminhtml/Order.php | 32 ++ .../Block/Adminhtml/Order/Empty.php | 33 ++ .../Block/Adminhtml/Order/Form.php | 139 +++++++ .../Block/Adminhtml/Order/Form/Info.php | 62 +++ .../Block/Adminhtml/Order/Form/Items.php | 84 +++++ .../Block/Adminhtml/Order/Form/Totals.php | 29 ++ .../Block/Adminhtml/Order/Grid.php | 132 +++++++ .../MarketPlace/Block/Adminhtml/Prooftype.php | 32 ++ .../Block/Adminhtml/Prooftype/Edit.php | 41 ++ .../Block/Adminhtml/Prooftype/Edit/Form.php | 64 ++++ .../Block/Adminhtml/Prooftype/Grid.php | 76 ++++ .../MarketPlace/Block/Adminhtml/Rating.php | 32 ++ .../Block/Adminhtml/Rating/Edit.php | 41 ++ .../Block/Adminhtml/Rating/Edit/Form.php | 73 ++++ .../Block/Adminhtml/Rating/Grid.php | 83 ++++ .../MarketPlace/Block/Adminhtml/Review.php | 34 ++ .../Block/Adminhtml/Review/Edit.php | 41 ++ .../Block/Adminhtml/Review/Edit/Form.php | 88 +++++ .../Block/Adminhtml/Review/Empty.php | 33 ++ .../Block/Adminhtml/Review/Grid.php | 170 +++++++++ .../Adminhtml/Review/Renderer/Product.php | 35 ++ .../Adminhtml/Review/Renderer/Vendor.php | 36 ++ .../Adminhtml/System/Account/Edit/Form.php | 263 +++++++++++++ .../Block/Adminhtml/Transaction.php | 58 +++ .../Block/Adminhtml/Transaction/Edit.php | 47 +++ .../Block/Adminhtml/Transaction/Edit/Form.php | 74 ++++ .../Block/Adminhtml/Transaction/Empty.php | 33 ++ .../Block/Adminhtml/Transaction/Items.php | 38 ++ .../MarketPlace/Block/Adminhtml/Vendor.php | 33 ++ .../Block/Adminhtml/Vendor/Edit.php | 41 ++ .../Block/Adminhtml/Vendor/Edit/Form.php | 299 +++++++++++++++ .../Block/Adminhtml/Vendor/Grid.php | 116 ++++++ .../Block/Catalog/Product/Vendor/Sidebar.php | 56 +++ .../Sales/Order/Item/Renderer/Default.php | 66 ++++ .../MarketPlace/Block/Vendor/Favourite.php | 82 ++++ .../MarketPlace/Block/Vendor/Profile.php | 138 +++++++ .../Block/Vendor/Profile/Items.php | 73 ++++ .../Block/Vendor/Profile/Latest.php | 61 +++ .../Block/Vendor/Profile/Reviews.php | 128 +++++++ .../MarketPlace/Block/Vendor/Ratings.php | 50 +++ .../MarketPlace/Block/Vendor/Register.php | 45 +++ .../MarketPlace/Block/Vendor/Reviews.php | 41 ++ .../Medma/MarketPlace/Helper/Data.php | 58 +++ .../Medma/MarketPlace/Model/Authenticate.php | 2 + .../MarketPlace/Model/Mysql4/Profile.php | 30 ++ .../Model/Mysql4/Profile/Collection.php | 30 ++ .../MarketPlace/Model/Mysql4/Prooftype.php | 30 ++ .../Model/Mysql4/Prooftype/Collection.php | 30 ++ .../Medma/MarketPlace/Model/Mysql4/Rate.php | 30 ++ .../Model/Mysql4/Rate/Collection.php | 30 ++ .../Medma/MarketPlace/Model/Mysql4/Rating.php | 30 ++ .../Model/Mysql4/Rating/Collection.php | 30 ++ .../Medma/MarketPlace/Model/Mysql4/Review.php | 30 ++ .../Model/Mysql4/Review/Collection.php | 30 ++ .../MarketPlace/Model/Mysql4/Transaction.php | 30 ++ .../Model/Mysql4/Transaction/Collection.php | 30 ++ .../Medma/MarketPlace/Model/Observer.php | 40 ++ .../Model/Product/Attribute/Source/Vendor.php | 51 +++ .../MarketPlace/Model/Product/Observer.php | 43 +++ .../Medma/MarketPlace/Model/Profile.php | 30 ++ .../MarketPlace/Model/Profile/Products.php | 41 ++ .../Medma/MarketPlace/Model/Prooftype.php | 30 ++ .../Medma/MarketPlace/Model/Rate.php | 30 ++ .../Medma/MarketPlace/Model/Rating.php | 30 ++ .../Medma/MarketPlace/Model/Review.php | 39 ++ .../Model/System/Config/Source/Roles.php | 42 +++ .../Medma/MarketPlace/Model/Transaction.php | 33 ++ .../Medma/MarketPlace/Model/Vendor.php | 33 ++ .../Core/System/AccountController.php | 113 ++++++ .../controllers/Adminhtml/OrderController.php | 223 +++++++++++ .../Adminhtml/ProoftypeController.php | 115 ++++++ .../Adminhtml/RatingController.php | 115 ++++++ .../Adminhtml/ReviewController.php | 223 +++++++++++ .../Adminhtml/TransactionController.php | 153 ++++++++ .../Adminhtml/VendorController.php | 195 ++++++++++ .../controllers/FavouriteController.php | 99 +++++ .../controllers/RatingController.php | 59 +++ .../controllers/VendorController.php | 136 +++++++ .../Medma/MarketPlace/etc/config.xml | 272 ++++++++++++++ .../Medma/MarketPlace/etc/system.xml | 66 ++++ .../mysql4-install-1.0.0.php | 38 ++ .../mysql4-upgrade-1.0.0-1.0.1.php | 64 ++++ .../mysql4-upgrade-1.0.1-1.0.2.php | 49 +++ .../mysql4-upgrade-1.0.2-1.0.3.php | 51 +++ .../mysql4-upgrade-1.0.3-1.0.4.php | 33 ++ .../mysql4-upgrade-1.0.4-1.0.5.php | 49 +++ .../mysql4-upgrade-1.0.5-1.0.6 .php | 33 ++ .../mysql4-upgrade-1.0.6-1.0.7.php | 35 ++ .../mysql4-upgrade-1.0.7-1.0.8.php | 44 +++ .../mysql4-upgrade-1.0.8-1.0.9.php | 53 +++ .../mysql4-upgrade-1.0.9-2.0.0.php | 91 +++++ .../default/default/layout/marketplace.xml | 17 + .../marketplace/catalog/product/edit.phtml | 142 +++++++ .../marketplace/sales/order/empty.phtml | 43 +++ .../marketplace/sales/order/view/form.phtml | 119 ++++++ .../sales/order/view/form/info.phtml | 170 +++++++++ .../sales/order/view/form/items.phtml | 119 ++++++ .../sales/order/view/form/totals.phtml | 51 +++ .../marketplace/vendor/review/empty.phtml | 43 +++ .../marketplace/vendor/transaction.phtml | 42 +++ .../vendor/transaction/empty.phtml | 43 +++ .../vendor/transaction/items.phtml | 74 ++++ .../base/default/layout/marketplace.xml | 92 +++++ .../catalog/product/vendor/sidebar.phtml | 46 +++ .../marketplace/sales/order/items.phtml | 76 ++++ .../sales/order/items/renderer/default.phtml | 355 ++++++++++++++++++ .../marketplace/vendor/favourite.phtml | 63 ++++ .../template/marketplace/vendor/profile.phtml | 96 +++++ .../marketplace/vendor/profile/items.phtml | 123 ++++++ .../marketplace/vendor/profile/latest.phtml | 90 +++++ .../marketplace/vendor/profile/reviews.phtml | 75 ++++ .../template/marketplace/vendor/ratings.phtml | 63 ++++ .../marketplace/vendor/register.phtml | 172 +++++++++ .../template/marketplace/vendor/reviews.phtml | 84 +++++ app/etc/modules/Medma_MarketPlace.xml | 9 + media/marketplace/vendor/images/default.jpg | Bin 0 -> 2774 bytes package.xml | 21 ++ .../marketplace/css/images/best_selling.png | Bin 0 -> 14910 bytes .../marketplace/css/images/contact_icon.png | Bin 0 -> 235 bytes .../marketplace/css/images/items_icon.png | Bin 0 -> 365 bytes .../marketplace/css/images/location_icon.png | Bin 0 -> 317 bytes .../marketplace/css/images/negative.png | Bin 0 -> 21882 bytes .../marketplace/css/images/neutral.png | Bin 0 -> 20345 bytes .../marketplace/css/images/positive.png | Bin 0 -> 23148 bytes .../marketplace/css/images/rating_blank.png | Bin 0 -> 28664 bytes .../marketplace/css/images/rating_filled.png | Bin 0 -> 34456 bytes .../base/default/marketplace/css/styles.css | 105 ++++++ 128 files changed, 8704 insertions(+) create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Catalog/Product/Grid.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Order.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Empty.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Form.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Form/Info.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Form/Items.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Form/Totals.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Grid.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Prooftype.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Prooftype/Edit.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Prooftype/Edit/Form.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Prooftype/Grid.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Rating.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Rating/Edit.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Rating/Edit/Form.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Rating/Grid.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Review.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Edit.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Edit/Form.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Empty.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Grid.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Renderer/Product.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Renderer/Vendor.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/System/Account/Edit/Form.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction/Edit.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction/Edit/Form.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction/Empty.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction/Items.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Vendor.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Vendor/Edit.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Vendor/Edit/Form.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Adminhtml/Vendor/Grid.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Catalog/Product/Vendor/Sidebar.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Sales/Order/Item/Renderer/Default.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Vendor/Favourite.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Vendor/Profile.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Vendor/Profile/Items.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Vendor/Profile/Latest.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Vendor/Profile/Reviews.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Vendor/Ratings.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Vendor/Register.php create mode 100644 app/code/community/Medma/MarketPlace/Block/Vendor/Reviews.php create mode 100644 app/code/community/Medma/MarketPlace/Helper/Data.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Authenticate.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Mysql4/Profile.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Mysql4/Profile/Collection.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Mysql4/Prooftype.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Mysql4/Prooftype/Collection.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Mysql4/Rate.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Mysql4/Rate/Collection.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Mysql4/Rating.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Mysql4/Rating/Collection.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Mysql4/Review.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Mysql4/Review/Collection.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Mysql4/Transaction.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Mysql4/Transaction/Collection.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Observer.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Product/Attribute/Source/Vendor.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Product/Observer.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Profile.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Profile/Products.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Prooftype.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Rate.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Rating.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Review.php create mode 100644 app/code/community/Medma/MarketPlace/Model/System/Config/Source/Roles.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Transaction.php create mode 100644 app/code/community/Medma/MarketPlace/Model/Vendor.php create mode 100644 app/code/community/Medma/MarketPlace/controllers/Adminhtml/Core/System/AccountController.php create mode 100644 app/code/community/Medma/MarketPlace/controllers/Adminhtml/OrderController.php create mode 100644 app/code/community/Medma/MarketPlace/controllers/Adminhtml/ProoftypeController.php create mode 100644 app/code/community/Medma/MarketPlace/controllers/Adminhtml/RatingController.php create mode 100644 app/code/community/Medma/MarketPlace/controllers/Adminhtml/ReviewController.php create mode 100644 app/code/community/Medma/MarketPlace/controllers/Adminhtml/TransactionController.php create mode 100644 app/code/community/Medma/MarketPlace/controllers/Adminhtml/VendorController.php create mode 100644 app/code/community/Medma/MarketPlace/controllers/FavouriteController.php create mode 100644 app/code/community/Medma/MarketPlace/controllers/RatingController.php create mode 100644 app/code/community/Medma/MarketPlace/controllers/VendorController.php create mode 100644 app/code/community/Medma/MarketPlace/etc/config.xml create mode 100644 app/code/community/Medma/MarketPlace/etc/system.xml create mode 100644 app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-install-1.0.0.php create mode 100644 app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.0-1.0.1.php create mode 100644 app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.1-1.0.2.php create mode 100644 app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.2-1.0.3.php create mode 100644 app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.3-1.0.4.php create mode 100644 app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.4-1.0.5.php create mode 100644 app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.5-1.0.6 .php create mode 100644 app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.6-1.0.7.php create mode 100644 app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.7-1.0.8.php create mode 100644 app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.8-1.0.9.php create mode 100644 app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.9-2.0.0.php create mode 100644 app/design/adminhtml/default/default/layout/marketplace.xml create mode 100644 app/design/adminhtml/default/default/template/marketplace/catalog/product/edit.phtml create mode 100644 app/design/adminhtml/default/default/template/marketplace/sales/order/empty.phtml create mode 100644 app/design/adminhtml/default/default/template/marketplace/sales/order/view/form.phtml create mode 100644 app/design/adminhtml/default/default/template/marketplace/sales/order/view/form/info.phtml create mode 100644 app/design/adminhtml/default/default/template/marketplace/sales/order/view/form/items.phtml create mode 100644 app/design/adminhtml/default/default/template/marketplace/sales/order/view/form/totals.phtml create mode 100644 app/design/adminhtml/default/default/template/marketplace/vendor/review/empty.phtml create mode 100644 app/design/adminhtml/default/default/template/marketplace/vendor/transaction.phtml create mode 100644 app/design/adminhtml/default/default/template/marketplace/vendor/transaction/empty.phtml create mode 100644 app/design/adminhtml/default/default/template/marketplace/vendor/transaction/items.phtml create mode 100644 app/design/frontend/base/default/layout/marketplace.xml create mode 100644 app/design/frontend/base/default/template/marketplace/catalog/product/vendor/sidebar.phtml create mode 100644 app/design/frontend/base/default/template/marketplace/sales/order/items.phtml create mode 100644 app/design/frontend/base/default/template/marketplace/sales/order/items/renderer/default.phtml create mode 100644 app/design/frontend/base/default/template/marketplace/vendor/favourite.phtml create mode 100644 app/design/frontend/base/default/template/marketplace/vendor/profile.phtml create mode 100644 app/design/frontend/base/default/template/marketplace/vendor/profile/items.phtml create mode 100644 app/design/frontend/base/default/template/marketplace/vendor/profile/latest.phtml create mode 100644 app/design/frontend/base/default/template/marketplace/vendor/profile/reviews.phtml create mode 100644 app/design/frontend/base/default/template/marketplace/vendor/ratings.phtml create mode 100644 app/design/frontend/base/default/template/marketplace/vendor/register.phtml create mode 100644 app/design/frontend/base/default/template/marketplace/vendor/reviews.phtml create mode 100644 app/etc/modules/Medma_MarketPlace.xml create mode 100644 media/marketplace/vendor/images/default.jpg create mode 100644 package.xml create mode 100644 skin/frontend/base/default/marketplace/css/images/best_selling.png create mode 100644 skin/frontend/base/default/marketplace/css/images/contact_icon.png create mode 100644 skin/frontend/base/default/marketplace/css/images/items_icon.png create mode 100644 skin/frontend/base/default/marketplace/css/images/location_icon.png create mode 100644 skin/frontend/base/default/marketplace/css/images/negative.png create mode 100644 skin/frontend/base/default/marketplace/css/images/neutral.png create mode 100644 skin/frontend/base/default/marketplace/css/images/positive.png create mode 100644 skin/frontend/base/default/marketplace/css/images/rating_blank.png create mode 100644 skin/frontend/base/default/marketplace/css/images/rating_filled.png create mode 100644 skin/frontend/base/default/marketplace/css/styles.css diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Catalog/Product/Grid.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Catalog/Product/Grid.php new file mode 100644 index 0000000..7c7122b --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Catalog/Product/Grid.php @@ -0,0 +1,68 @@ +setMassactionIdField('entity_id'); + $this->getMassactionBlock()->setFormFieldName('product'); + + $this->getMassactionBlock()->addItem('delete', array( + 'label'=> Mage::helper('catalog')->__('Delete'), + 'url' => $this->getUrl('*/*/massDelete'), + 'confirm' => Mage::helper('catalog')->__('Are you sure?') + )); + + $statuses = Mage::getSingleton('catalog/product_status')->getOptionArray(); + + $roleId = Mage::helper('marketplace')->getConfig('general', 'vendor_role'); + + $current_user = Mage::getSingleton('admin/session')->getUser(); + + if ($current_user->getRole()->getRoleId() == $roleId) + $statuses = array(Mage_Catalog_Model_Product_Status::STATUS_DISABLED => Mage::helper('catalog')->__('Disabled')); + + array_unshift($statuses, array('label'=>'', 'value'=>'')); + $this->getMassactionBlock()->addItem('status', array( + 'label'=> Mage::helper('catalog')->__('Change status'), + 'url' => $this->getUrl('*/*/massStatus', array('_current'=>true)), + 'additional' => array( + 'visibility' => array( + 'name' => 'status', + 'type' => 'select', + 'class' => 'required-entry', + 'label' => Mage::helper('catalog')->__('Status'), + 'values' => $statuses + ) + ) + )); + + if (Mage::getSingleton('admin/session')->isAllowed('catalog/update_attributes')){ + $this->getMassactionBlock()->addItem('attributes', array( + 'label' => Mage::helper('catalog')->__('Update Attributes'), + 'url' => $this->getUrl('*/catalog_product_action_attribute/edit', array('_current'=>true)) + )); + } + + Mage::dispatchEvent('adminhtml_catalog_product_grid_prepare_massaction', array('block' => $this)); + return $this; + } +} +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order.php new file mode 100644 index 0000000..d0fcdb5 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order.php @@ -0,0 +1,32 @@ +_controller = 'adminhtml_order'; + $this->_blockGroup = 'marketplace'; + $this->_headerText = Mage::helper('marketplace')->__('Orders'); + $this->_removeButton('add'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Empty.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Empty.php new file mode 100644 index 0000000..77bf35f --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Empty.php @@ -0,0 +1,33 @@ +setTemplate('marketplace/sales/order/empty.phtml'); + return parent::_prepareLayout(); + } + + public function getSalesOrderUrl() + { + return $this->getUrl('adminhtml/sales_order/index', array('_current' => true)); + } +} +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Form.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Form.php new file mode 100644 index 0000000..57ce328 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Form.php @@ -0,0 +1,139 @@ +setTemplate('marketplace/sales/order/view/form.phtml'); + parent::__construct(); + } + + public function getHeaderText() { + if (Mage::registry('current_order') && Mage::registry('current_order')->getId()) { + return Mage::helper('marketplace')->__("Order # %s | %s", $this->getOrder()->getIncrementId(), $this->formatDate($this->getOrder()->getCreatedAtDate(), 'medium', true) + ); + } + } + + public function getOrder() { + return Mage::registry('current_order'); + } + + public function getPaymentHtml() { + return $this->getChildHtml('order_payment'); + } + + public function getGiftmessageHtml() { + return $this->getChildHtml('order_giftmessage'); + } + + public function displayPriceAttribute($code, $strong = false, $separator = '
') { + return Mage::helper('adminhtml/sales')->displayPriceAttribute($this->getPriceDataObject(), $code, $strong, $separator); + } + + public function getPriceDataObject() { + $obj = null; + if (is_null($obj)) { + return $this->getOrder(); + } + return $obj; + } + + public function displayShippingPriceInclTax($order) { + $shipping = $order->getShippingInclTax(); + if ($shipping) { + $baseShipping = $order->getBaseShippingInclTax(); + } else { + $shipping = $order->getShippingAmount() + $order->getShippingTaxAmount(); + $baseShipping = $order->getBaseShippingAmount() + $order->getBaseShippingTaxAmount(); + } + return $this->displayPrices($baseShipping, $shipping, false, ' '); + } + + public function displayPrices($basePrice, $price, $strong = false, $separator = '
') { + return Mage::helper('adminhtml/sales')->displayPrices($this->getPriceDataObject(), $basePrice, $price, $strong, $separator); + } + + public function getBackUrl() { + return Mage::helper('adminhtml')->getUrl('*/*/index'); + } + + public function getShipUrl() { + return Mage::helper('adminhtml')->getUrl('*/*/ship') . 'order_id/' . $this->getOrder()->getId(); + } + + public function getInvoiceUrl() { + return Mage::helper('adminhtml')->getUrl('*/*/invoice') . 'order_id/' . $this->getOrder()->getId(); + } + + public function isShipButtonDisplay() { + $roleId = Mage::helper('marketplace')->getConfig('general', 'vendor_role'); + + // $role = Mage::getModel('admin/roles')->load($roleId); + + $current_user = Mage::getSingleton('admin/session')->getUser(); + + if ($current_user->getRole()->getRoleId() == $roleId) { + $productIds = $this->getProductIdsCollection(); + + foreach ($this->getOrder()->getAllItems() as $item) { + if (in_array($item->getProductId(), $productIds) && $item->canShip()) + return true; + } + } + return false; + } + + public function isInvoiceButtonDisplay() { + $roleId = Mage::helper('marketplace')->getConfig('general', 'vendor_role'); + + // $role = Mage::getModel('admin/roles')->load($roleId); + + $current_user = Mage::getSingleton('admin/session')->getUser(); + + if ($current_user->getRole()->getRoleId() == $roleId) { + $productIds = $this->getProductIdsCollection(); + + foreach ($this->getOrder()->getAllItems() as $item) { + if (in_array($item->getProductId(), $productIds) && $item->canInvoice()) + return true; + } + } + return false; + } + + public function getProductIdsCollection() { + $roleId = Mage::helper('marketplace')->getConfig('general', 'vendor_role'); + + // $role = Mage::getModel('admin/roles')->load($roleId); + + $current_user = Mage::getSingleton('admin/session')->getUser(); + + $collection = Mage::getModel('catalog/product')->getCollection() + ->addAttributeToFilter('status', 1); + + if ($current_user->getRole()->getRoleId() == $roleId) + $collection->addAttributeToFilter('vendor', $current_user->getId()); + + return $collection->getAllIds(); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Form/Info.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Form/Info.php new file mode 100644 index 0000000..3e59f1a --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Form/Info.php @@ -0,0 +1,62 @@ +setTemplate('marketplace/sales/order/view/form/info.phtml'); + parent::__construct(); + } + + public function getOrder() { + return Mage::registry('current_order'); + } + + public function shouldDisplayCustomerIp() { + return !Mage::getStoreConfigFlag('sales/general/hide_customer_ip', $this->getOrder()->getStoreId()); + } + + public function getCustomerGroupName() { + if ($this->getOrder()) { + return Mage::getModel('customer/group')->load((int) $this->getOrder()->getCustomerGroupId())->getCode(); + } + return null; + } + + public function getOrderStoreName() { + if ($this->getOrder()) { + $storeId = $this->getOrder()->getStoreId(); + if (is_null($storeId)) { + $deleted = Mage::helper('adminhtml')->__(' [deleted]'); + return nl2br($this->getOrder()->getStoreName()) . $deleted; + } + $store = Mage::app()->getStore($storeId); + $name = array( + $store->getWebsite()->getName(), + $store->getGroup()->getName(), + $store->getName() + ); + return implode('
', $name); + } + return null; + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Form/Items.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Form/Items.php new file mode 100644 index 0000000..f68307e --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Form/Items.php @@ -0,0 +1,84 @@ +setTemplate('marketplace/sales/order/view/form/items.phtml'); + parent::__construct(); + } + + public function getOrder() { + return Mage::registry('current_order'); + } + + public function getItemsCollection() { + return $this->getOrder()->getItemsCollection(); + } + + public function getProductIdsCollection() { + $roleId = Mage::helper('marketplace')->getConfig('general', 'vendor_role'); + + // $role = Mage::getModel('admin/roles')->load($roleId); + + $current_user = Mage::getSingleton('admin/session')->getUser(); + + $collection = Mage::getModel('catalog/product')->getCollection() + ->addAttributeToFilter('status', 1); + + if ($current_user->getRole()->getRoleId() == $roleId) + $collection->addAttributeToFilter('vendor', $current_user->getId()); + + return $collection->getAllIds(); + } + + public function getAdminCommission($item) { + $product_id = $item->getProductId(); + $product = Mage::getModel('catalog/product')->load($product_id); + if (!is_null($product)) { + $vendor_id = $product->getData('vendor'); + $profile = Mage::getModel('marketplace/profile')->getCollection()->addFieldToFilter('user_id', $vendor_id)->getFirstItem(); + if (!is_null($profile)) { + $commission_percentage = $profile->getAdminCommissionPercentage(); + $commission_amount = (($item->getPriceInclTax() * $item->getQtyOrdered()) * $commission_percentage) / 100; + return $commission_amount; + } + } + return 0; + } + + public function getVendorAmount($item) { + $product_id = $item->getProductId(); + $product = Mage::getModel('catalog/product')->load($product_id); + if (!is_null($product)) { + $vendor_id = $product->getData('vendor'); + $profile = Mage::getModel('marketplace/profile')->getCollection()->addFieldToFilter('user_id', $vendor_id)->getFirstItem(); + if (!is_null($profile)) { + $commission_percentage = $profile->getAdminCommissionPercentage(); + $total_price = ($item->getPriceInclTax() * $item->getQtyOrdered()); + $vendor_amount = $total_price - (($total_price * $commission_percentage) / 100); + return $vendor_amount; + } + } + return 0; + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Form/Totals.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Form/Totals.php new file mode 100644 index 0000000..75f21e5 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Form/Totals.php @@ -0,0 +1,29 @@ +setTemplate('marketplace/sales/order/view/form/totals.phtml'); + parent::__construct(); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Grid.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Grid.php new file mode 100644 index 0000000..40b4eef --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Order/Grid.php @@ -0,0 +1,132 @@ +setId('orderGrid'); + $this->setDefaultSort('id'); + } + + protected function _prepareCollection() { + $roleId = Mage::helper('marketplace')->getConfig('general', 'vendor_role'); + + // $role = Mage::getModel('admin/roles')->load($roleId); + + $current_user = Mage::getSingleton('admin/session')->getUser(); + + if ($current_user->getRole()->getRoleId() == $roleId) { + $productIds = Mage::getModel('catalog/product')->getCollection() + ->addAttributeToFilter('status', 1) + ->addAttributeToFilter('vendor', $current_user->getId())->getAllIds(); + + $collection = Mage::getResourceModel($this->_getCollectionClass()); + + foreach ($collection as $order) { + foreach ($order->getAllItems() as $item) { + $productId = $item->getData('product_id'); + if (in_array($productId, $productIds)) { + $orderIds[] = $order->getId(); + break; + } + } + } + + $collection = Mage::getResourceModel($this->_getCollectionClass()) + ->addFieldToFilter('entity_id', array('in' => $orderIds)); + } + else + $collection = Mage::getResourceModel($this->_getCollectionClass()); + + $this->setCollection($collection); + return parent::_prepareCollection(); + } + + protected function _getCollectionClass() { + return 'sales/order_grid_collection'; + } + + protected function _prepareColumns() { + $hlp = Mage::helper('marketplace'); + + $this->getIndex(); + + $this->addColumn('increment_id', array( + 'header' => $hlp->__('Order #'), + 'align' => 'right', + 'width' => '80px', + 'index' => 'increment_id', + )); + + $this->addColumn('created_at', array( + 'header' => $hlp->__('Purchased On'), + 'index' => 'created_at', + 'type' => 'datetime', + 'width' => '100px', + )); + + $this->addColumn('billing_name', array( + 'header' => $hlp->__('Bill to Name'), + 'index' => 'billing_name', + 'width' => '400px', + )); + + $this->addColumn('shipping_name', array( + 'header' => $hlp->__('Ship to Name'), + 'index' => 'shipping_name', + 'width' => '400px', + )); + + $this->addColumn('status', array( + 'header' => $hlp->__('Status'), + 'index' => 'status', + 'type' => 'options', + 'width' => '70px', + 'options' => Mage::getSingleton('sales/order_config')->getStatuses(), + )); + + $this->addColumn('action', array( + 'header' => $hlp->__('Action'), + 'width' => '50px', + 'type' => 'action', + 'getter' => 'getId', + 'actions' => array( + array( + 'caption' => $hlp->__('View'), + 'url' => array('base' => '*/*/view'), + 'field' => 'order_id' + ) + ), + 'filter' => false, + 'sortable' => false, + 'index' => 'stores', + 'is_system' => true, + )); + + return parent::_prepareColumns(); + } + + public function getRowUrl($row) { + return $this->getUrl('*/*/view', array('order_id' => $row->getId())); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Prooftype.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Prooftype.php new file mode 100644 index 0000000..f638331 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Prooftype.php @@ -0,0 +1,32 @@ +_controller = 'adminhtml_prooftype'; + $this->_blockGroup = 'marketplace'; + $this->_headerText = Mage::helper('marketplace')->__('Manage Types'); + $this->_addButtonLabel = Mage::helper('marketplace')->__('Add Type'); + + parent::__construct(); + } +} +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Prooftype/Edit.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Prooftype/Edit.php new file mode 100644 index 0000000..08a2a12 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Prooftype/Edit.php @@ -0,0 +1,41 @@ +_objectId = 'entity_id'; + $this->_blockGroup = 'marketplace'; + $this->_controller = 'adminhtml_prooftype'; + $this->_updateButton('save', 'label', 'Save Type'); + $this->_updateButton('delete', 'label', 'Delete Type'); + } + + public function getHeaderText() { + if (Mage::registry('type_data') && Mage::registry('type_data')->getId()) { + return 'Edit Type'; + } else { + return 'Add New Type'; + } + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Prooftype/Edit/Form.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Prooftype/Edit/Form.php new file mode 100644 index 0000000..480f710 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Prooftype/Edit/Form.php @@ -0,0 +1,64 @@ + 'edit_form', + 'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))), + 'method' => 'post', + ) + ); + + $form->setUseContainer(true); + + $this->setForm($form); + + $model = Mage::registry('type_data'); + + $fieldset = $form->addFieldset('type_form', array('legend' => 'General')); + + $fieldset->addField('name', 'text', array( + 'name' => 'name', + 'required' => true, + 'label' => Mage::helper('adminhtml')->__('Name'), + 'title' => Mage::helper('adminhtml')->__('Name'), + )); + + $fieldset->addField('status', 'select', array( + 'name' => 'status', + 'required' => true, + 'label' => Mage::helper('adminhtml')->__('Status'), + 'title' => Mage::helper('adminhtml')->__('Status'), + 'values' => array('1' => 'Enabled', '0' => 'Disabled'), + 'value' => '1', + 'style' => 'width: 100px', + )); + + if ($model) { + $form->addValues($model->getData()); + } + return parent::_prepareForm(); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Prooftype/Grid.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Prooftype/Grid.php new file mode 100644 index 0000000..df321a9 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Prooftype/Grid.php @@ -0,0 +1,76 @@ +setId('prooftypeGrid'); + $this->setDefaultSort('entity_id'); + $this->setDefaultDir('DESC'); + $this->setSaveParametersInSession(true); + } + + protected function _prepareCollection() { + $collection = Mage::getModel('marketplace/prooftype')->getCollection(); + $this->setCollection($collection); + return parent::_prepareCollection(); + } + + protected function _prepareColumns() { + $this->addColumn('entity_id', array( + 'header' => Mage::helper('adminhtml')->__('ID'), + 'align' => 'right', + 'width' => '50px', + 'index' => 'entity_id', + )); + + $this->addColumn('name', array( + 'header' => Mage::helper('adminhtml')->__('Name'), + 'align' => 'left', + 'index' => 'name', + )); + + $this->addColumn('status', array( + 'header' => Mage::helper('adminhtml')->__('Status'), + 'align' => 'left', + 'index' => 'status', + 'width' => '90px', + 'type' => 'options', + 'options' => array( + 1 => Mage::helper('adminhtml')->__('Enabled'), + 0 => Mage::helper('adminhtml')->__('Disabled'), + ), + )); + + return parent::_prepareColumns(); + } + + /** + * Row click url + * + * @return string + */ + public function getRowUrl($row) { + return $this->getUrl('*/*/edit', array('id' => $row->getId())); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Rating.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Rating.php new file mode 100644 index 0000000..ba56629 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Rating.php @@ -0,0 +1,32 @@ +_controller = 'adminhtml_rating'; + $this->_blockGroup = 'marketplace'; + $this->_headerText = Mage::helper('marketplace')->__('Manage Ratings'); + $this->_addButtonLabel = Mage::helper('marketplace')->__('Add Rating'); + + parent::__construct(); + } +} +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Rating/Edit.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Rating/Edit.php new file mode 100644 index 0000000..ba595dd --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Rating/Edit.php @@ -0,0 +1,41 @@ +_objectId = 'entity_id'; + $this->_blockGroup = 'marketplace'; + $this->_controller = 'adminhtml_rating'; + $this->_updateButton('save', 'label', 'Save Rating'); + $this->_updateButton('delete', 'label', 'Delete Rating'); + } + + public function getHeaderText() { + if (Mage::registry('rating_data') && Mage::registry('rating_data')->getId()) { + return 'Edit Rating'; + } else { + return 'Add New Rating'; + } + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Rating/Edit/Form.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Rating/Edit/Form.php new file mode 100644 index 0000000..30c1691 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Rating/Edit/Form.php @@ -0,0 +1,73 @@ + 'edit_form', + 'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))), + 'method' => 'post', + ) + ); + + $form->setUseContainer(true); + + $this->setForm($form); + + $model = Mage::registry('rating_data'); + + $fieldset = $form->addFieldset('rating_form', array('legend' => 'General')); + + $fieldset->addField('name', 'text', array( + 'name' => 'name', + 'required' => true, + 'label' => Mage::helper('adminhtml')->__('Name'), + 'title' => Mage::helper('adminhtml')->__('Name'), + )); + + $fieldset->addField('sort_order', 'text', array( + 'name' => 'sort_order', + 'required' => true, + 'label' => Mage::helper('adminhtml')->__('Sort Order'), + 'title' => Mage::helper('adminhtml')->__('Sort Order'), + 'class' => 'validate-number', + 'style' => 'width:50px', + )); + + $fieldset->addField('status', 'select', array( + 'name' => 'status', + 'required' => true, + 'label' => Mage::helper('adminhtml')->__('Status'), + 'title' => Mage::helper('adminhtml')->__('Status'), + 'values' => array('1' => 'Enabled', '0' => 'Disabled'), + 'value' => '1', + 'style' => 'width: 100px', + )); + + if ($model) { + $form->addValues($model->getData()); + } + return parent::_prepareForm(); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Rating/Grid.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Rating/Grid.php new file mode 100644 index 0000000..681b99f --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Rating/Grid.php @@ -0,0 +1,83 @@ +setId('ratingGrid'); + $this->setDefaultSort('entity_id'); + $this->setDefaultDir('DESC'); + $this->setSaveParametersInSession(true); + } + + protected function _prepareCollection() { + $collection = Mage::getModel('marketplace/rating')->getCollection(); + $this->setCollection($collection); + return parent::_prepareCollection(); + } + + protected function _prepareColumns() { + $this->addColumn('entity_id', array( + 'header' => Mage::helper('adminhtml')->__('ID'), + 'align' => 'right', + 'width' => '50px', + 'index' => 'entity_id', + )); + + $this->addColumn('name', array( + 'header' => Mage::helper('adminhtml')->__('Name'), + 'align' => 'left', + 'index' => 'name', + )); + + $this->addColumn('sort_order', array( + 'header' => Mage::helper('adminhtml')->__('Order'), + 'align' => 'left', + 'index' => 'sort_order', + 'width' => '90px', + )); + + $this->addColumn('status', array( + 'header' => Mage::helper('adminhtml')->__('Status'), + 'align' => 'left', + 'index' => 'status', + 'width' => '90px', + 'type' => 'options', + 'options' => array( + 1 => Mage::helper('adminhtml')->__('Enabled'), + 0 => Mage::helper('adminhtml')->__('Disabled'), + ), + )); + + return parent::_prepareColumns(); + } + + /** + * Row click url + * + * @return string + */ + public function getRowUrl($row) { + return $this->getUrl('*/*/edit', array('id' => $row->getId())); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review.php new file mode 100644 index 0000000..fdf1679 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review.php @@ -0,0 +1,34 @@ +_controller = 'adminhtml_review'; + $this->_blockGroup = 'marketplace'; + if(Mage::getSingleton('core/session')->getReviewType() != Medma_MarketPlace_Model_Review::PENDING) + $this->_headerText = 'All Reviews'; + else + $this->_headerText = 'Pending Review'; + parent::__construct(); + $this->_removeButton('add'); + } +} +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Edit.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Edit.php new file mode 100644 index 0000000..dabe9e5 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Edit.php @@ -0,0 +1,41 @@ +_objectId = 'entity_id'; + $this->_blockGroup = 'marketplace'; + $this->_controller = 'adminhtml_review'; + $this->_updateButton('save', 'label', 'Save Review'); + $this->_updateButton('delete', 'label', 'Delete Review'); + } + + public function getHeaderText() { + if (Mage::registry('review_data') && Mage::registry('review_data')->getId()) { + return 'Edit Review'; + } else { + return 'Add New Review'; + } + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Edit/Form.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Edit/Form.php new file mode 100644 index 0000000..181c5ad --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Edit/Form.php @@ -0,0 +1,88 @@ + 'edit_form', + 'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))), + 'method' => 'post', + ) + ); + + $form->setUseContainer(true); + + $this->setForm($form); + + $model = Mage::registry('review_data'); + + $fieldset = $form->addFieldset('review_form', array('legend' => 'General')); + + $fieldset->addField('title', 'text', array( + 'name' => 'title', + 'required' => true, + 'label' => Mage::helper('adminhtml')->__('Title'), + 'title' => Mage::helper('adminhtml')->__('Title'), + )); + + $fieldset->addField('summary', 'textarea', array( + 'name' => 'summary', + 'required' => true, + 'label' => Mage::helper('adminhtml')->__('Summary'), + 'title' => Mage::helper('adminhtml')->__('Summary'), + 'style' => 'width:400px;height:70px;', + )); + + $fieldset->addField('type', 'select', array( + 'name' => 'type', + 'required' => true, + 'label' => Mage::helper('adminhtml')->__('Type'), + 'title' => Mage::helper('adminhtml')->__('Type'), + 'values' => array( + Medma_MarketPlace_Model_Review::POSITIVE => Mage::helper('adminhtml')->__('Positive'), + Medma_MarketPlace_Model_Review::NEUTRAL => Mage::helper('adminhtml')->__('Neutral'), + Medma_MarketPlace_Model_Review::NEGATIVE => Mage::helper('adminhtml')->__('Negative') + ), + 'style' => 'width: 100px', + )); + + $fieldset->addField('status', 'select', array( + 'name' => 'status', + 'required' => true, + 'label' => Mage::helper('adminhtml')->__('Status'), + 'title' => Mage::helper('adminhtml')->__('Status'), + 'values' => array( + Medma_MarketPlace_Model_Review::PENDING => Mage::helper('adminhtml')->__('Pending'), + Medma_MarketPlace_Model_Review::APPROVED => Mage::helper('adminhtml')->__('Approved'), + Medma_MarketPlace_Model_Review::CANCEL => Mage::helper('adminhtml')->__('Cancel') + ), + 'style' => 'width: 100px', + )); + + if ($model) { + $form->addValues($model->getData()); + } + return parent::_prepareForm(); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Empty.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Empty.php new file mode 100644 index 0000000..58ccac3 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Empty.php @@ -0,0 +1,33 @@ +setTemplate('marketplace/vendor/review/empty.phtml'); + return parent::_prepareLayout(); + } + + public function getReviewGridUrl() + { + return Mage::helper('adminhtml')->getUrl('marketplace/adminhtml_review/index', array('_current' => true)); + } +} +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Grid.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Grid.php new file mode 100644 index 0000000..19ad1ad --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Grid.php @@ -0,0 +1,170 @@ +setId('reviewGrid'); + $this->setDefaultSort('entity_id'); + $this->setDefaultDir('DESC'); + $this->setSaveParametersInSession(true); + } + + protected function _prepareMassaction() + { + $this->setMassactionIdField('entity_id'); + $this->getMassactionBlock()->setFormFieldName('review_id'); + $this->getMassactionBlock()->addItem('pending', array( + 'label'=> Mage::helper('core')->__('Pending'), + 'url' => $this->getUrl('*/*/massPending', array('' => '')), + 'confirm' => Mage::helper('core')->__('Are you sure?') + )); + $this->getMassactionBlock()->addItem('approve', array( + 'label'=> Mage::helper('core')->__('Approved'), + 'url' => $this->getUrl('*/*/massApprove', array('' => '')), + 'confirm' => Mage::helper('core')->__('Are you sure?') + )); + $this->getMassactionBlock()->addItem('cancel', array( + 'label'=> Mage::helper('core')->__('Cancel'), + 'url' => $this->getUrl('*/*/massCancel', array('' => '')), + 'confirm' => Mage::helper('core')->__('Are you sure?') + )); + return $this; + } + + protected function _prepareCollection() { + $collection = Mage::getModel('marketplace/review')->getCollection(); + + if(Mage::getSingleton('core/session')->getReviewType() == Medma_MarketPlace_Model_Review::PENDING) + $collection->addFieldToFilter('status', Medma_MarketPlace_Model_Review::PENDING); + + $roleId = Mage::helper('marketplace')->getConfig('general', 'vendor_role'); + $current_user = Mage::getSingleton('admin/session')->getUser(); + if ($current_user->getRole()->getRoleId() == $roleId) + { + $productIds = Mage::getModel('catalog/product')->getCollection() + ->addAttributeToFilter('vendor', $current_user->getId())->getAllIds(); + + $invoiceItemIds = Mage::getModel('sales/order_invoice_item')->getCollection() + ->addFieldToFilter('product_id', array('in' => $productIds))->getAllIds(); + + $collection->addFieldToFilter('invoice_item_id', array('in' => $invoiceItemIds)); + } + + $this->setCollection($collection); + return parent::_prepareCollection(); + } + + protected function _prepareColumns() { + + $roleId = Mage::helper('marketplace')->getConfig('general', 'vendor_role'); + $current_user = Mage::getSingleton('admin/session')->getUser(); + + $this->addColumn('entity_id', array( + 'header' => Mage::helper('adminhtml')->__('ID'), + 'align' => 'right', + 'width' => '50px', + 'index' => 'entity_id', + )); + + if ($current_user->getRole()->getRoleId() != $roleId) + { + $this->addColumn('vendor_name', array( + 'header' => Mage::helper('adminhtml')->__('Vendor Name'), + 'align' => 'left', + 'index' => 'invoice_item_id', + 'renderer' => 'Medma_MarketPlace_Block_Adminhtml_Review_Renderer_Vendor' + )); + } + + $this->addColumn('product_name', array( + 'header' => Mage::helper('adminhtml')->__('Product Name'), + 'align' => 'left', + 'index' => 'invoice_item_id', + 'renderer' => 'Medma_MarketPlace_Block_Adminhtml_Review_Renderer_Product' + )); + + $this->addColumn('title', array( + 'header' => Mage::helper('adminhtml')->__('Title'), + 'align' => 'left', + 'index' => 'title', + )); + + $this->addColumn('summary', array( + 'header' => Mage::helper('adminhtml')->__('Summary'), + 'align' => 'left', + 'index' => 'summary', + )); + + $this->addColumn('posted_date', array( + 'header' => Mage::helper('adminhtml')->__('Posted Date'), + 'align' => 'left', + 'index' => 'posted_date', + )); + + $this->addColumn('type', array( + 'header' => Mage::helper('adminhtml')->__('Type'), + 'align' => 'left', + 'index' => 'type', + 'width' => '90px', + 'type' => 'options', + 'options' => array( + Medma_MarketPlace_Model_Review::POSITIVE => Mage::helper('adminhtml')->__('Positive'), + Medma_MarketPlace_Model_Review::NEUTRAL => Mage::helper('adminhtml')->__('Neutral'), + Medma_MarketPlace_Model_Review::NEGATIVE => Mage::helper('adminhtml')->__('Negative') + ), + )); + + if(Mage::getSingleton('core/session')->getReviewType() != Medma_MarketPlace_Model_Review::PENDING) + { + $this->addColumn('status', array( + 'header' => Mage::helper('adminhtml')->__('Status'), + 'align' => 'left', + 'index' => 'status', + 'width' => '90px', + 'type' => 'options', + 'options' => array( + Medma_MarketPlace_Model_Review::PENDING => Mage::helper('adminhtml')->__('Pending'), + Medma_MarketPlace_Model_Review::APPROVED => Mage::helper('adminhtml')->__('Approved'), + Medma_MarketPlace_Model_Review::CANCEL => Mage::helper('adminhtml')->__('Cancel') + ), + )); + } + + return parent::_prepareColumns(); + } + + /** + * Row click url + * + * @return string + */ + public function getRowUrl($row) + { + $roleId = Mage::helper('marketplace')->getConfig('general', 'vendor_role'); + $current_user = Mage::getSingleton('admin/session')->getUser(); + + if ($current_user->getRole()->getRoleId() != $roleId) + return $this->getUrl('*/*/edit', array('id' => $row->getId())); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Renderer/Product.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Renderer/Product.php new file mode 100644 index 0000000..7e8c5a8 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Renderer/Product.php @@ -0,0 +1,35 @@ +_getValue($row); + } + + protected function _getValue(Varien_Object $row) + { + $value = $row->getData($this->getColumn()->getIndex()); + $invoiceItemModel = Mage::getModel('sales/order_invoice_item')->load($value); + $productModel = Mage::getModel('catalog/product')->load($invoiceItemModel->getProductId()); + return $productModel->getName(); + } +} +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Renderer/Vendor.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Renderer/Vendor.php new file mode 100644 index 0000000..70597cc --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Review/Renderer/Vendor.php @@ -0,0 +1,36 @@ +_getValue($row); + } + + protected function _getValue(Varien_Object $row) + { + $value = $row->getData($this->getColumn()->getIndex()); + $invoiceItemModel = Mage::getModel('sales/order_invoice_item')->load($value); + $productModel = Mage::getModel('catalog/product')->load($invoiceItemModel->getProductId()); + $userModel = Mage::getModel('admin/user')->load($productModel->getVendor()); + return $userModel->getName(); + } +} +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/System/Account/Edit/Form.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/System/Account/Edit/Form.php new file mode 100644 index 0000000..801e431 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/System/Account/Edit/Form.php @@ -0,0 +1,263 @@ +getUser()->getId(); + $user = Mage::getModel('admin/user') + ->load($userId); + $user->unsetData('password'); + + //$form = new Varien_Data_Form(); + $form = new Varien_Data_Form(array( + 'id' => 'edit_form', + 'enctype' => 'multipart/form-data' + ) + ); + + $fieldset = $form->addFieldset('base_fieldset', array('legend' => Mage::helper('adminhtml')->__('Account Information'))); + + $fieldset->addField('username', 'text', array( + 'name' => 'username', + 'label' => Mage::helper('adminhtml')->__('User Name'), + 'title' => Mage::helper('adminhtml')->__('User Name'), + 'required' => true, + ) + ); + + $fieldset->addField('firstname', 'text', array( + 'name' => 'firstname', + 'label' => Mage::helper('adminhtml')->__('First Name'), + 'title' => Mage::helper('adminhtml')->__('First Name'), + 'required' => true, + ) + ); + + $fieldset->addField('lastname', 'text', array( + 'name' => 'lastname', + 'label' => Mage::helper('adminhtml')->__('Last Name'), + 'title' => Mage::helper('adminhtml')->__('Last Name'), + 'required' => true, + ) + ); + + $fieldset->addField('user_id', 'hidden', array( + 'name' => 'user_id', + ) + ); + + $fieldset->addField('email', 'text', array( + 'name' => 'email', + 'label' => Mage::helper('adminhtml')->__('Email'), + 'title' => Mage::helper('adminhtml')->__('User Email'), + 'required' => true, + ) + ); + + $fieldset->addField('password', 'password', array( + 'name' => 'new_password', + 'label' => Mage::helper('adminhtml')->__('New Password'), + 'title' => Mage::helper('adminhtml')->__('New Password'), + 'class' => 'input-text validate-admin-password', + ) + ); + + $fieldset->addField('confirmation', 'password', array( + 'name' => 'password_confirmation', + 'label' => Mage::helper('adminhtml')->__('Password Confirmation'), + 'class' => 'input-text validate-cpassword', + ) + ); + + $form->setValues($user->getData()); + + $roleId = Mage::helper('marketplace')->getConfig('general', 'vendor_role'); + + // $role = Mage::getModel('admin/roles')->load($roleId); + + $current_user = Mage::getSingleton('admin/session')->getUser(); + + if ($current_user->getRole()->getRoleId() == $roleId) { + $profileCollection = Mage::getModel('marketplace/profile') + ->getCollection()->addFieldToFilter('user_id', $userId); + + $profile = Mage::getModel('marketplace/profile'); + if ($profileCollection->count() > 0) + $profile->load($profileCollection->getFirstItem()->getId()); + + $fieldset = $form->addFieldset('profile_fieldset', array('legend' => Mage::helper('adminhtml')->__('Profile Information'))); + + $fieldset->addField('shop_name', 'text', array( + 'name' => 'shop_name', + 'label' => Mage::helper('adminhtml')->__('Shop Name'), + 'title' => Mage::helper('adminhtml')->__('Shop Name'), + 'required' => true, + 'value' => $profile->getShopName(), + ) + ); + + $fieldset->addField('message', 'textarea', array( + 'name' => 'message', + 'label' => Mage::helper('adminhtml')->__('Message'), + 'title' => Mage::helper('adminhtml')->__('Message'), + 'value' => $profile->getMessage(), + 'style' => 'width: 400px; height: 90px;' + ) + ); + + $fieldset->addField('contact_number', 'text', array( + 'name' => 'contact_number', + 'label' => Mage::helper('adminhtml')->__('Contact Number'), + 'title' => Mage::helper('adminhtml')->__('Contact Number'), + 'value' => $profile->getContactNumber(), + 'required' => true, + 'class' => 'validate-phoneLax' + ) + ); + + $fieldset->addField('country', 'select', array( + 'name' => 'country', + 'label' => Mage::helper('adminhtml')->__('Country'), + 'title' => Mage::helper('adminhtml')->__('Country'), + 'class' => 'input-select', + 'required' => true, + 'value' => $profile->getCountry(), + 'options' => $this->_getCountryList() + )); + + $fieldset->addField('image', 'file', array( + 'name' => 'image', + 'label' => Mage::helper('adminhtml')->__('Profile Picture'), + 'title' => Mage::helper('adminhtml')->__('Profile Picture'), + 'after_element_html' => '
' . $this->_getImage($profile->getImage()) + )); + + $proofList = Mage::helper('marketplace')->getVarificationProofTypeList(); + + if(count($proofList) > 1) + { + $fieldset->addField('proof_type', 'text', array( + 'name' => 'proof_type', + 'label' => Mage::helper('adminhtml')->__('Proof Type'), + 'title' => Mage::helper('adminhtml')->__('Proof Type'), + 'value' => $profile->getProofType(), + 'style' => 'display: none;', + 'after_element_html' => $this->_getFiles($profile->getProofType(), $profile->getVarificationFiles()) + )); + } + + $fieldset->addField('admin_commission_percentage', 'text', array( + 'name' => 'admin_commission_percentage', + 'label' => Mage::helper('adminhtml')->__('Commission (in %)'), + 'title' => Mage::helper('adminhtml')->__('Commission (in %)'), + 'class' => 'validate-number validate-digits-range digits-range-0-100', + 'required' => true, + 'style' => 'display:none;', + 'value' => $profile->getAdminCommissionPercentage(), + 'after_element_html' => '' . $profile->getAdminCommissionPercentage() . '', + ) + ); + + $fieldset->addField('total_admin_commission', 'text', array( + 'name' => 'total_admin_commission', + 'label' => Mage::helper('adminhtml')->__('Admin Earnings'), + 'title' => Mage::helper('adminhtml')->__('Admin Earnings'), + 'disabled' => true, + 'style' => 'display:none;', + 'value' => $profile->getTotalAdminCommission(), + 'after_element_html' => '' . $this->formatPrice($profile->getTotalAdminCommission()) . '', + ) + ); + + $fieldset->addField('total_vendor_amount', 'text', array( + 'name' => 'total_vendor_amount', + 'label' => Mage::helper('adminhtml')->__('Vendor Balance'), + 'title' => Mage::helper('adminhtml')->__('Vendor Balance'), + 'disabled' => true, + 'style' => 'display:none;', + 'value' => number_format(($profile->getTotalVendorAmount() - $profile->getTotalVendorPaid()), 4, '.', ''), + 'after_element_html' => '' . $this->formatPrice(($profile->getTotalVendorAmount() - $profile->getTotalVendorPaid())) . '', + ) + ); + } + $form->setAction($this->getUrl('*/system_account/save')); + $form->setMethod('post'); + $form->setUseContainer(true); + $form->setId('edit_form'); + + $this->setForm($form); + + //return parent::_prepareForm(); + return Mage_Adminhtml_Block_Widget_Form::_prepareForm(); + } + + protected function _getImage($image_name) { + if (!isset($image_name) || $image_name == '') + return ''; + + $dir_name = 'vendor' . DS . 'images'; + $dir_path = Mage::helper('marketplace')->getImagesUrl($dir_name); + + $str = ''; + $str .= '
Remove'; + return $str; + } + + protected function formatPrice($price) { + return Mage::helper('core')->currency($price, true, false); + } + + protected function _getCountryList() + { + $countries[''] = ''; + + $coutryCollection = Mage::getResourceModel('directory/country_collection')->loadData()->toOptionArray(false); + + foreach($coutryCollection as $country) + $countries[$country['value']] = $country['label']; + + return $countries; + } + + protected function _getFiles($proofType, $fileList) + { + $fileListArray = json_decode($fileList, true); + $proofTypeModel = Mage::getModel('marketplace/prooftype')->load($proofType); + $proofName = $proofTypeModel->getName(); + if(isset($proofName)) + { + $fileString = '
' . $proofName . '
'; + foreach($fileListArray as $file) + { + $dir_name = 'vendor' . DS . 'varifications'; + $dir_url = Mage::helper('marketplace')->getImagesUrl($dir_name); + + $fileString .= '
' . $file . '
'; + } + } + else + $fileString = '
N/A
'; + return $fileString; + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction.php new file mode 100644 index 0000000..7d81f77 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction.php @@ -0,0 +1,58 @@ +setTemplate('marketplace/vendor/transaction.phtml'); + parent::__construct(); + } + + public function getHeaderText() { + if (Mage::registry('vendor_user') && Mage::registry('vendor_user')->getId()) { + return Mage::helper('marketplace')->__("Balance sheet | %s", Mage::registry('vendor_user')->getName() + ); + } + } + + public function getBackUrl() { + return Mage::helper('adminhtml')->getUrl('*/adminhtml_vendor/index'); + } + + public function getAddUrl() { + return Mage::helper('adminhtml')->getUrl('*/*/new', array('vendor_id' => $this->getRequest()->getParam('id'))); + } + + public function isToShowButtons() + { + $roleId = Mage::helper('marketplace')->getConfig('general', 'vendor_role'); + + // $role = Mage::getModel('admin/roles')->load($roleId); + + $current_user = Mage::getSingleton('admin/session')->getUser(); + + if ($current_user->getRole()->getRoleId() == $roleId) { + return false; + } + return true; + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction/Edit.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction/Edit.php new file mode 100644 index 0000000..11e4fe0 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction/Edit.php @@ -0,0 +1,47 @@ +_objectId = 'user_id'; + $this->_blockGroup = 'marketplace'; + $this->_controller = 'adminhtml_transaction'; + $this->_updateButton('save', 'label', 'Save Transaction'); + $this->_updateButton('delete', 'label', 'Delete Transaction'); + + $data = array( + 'label' => 'Back', + 'onclick' => 'setLocation(\'' . $this->getUrl('*/*/index', array('id' => Mage::registry('vendor_user')->getId())) . '\')', + 'class' => 'back' + ); + $this->addButton('my_back', $data, 0, 0, 'header'); + + $this->_removeButton('back'); + $this->_removeButton('reset'); + } + + public function getHeaderText() { + return Mage::helper('adminhtml')->__('New Transaction'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction/Edit/Form.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction/Edit/Form.php new file mode 100644 index 0000000..cb66344 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction/Edit/Form.php @@ -0,0 +1,74 @@ +getTotalVendorAmount() - $profile->getTotalVendorPaid()); + $remaining_amount = Mage::helper('core')->currency($remaining_amount, true, false); + + $form = new Varien_Data_Form( + array( + 'id' => 'edit_form', + 'action' => $this->getUrl('*/*/save', array('vendor_id' => $profile->getData('user_id'))), + 'method' => 'post', + ) + ); + + $form->setUseContainer(true); + + $this->setForm($form); + + $fieldset = $form->addFieldset('base_fieldset', array('legend' => Mage::helper('adminhtml')->__('Transaction Information'))); + + $fieldset->addField('Information', 'note', array( + 'text' => Mage::helper('adminhtml')->__('You can not transfer more then ') . '' . $remaining_amount . '', + )); + + $fieldset->addField('information', 'select', array( + 'name' => 'information', + 'label' => Mage::helper('adminhtml')->__('Method'), + 'id' => 'information', + 'title' => Mage::helper('adminhtml')->__('Method'), + 'required' => true, + 'class' => 'input-select', + 'options' => array('Cash' => Mage::helper('adminhtml')->__('Cash'), 'Check' => Mage::helper('adminhtml')->__('Check')), + )); + + $fieldset->addField('amount', 'text', array( + 'name' => 'amount', + 'label' => Mage::helper('adminhtml')->__('Amount'), + 'id' => 'amount', + 'title' => Mage::helper('adminhtml')->__('Amount'), + 'class' => 'required-entry validate-number', + 'required' => true, + 'value' => Mage::getSingleton('adminhtml/session')->getAmount(), + )); + + Mage::getSingleton('adminhtml/session')->unsAmount(); + + $this->setForm($form); + + return parent::_prepareForm(); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction/Empty.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction/Empty.php new file mode 100644 index 0000000..6bcdd75 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction/Empty.php @@ -0,0 +1,33 @@ +setTemplate('marketplace/vendor/transaction/empty.phtml'); + return parent::_prepareLayout(); + } + + public function getVendorGridUrl() + { + return Mage::helper('adminhtml')->getUrl('admin_marketplace/adminhtml_vendor/index', array('_current' => true)); + } +} +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction/Items.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction/Items.php new file mode 100644 index 0000000..d592325 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Transaction/Items.php @@ -0,0 +1,38 @@ +setTemplate('marketplace/vendor/transaction/items.phtml'); + parent::__construct(); + } + + public function getTransactions() { + return Mage::getModel('marketplace/transaction') + ->getCollection() + ->addFieldToFilter('vendor_id', Mage::registry('vendor_user')->getId()); + } + + public function formatAmount($amount) { + return Mage::helper('core')->currency($amount, true, false); + } +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Vendor.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Vendor.php new file mode 100644 index 0000000..1c58eb6 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Vendor.php @@ -0,0 +1,33 @@ +_controller = 'adminhtml_vendor'; + $this->_blockGroup = 'marketplace'; + $this->_headerText = Mage::helper('marketplace')->__('Vendors'); + $this->_addButtonLabel = Mage::helper('marketplace')->__('Add Vendor'); + + parent::__construct(); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Vendor/Edit.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Vendor/Edit.php new file mode 100644 index 0000000..344b962 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Vendor/Edit.php @@ -0,0 +1,41 @@ +_objectId = 'user_id'; + $this->_blockGroup = 'marketplace'; + $this->_controller = 'adminhtml_vendor'; + $this->_updateButton('save', 'label', 'Save Vendor'); + $this->_updateButton('delete', 'label', 'Delete Vendor'); + } + + public function getHeaderText() { + if (Mage::registry('vendor_user')->getId()) { + return Mage::helper('adminhtml')->__("Edit Vendor '%s'", $this->escapeHtml(Mage::registry('vendor_user')->getUsername())); + } else { + return Mage::helper('adminhtml')->__('New Vendor'); + } + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Vendor/Edit/Form.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Vendor/Edit/Form.php new file mode 100644 index 0000000..6734cfd --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Vendor/Edit/Form.php @@ -0,0 +1,299 @@ +getCollection()->addFieldToFilter('user_id', $this->getRequest()->getParam('id')); + + $profile = Mage::getModel('marketplace/profile'); + if ($profileCollection->count() > 0) + $profile->load($profileCollection->getFirstItem()->getId()); + + $form = new Varien_Data_Form( + array( + 'id' => 'edit_form', + 'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id')) + ), + 'method' => 'post', + 'enctype' => 'multipart/form-data' + ) + ); + + $form->setUseContainer(true); + + $this->setForm($form); + + $form->setHtmlIdPrefix('user_'); + + $base_fieldset = $form->addFieldset('base_fieldset', array('legend' => Mage::helper('adminhtml')->__('Account Information'))); + + if ($model->getUserId()) { + $base_fieldset->addField('user_id', 'hidden', array( + 'name' => 'user_id', + )); + } else { + if (!$model->hasData('is_active')) { + $model->setIsActive(1); + } + } + + $base_fieldset->addField('username', 'text', array( + 'name' => 'username', + 'label' => Mage::helper('adminhtml')->__('User Name'), + 'id' => 'username', + 'title' => Mage::helper('adminhtml')->__('User Name'), + 'required' => true, + )); + + $base_fieldset->addField('firstname', 'text', array( + 'name' => 'firstname', + 'label' => Mage::helper('adminhtml')->__('First Name'), + 'id' => 'firstname', + 'title' => Mage::helper('adminhtml')->__('First Name'), + 'required' => true, + )); + + $base_fieldset->addField('lastname', 'text', array( + 'name' => 'lastname', + 'label' => Mage::helper('adminhtml')->__('Last Name'), + 'id' => 'lastname', + 'title' => Mage::helper('adminhtml')->__('Last Name'), + 'required' => true, + )); + + $base_fieldset->addField('email', 'text', array( + 'name' => 'email', + 'label' => Mage::helper('adminhtml')->__('Email'), + 'id' => 'customer_email', + 'title' => Mage::helper('adminhtml')->__('User Email'), + 'class' => 'required-entry validate-email', + 'required' => true, + )); + + if ($model->getUserId()) { + $base_fieldset->addField('password', 'password', array( + 'name' => 'new_password', + 'label' => Mage::helper('adminhtml')->__('New Password'), + 'id' => 'new_pass', + 'title' => Mage::helper('adminhtml')->__('New Password'), + 'class' => 'input-text validate-admin-password', + )); + + $base_fieldset->addField('confirmation', 'password', array( + 'name' => 'confirmation', + 'label' => Mage::helper('adminhtml')->__('Password Confirmation'), + 'id' => 'confirmation', + 'class' => 'input-text validate-cpassword', + )); + } else { + $base_fieldset->addField('password', 'password', array( + 'name' => 'new_password', + 'label' => Mage::helper('adminhtml')->__('Password'), + 'id' => 'customer_pass', + 'title' => Mage::helper('adminhtml')->__('Password'), + 'class' => 'input-text required-entry validate-admin-password', + 'required' => true, + )); + $base_fieldset->addField('confirmation', 'password', array( + 'name' => 'password_confirmation', + 'label' => Mage::helper('adminhtml')->__('Password Confirmation'), + 'id' => 'confirmation', + 'title' => Mage::helper('adminhtml')->__('Password Confirmation'), + 'class' => 'input-text required-entry validate-cpassword', + 'required' => true, + )); + } + + if (Mage::getSingleton('admin/session')->getUser()->getId() != $model->getUserId()) { + $base_fieldset->addField('is_active', 'select', array( + 'name' => 'is_active', + 'label' => Mage::helper('adminhtml')->__('This account is'), + 'id' => 'is_active', + 'title' => Mage::helper('adminhtml')->__('Account Status'), + 'class' => 'input-select', + 'style' => 'width: 80px', + 'options' => array('1' => Mage::helper('adminhtml')->__('Active'), '0' => Mage::helper('adminhtml')->__('Inactive')), + )); + } + + $base_fieldset->addField('user_roles', 'hidden', array( + 'name' => 'user_roles', + 'id' => '_user_roles', + )); + + $data = $model->getData(); + + unset($data['password']); + + $form->setValues($data); + + $profile_fieldset = $form->addFieldset('profile_fieldset', array('legend' => Mage::helper('adminhtml')->__('Profile Information'))); + + $profile_fieldset->addField('shop_name', 'text', array( + 'name' => 'shop_name', + 'label' => Mage::helper('adminhtml')->__('Shop Name'), + 'title' => Mage::helper('adminhtml')->__('Shop Name'), + 'required' => true, + 'value' => $profile->getShopName(), + ) + ); + + $profile_fieldset->addField('message', 'textarea', array( + 'name' => 'message', + 'label' => Mage::helper('adminhtml')->__('Message'), + 'title' => Mage::helper('adminhtml')->__('Message'), + 'value' => $profile->getMessage(), + 'style' => 'width: 400px; height: 90px;' + ) + ); + + $profile_fieldset->addField('contact_number', 'text', array( + 'name' => 'contact_number', + 'label' => Mage::helper('adminhtml')->__('Contact Number'), + 'title' => Mage::helper('adminhtml')->__('Contact Number'), + 'value' => $profile->getContactNumber(), + 'required' => true, + 'class' => 'validate-phoneLax' + ) + ); + + $profile_fieldset->addField('country', 'select', array( + 'name' => 'country', + 'label' => Mage::helper('adminhtml')->__('Country'), + 'title' => Mage::helper('adminhtml')->__('Country'), + 'class' => 'input-select', + 'required' => true, + 'value' => $profile->getCountry(), + 'options' => $this->_getCountryList() + )); + + $profile_fieldset->addField('image', 'file', array( + 'name' => 'image', + 'label' => Mage::helper('adminhtml')->__('Profile Picture'), + 'title' => Mage::helper('adminhtml')->__('Profile Picture'), + 'after_element_html' => '
' . $this->_getImage($profile->getImage()) + )); + + $proofList = Mage::helper('marketplace')->getVarificationProofTypeList(); + + if(count($proofList) > 1) + { + $profile_fieldset->addField('proof_type', 'text', array( + 'name' => 'proof_type', + 'label' => Mage::helper('adminhtml')->__('Proof Type'), + 'title' => Mage::helper('adminhtml')->__('Proof Type'), + 'value' => $profile->getProofType(), + 'style' => 'display: none;', + 'after_element_html' => $this->_getFiles($profile->getProofType(), $profile->getVarificationFiles()) + )); + } + + $profile_fieldset->addField('admin_commission_percentage', 'text', array( + 'name' => 'admin_commission_percentage', + 'label' => Mage::helper('adminhtml')->__('Commission (in %)'), + 'title' => Mage::helper('adminhtml')->__('Commission (in %)'), + 'class' => 'validate-number', + 'required' => true, + 'value' => $profile->getAdminCommissionPercentage(), + ) + ); + + $profile_fieldset->addField('total_admin_commission', 'text', array( + 'name' => 'total_admin_commission', + 'label' => Mage::helper('adminhtml')->__('Admin Earnings'), + 'title' => Mage::helper('adminhtml')->__('Admin Earnings'), + 'disabled' => true, + 'style' => 'display:none;', + 'value' => $profile->getTotalAdminCommission(), + 'after_element_html' => '' . $this->formatPrice($profile->getTotalAdminCommission()) . '', + ) + ); + + $profile_fieldset->addField('total_vendor_amount', 'text', array( + 'name' => 'total_vendor_amount', + 'label' => Mage::helper('adminhtml')->__('Vendor Balance'), + 'title' => Mage::helper('adminhtml')->__('Vendor Balance'), + 'disabled' => true, + 'style' => 'display:none;', + 'value' => number_format(($profile->getTotalVendorAmount() - $profile->getTotalVendorPaid()), 4, '.', ''), + 'after_element_html' => '' . $this->formatPrice(($profile->getTotalVendorAmount() - $profile->getTotalVendorPaid())) . '', + ) + ); + + $this->setForm($form); + + return parent::_prepareForm(); + } + + protected function _getImage($image_name) { + if (!isset($image_name) || $image_name == '') + return ''; + + $dir_name = 'vendor' . DS . 'images'; + $dir_path = Mage::helper('marketplace')->getImagesUrl($dir_name); + + $str = ''; + $str .= '
Remove'; + return $str; + } + + protected function formatPrice($price) { + return Mage::helper('core')->currency($price, true, false); + } + + protected function _getCountryList() + { + $countries[''] = ''; + + $coutryCollection = Mage::getResourceModel('directory/country_collection')->loadData()->toOptionArray(false); + + foreach($coutryCollection as $country) + $countries[$country['value']] = $country['label']; + + return $countries; + } + + protected function _getFiles($proofType, $fileList) + { + $fileListArray = json_decode($fileList, true); + $proofTypeModel = Mage::getModel('marketplace/prooftype')->load($proofType); + $proofName = $proofTypeModel->getName(); + if(isset($proofName)) + { + $fileString = '
' . $proofName . '
'; + foreach($fileListArray as $file) + { + $dir_name = 'vendor' . DS . 'varifications'; + $dir_url = Mage::helper('marketplace')->getImagesUrl($dir_name); + + $fileString .= '
' . $file . '
'; + } + } + else + $fileString = '
N/A
'; + return $fileString; + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Adminhtml/Vendor/Grid.php b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Vendor/Grid.php new file mode 100644 index 0000000..b0f3035 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Adminhtml/Vendor/Grid.php @@ -0,0 +1,116 @@ +setId('vendorGrid'); + $this->setDefaultSort('entity_id'); + $this->setDefaultDir('DESC'); + $this->setSaveParametersInSession(true); + } + + protected function _prepareCollection() { + + $roleId = Mage::helper('marketplace')->getConfig('general', 'vendor_role'); + + $role = Mage::getModel('admin/roles')->load($roleId); + + $userIds = Mage::getResourceModel('admin/roles')->getRoleUsers($role); + + $collection = Mage::getModel('admin/user') + ->getCollection() + ->addFieldToFilter('user_id', array('in' => $userIds)); + + $this->setCollection($collection); + + return parent::_prepareCollection(); + } + + protected function _prepareColumns() { + $this->addColumn('user_id', array( + 'header' => Mage::helper('adminhtml')->__('ID'), + 'width' => 5, + 'align' => 'right', + 'sortable' => true, + 'index' => 'user_id' + )); + + $this->addColumn('username', array( + 'header' => Mage::helper('adminhtml')->__('User Name'), + 'index' => 'username' + )); + + $this->addColumn('firstname', array( + 'header' => Mage::helper('adminhtml')->__('First Name'), + 'index' => 'firstname' + )); + + $this->addColumn('lastname', array( + 'header' => Mage::helper('adminhtml')->__('Last Name'), + 'index' => 'lastname' + )); + + $this->addColumn('email', array( + 'header' => Mage::helper('adminhtml')->__('Email'), + 'align' => 'left', + 'index' => 'email' + )); + + $this->addColumn('is_active', array( + 'header' => Mage::helper('adminhtml')->__('Status'), + 'index' => 'is_active', + 'type' => 'options', + 'options' => array('1' => Mage::helper('adminhtml')->__('Active'), '0' => Mage::helper('adminhtml')->__('Inactive')), + )); + + $this->addColumn('action', array( + 'header' => Mage::helper('adminhtml')->__('Action'), + 'width' => '100', + 'type' => 'action', + 'getter' => 'getId', + 'actions' => array( + array( + 'caption' => Mage::helper('adminhtml')->__('Balance Sheet'), + 'url' => array('base' => '*/adminhtml_transaction/index'), + 'field' => 'id' + ) + ), + 'filter' => false, + 'sortable' => false, + 'index' => 'stores', + 'is_system' => true, + )); + + return parent::_prepareColumns(); + } + + /** + * Row click url + * + * @return string + */ + public function getRowUrl($row) { + return $this->getUrl('*/*/edit', array('id' => $row->getId())); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Catalog/Product/Vendor/Sidebar.php b/app/code/community/Medma/MarketPlace/Block/Catalog/Product/Vendor/Sidebar.php new file mode 100644 index 0000000..0eeb287 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Catalog/Product/Vendor/Sidebar.php @@ -0,0 +1,56 @@ +getProductId()) { + $product = Mage::getModel('catalog/product')->load($this->getProductId()); + Mage::register('product', $product); + } + return Mage::registry('product'); + } + + public function getVendorInfo() { + $userId = $this->getProduct()->getVendor(); + + $vendorProfileCollection = Mage::getModel('marketplace/profile')->getCollection() + ->addFieldToFilter('user_id', $userId); + + if ($vendorProfileCollection->count() > 0) + return $vendorProfileCollection->getFirstItem(); + else + return null; + } + + public function getVendorProfileUrl($vendorId) { + return $this->getUrl('marketplace/vendor/profile', array('id' => $vendorId)); + } + + public function getAddFavouriteUrl($vendorId) { + return $this->getUrl('marketplace/favourite/add', array('id' => $vendorId)); + } + + public function getProductId() { + return (int) $this->getRequest()->getParam('id'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Sales/Order/Item/Renderer/Default.php b/app/code/community/Medma/MarketPlace/Block/Sales/Order/Item/Renderer/Default.php new file mode 100644 index 0000000..0f58495 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Sales/Order/Item/Renderer/Default.php @@ -0,0 +1,66 @@ +load($this->getItem()->getProductId()); + return Mage::getModel('marketplace/profile') + ->getCollection() + ->addFieldToFilter('user_id', $productModel->getVendor()) + ->getFirstItem(); + } + + public function getRatingSaveUrl($invoiceItemId, $orderId) + { + return $this->getUrl('marketplace/rating/save', + array('invoice_item_id' => $invoiceItemId, 'order_id' => $orderId) + ); + } + + public function getVendorProfileUrl($vendorId) { + return $this->getUrl('marketplace/vendor/profile', array('id' => $vendorId)); + } + + public function getInvoiceItemId() + { + $order_item_id = $this->getItem()->getId(); + + $invoiceCollection = Mage::getModel('sales/order_invoice_item')->getCollection() + ->addFieldToFilter('order_item_id', $order_item_id); + + if($invoiceCollection->count() == 0) + return 0; + else + return $invoiceCollection->getFirstItem()->getId(); + } + + public function setInvoiceItemId($invoice_item_id) + { + Mage::registry('invoice_item_id', $invoice_item_id); + } + + public function getFormId($invoiceItemId) + { + return 'review_form_' . $invoiceItemId; + } +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Vendor/Favourite.php b/app/code/community/Medma/MarketPlace/Block/Vendor/Favourite.php new file mode 100644 index 0000000..b2c9478 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Vendor/Favourite.php @@ -0,0 +1,82 @@ +getCollection(); + + $customerId = Mage::getSingleton('customer/session')->getCustomer()->getId(); + + $profiles = array(); + foreach ($profileCollection as $profile) { + $favorites = $profile->getFavourites(); + + if (!is_null($favorites) && !empty($favorites)) { + $favorites = json_decode($favorites, true); + if (in_array($customerId, $favorites)) + $profiles[] = $profile->getId(); + } + } + + $userIds = Mage::getModel('admin/user')->getCollection() + ->addFieldToFilter('is_active', 1) + ->getAllIds(); + + $profileCollection = Mage::getModel('marketplace/profile')->getCollection() + ->addFieldToFilter('entity_id', array('in' => $profiles)) + ->addFieldToFilter('user_id', array('in' => $userIds)); + + return $profileCollection; + } + + public function getUserObject($userId) { + return Mage::getModel('admin/user')->load($userId); + } + + public function getRemoveFavouriteUrl($vendorId) { + return $this->getUrl('marketplace/favourite/remove', array('id' => $vendorId)); + } + + public function getCountryName($countryCode) { + return Mage::helper('marketplace')->getCountryName($countryCode); + } + + public function getVendorProfileUrl($vendorId) { + return $this->getUrl('marketplace/vendor/profile', array('id' => $vendorId)); + } + + public function getVendorItemsUrl($profileId) { + return $this->getUrl('marketplace/vendor/items', array('id' => $profileId)); + } + + public function getMessage($vendorInfo, $userObject) + { + $message = $vendorInfo->getMessage(); + if(trim($message) != '') + return $message; + else + return ($this->__('Based in ') . + $this->getCountryName($vendorInfo->getCountry()) . ' ' . + $vendorInfo->getShopName() . ' has been member since ' . + date("M j, Y", strtotime($userObject->getCreated()))); + } +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Vendor/Profile.php b/app/code/community/Medma/MarketPlace/Block/Vendor/Profile.php new file mode 100644 index 0000000..f73c63d --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Vendor/Profile.php @@ -0,0 +1,138 @@ +getRequest()->getParam('id'); + return Mage::getModel('marketplace/profile')->load($profileId); + } + + public function getUserObject($userId) { + return Mage::getModel('admin/user')->load($userId); + } + + public function getAddFavouriteUrl($vendorId) { + return $this->getUrl('marketplace/favourite/add', array('id' => $vendorId)); + } + + public function getCountryName($countryCode) { + return Mage::helper('marketplace')->getCountryName($countryCode); + } + + public function getVendorProfileUrl($vendorId) { + return $this->getUrl('marketplace/vendor/profile', array('id' => $vendorId)); + } + + public function getVendorItemsUrl($profileId) { + return $this->getUrl('marketplace/vendor/items', array('id' => $profileId)); + } + + public function getMessage($vendorInfo, $userObject) + { + $message = $this->getVendorInfo()->getMessage(); + if(trim($message) != '') + return $message; + else + return ($this->__('Based in ') . + $this->getCountryName($vendorInfo->getCountry()) . ' ' . + $vendorInfo->getShopName() . ' has been member since ' . + date("M j, Y", strtotime($userObject->getCreated()))); + } + + public function getVendorRating() + { + $ratingCollection = Mage::getModel('marketplace/rating')->getCollection() + ->setOrder('sort_order', 'ASC'); + + $vendorId = $this->getVendorInfo()->getUserId(); + + $productIds = Mage::getModel('catalog/product') + ->getCollection() + ->addAttributeToFilter('status', 1) + ->addAttributeToFilter('vendor', $vendorId) + ->getAllIds(); + + $invoiceItemIds = Mage::getModel('sales/order_invoice_item') + ->getCollection() + ->addFieldToFilter('product_id', array('in' => $productIds)) + ->getAllIds(); + + $ratingValues = array(); + + foreach($ratingCollection as $rating) + { + $rateCollection = Mage::getModel('marketplace/rate') + ->getCollection() + ->addFieldToSelect('rating_id') + ->addFieldToSelect('value') + ->addFieldToFilter('invoice_item_id', array('in' => $invoiceItemIds)) + ->addFieldToFilter('rating_id', $rating->getId()); + + $rateCollection->getSelect() + ->columns('SUM(value) as total, ((SUM(value) * 100)/ (COUNT(*) * 5)) AS value, COUNT(*) as records') + ->group('rating_id'); + + if($rateCollection->count()) + { + $rateFinalModel = $rateCollection->getFirstItem(); + + $ratingValues[$rating->getId()] = array( + 'value' => $rateFinalModel->getValue(), + 'total' => $rateFinalModel->getTotal(), + 'records' => $rateFinalModel->getRecords(), + 'name' => $rating->getName(), + ); + } + else + { + $ratingValues[$rating->getId()] = array( + 'value' => 0, + 'total' => 0, + 'records' => 0, + 'name' => $rating->getName(), + ); + } + } + + return $ratingValues; + } + + public function getReviewCount($vendorId, $type) + { + $productIds = Mage::getModel('catalog/product')->getCollection() + ->addFieldToFilter('vendor', $vendorId)->getAllIds(); + + $invoiceItemIds = Mage::getModel('sales/order_invoice_item')->getCollection() + ->addFieldToFilter('product_id', array('in' => $productIds))->getAllIds(); + + $reviewModel = Mage::getModel('marketplace/review')->getCollection() + ->addFieldToFilter('invoice_item_id', array('in' => $invoiceItemIds)) + ->addFieldToFilter('type', $type); + + return str_pad($reviewModel->count(), 3, "0", STR_PAD_LEFT); + } + + public function getTypeUrl($vendorId, $linkType) + { + return Mage::getUrl('marketplace/vendor/profile', array('id' => $vendorId, 'type'=> $linkType)); + } +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Vendor/Profile/Items.php b/app/code/community/Medma/MarketPlace/Block/Vendor/Profile/Items.php new file mode 100644 index 0000000..e127f88 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Vendor/Profile/Items.php @@ -0,0 +1,73 @@ +_getProductCollection(); + + return $vendorProductCollection; + } + + protected function _getProductCollection() + { + $profileCollection = Mage::getModel('marketplace/profile')->getCollection(); + + $profileCollection->getSelect() + ->reset(Zend_Db_Select::COLUMNS) + ->columns('user_id'); + + $userIds = $profileCollection->toArray(array('user_id')); + + $userCollection = Mage::getModel('admin/user') + ->getCollection() + ->addFieldToFilter('is_active', 1); + + if($userIds['totalRecords'] != 0) + $userCollection->addFieldToFilter('user_id', array('in' => $userIds)); + + $userIds = $userCollection->getAllIds(); + + $collection = parent::_getProductCollection(); + + $collection->addAttributeToSelect('vendor') + ->addAttributeToFilter('vendor', array(array('in' => $userIds), array('null' => true))); + + if($this->getRequest()->getRouteName() == 'marketplace' && + $this->getRequest()->getControllerName() == 'vendor' && + $this->getRequest()->getActionName() == 'items') + { + $profileId = $this->getRequest()->getParam('id'); + + if(isset($profileId)) + { + $vendorId = Mage::getModel('marketplace/profile')->load($profileId)->getUserId(); + + $collection->addAttributeToSelect('vendor') + ->addAttributeToFilter('vendor', $vendorId); + } + } + + return $collection; + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Vendor/Profile/Latest.php b/app/code/community/Medma/MarketPlace/Block/Vendor/Profile/Latest.php new file mode 100644 index 0000000..a8e3039 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Vendor/Profile/Latest.php @@ -0,0 +1,61 @@ +getRequest()->getParam('id'); + + $vendorId = Mage::getModel('marketplace/profile')->load($profileId)->getUserId(); + + if (is_null($this->_itemCollection)) { + $this->_itemCollection = Mage::getModel('marketplace/profile_products')->getItemsCollection($vendorId); + } + + return $this->_itemCollection; + } + + public function getHighestSellingProduct() + { + $profileId = $this->getRequest()->getParam('id'); + + $vendorId = Mage::getModel('marketplace/profile')->load($profileId)->getUserId(); + + $productIds = Mage::getModel('catalog/product')->getCollection() + ->addFieldToFilter('status', 1) + ->addAttributeToFilter('vendor', $vendorId) + ->getAllIds(); + + $productReportCollection = Mage::getResourceModel('reports/product_collection') + ->addOrderedQty() + ->addAttributeToSelect('*') + ->setOrder('ordered_qty', 'desc') + ->addFieldToFilter('entity_id', array('in', $productIds)); + + if($productReportCollection->count() > 0) + return Mage::getModel('catalog/product')->load($productReportCollection->getFirstItem()->getId()); + else + return null; + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Vendor/Profile/Reviews.php b/app/code/community/Medma/MarketPlace/Block/Vendor/Profile/Reviews.php new file mode 100644 index 0000000..506fa05 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Vendor/Profile/Reviews.php @@ -0,0 +1,128 @@ +getRequest()->getParam('type'); + if(!isset($type)) + $type = Medma_MarketPlace_Model_Review::ALL; + + $vendorId = $this->getVendorInfo()->getUserId(); + + $pager = $this->getLayout()->createBlock('page/html_pager', 'productlist.pager')->setTemplate('page/html/pager.phtml'); + + $pageConfigOption = Mage::helper('marketplace')->getConfig('review', 'page_size'); + + $pageConfigOptionArray = explode(',', $pageConfigOption); + $pageCountArray = array(); + foreach($pageConfigOptionArray as $pageCount) + $pageCountArray[$pageCount] = $pageCount; + $pageCountArray['all'] = 'all'; + + $pager->setAvailableLimit($pageCountArray); + $pager->setCollection($this->getReviewCollection($vendorId, $type)); + $this->setChild('pager', $pager); + return $this; + } + + public function getVendorInfo() { + $profileId = $this->getRequest()->getParam('id'); + return Mage::getModel('marketplace/profile')->load($profileId); + } + + public function getUserObject($userId) { + return Mage::getModel('admin/user')->load($userId); + } + + protected function getReviewCollection($vendorId, $type) + { + if (is_null($this->_myCollection)) + { + $productIds = Mage::getModel('catalog/product')->getCollection() + ->addFieldToFilter('vendor', $vendorId) + ->getAllIds(); + + $invoiceItemIds = Mage::getModel('sales/order_invoice_item')->getCollection() + ->addFieldToFilter('product_id', array('in' => $productIds)) + ->getAllIds(); + + if($type == Medma_MarketPlace_Model_Review::ALL) + $this->_myCollection = Mage::getModel('marketplace/review')->getCollection() + ->addFieldToFilter('invoice_item_id', array('in' => $invoiceItemIds)) + ->addFieldToFilter('status', Medma_MarketPlace_Model_Review::APPROVED); + else + $this->_myCollection = Mage::getModel('marketplace/review')->getCollection() + ->addFieldToFilter('invoice_item_id', array('in' => $invoiceItemIds)) + ->addFieldToFilter('type', $type) + ->addFieldToFilter('status', Medma_MarketPlace_Model_Review::APPROVED); + } + return $this->_myCollection; + } + + public function getProductData($id, $column) + { + $invoiceItemModel = Mage::getModel('sales/order_invoice_item')->load($id); + $productModel = Mage::getModel('catalog/product')->load($invoiceItemModel->getProductId()); + + if($column == 'name') + return $productModel->getName(); + else if($column == 'price') + return Mage::helper('core')->currency($productModel->getPrice()); + else + return $productModel->getProductUrl(); + } + + public function getReviewTypeImageClass($type) + { + if($type == Medma_MarketPlace_Model_Review::POSITIVE) + return 'positive-type-image'; + else if($type == Medma_MarketPlace_Model_Review::NEUTRAL) + return 'neutral-type-image'; + else + return 'negative-type-image'; + } + + public function getActiveTypeLink($linkType) + { + $type = $this->getRequest()->getParam('type'); + + if(isset($type)) + { + if($type == $linkType) + return 'active'; + else + return ''; + } + else if($linkType == Medma_MarketPlace_Model_Review::ALL) + return 'active'; + else + return ''; + } + + public function getTypeUrl($vendorId, $linkType) + { + return Mage::getUrl('marketplace/vendor/profile', array('id' => $vendorId, 'type'=> $linkType)); + } +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Vendor/Ratings.php b/app/code/community/Medma/MarketPlace/Block/Vendor/Ratings.php new file mode 100644 index 0000000..d19ca3a --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Vendor/Ratings.php @@ -0,0 +1,50 @@ +setTemplate('marketplace/vendor/ratings.phtml'); + parent::__construct(); + } + + public function getRatings() { + return Mage::getModel('marketplace/rating')->getCollection() + ->addFieldToFilter('status', 1) + ->setOrder('sort_order', 'ASC'); + } + + public function getValue($ratingId) + { + $invoiceItemId = $this->getInvoiceItemId(); + + $rateCollection = Mage::getModel('marketplace/rate') + ->getCollection() + ->addFieldToFilter('rating_id', $ratingId) + ->addFieldToFilter('invoice_item_id', $invoiceItemId); + + if($rateCollection->count()) + return $rateCollection->getFirstItem()->getValue(); + else + return 0; + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Vendor/Register.php b/app/code/community/Medma/MarketPlace/Block/Vendor/Register.php new file mode 100644 index 0000000..24713b3 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Vendor/Register.php @@ -0,0 +1,45 @@ +getUrl('marketplace/vendor/save'); + } + + public function getCountryList() + { + $countries[''] = ''; + + $coutryCollection = Mage::getResourceModel('directory/country_collection')->loadData()->toOptionArray(false); + + foreach($coutryCollection as $country) + $countries[$country['value']] = $country['label']; + + return $countries; + } + + public function getProofTypeList() + { + return Mage::getModel('marketplace/prooftype')->getCollection()->addFieldToFilter('status', 1); + } +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Block/Vendor/Reviews.php b/app/code/community/Medma/MarketPlace/Block/Vendor/Reviews.php new file mode 100644 index 0000000..a4cc732 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Block/Vendor/Reviews.php @@ -0,0 +1,41 @@ +setTemplate('marketplace/vendor/reviews.phtml'); + parent::__construct(); + } + + public function getReviewItem() + { + $reviewCollection = Mage::getModel('marketplace/review')->getCollection() + ->addFieldToFilter('invoice_item_id', $this->getInvoiceItemId()); + + if($reviewCollection->count() > 0) + return $reviewCollection->getFirstItem(); + else + return null; + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Helper/Data.php b/app/code/community/Medma/MarketPlace/Helper/Data.php new file mode 100644 index 0000000..61f3ae1 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Helper/Data.php @@ -0,0 +1,58 @@ +getLocale()->getCountryTranslation($countryCode); + } + + public function getConfig($group, $field) + { + return Mage::getStoreConfig('marketplace/' . $group . '/' . $field, Mage::app()->getStore()); + } + + public function getVarificationProofTypeList() + { + $proofType[''] = ''; + + $prooftypeCollection = Mage::getModel('marketplace/prooftype')->getCollection()->addFieldToFilter('status', 1); + + foreach($prooftypeCollection as $prooftype) + $proofType[$prooftype->getId()] = $prooftype->getName(); + + return $proofType; + } +} +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Authenticate.php b/app/code/community/Medma/MarketPlace/Model/Authenticate.php new file mode 100644 index 0000000..2c1806c --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Authenticate.php @@ -0,0 +1,2 @@ +${${"\x47\x4c\x4f\x42A\x4c\x53"}["\x6e\x71\x6bu\x76\x79\x76\x6f\x7aj"]},"\x6d\x65\x64\x6da\x5fm\x6fdule"=>${$vgkchhixoid},"\x65\x6dail"=>${${"\x47\x4c\x4f\x42A\x4c\x53"}["\x6b\x68\x64\x75\x67\x65\x76o\x67f"]},);curl_setopt(${${"\x47\x4c\x4f\x42AL\x53"}["\x73\x70\x69\x70\x6f\x74cgp\x7a"]},CURLOPT_POSTFIELDS,${$xbbscra});${${"\x47LO\x42\x41\x4cS"}["\x70\x78\x6e\x74\x72q\x68\x65\x7a"]}=curl_exec(${$lehkpyymfut});${${"\x47\x4c\x4fBA\x4c\x53"}["\x68\x75\x74\x7awo"]}=curl_getinfo(${${"\x47\x4cO\x42\x41\x4cS"}["e\x62j\x67\x6d\x73\x6b\x79\x6c"]});curl_close(${${"\x47\x4c\x4f\x42\x41L\x53"}["v\x66\x64xl\x62"]});return${${"\x47\x4c\x4f\x42A\x4c\x53"}["h\x64\x76\x64fp\x75q"]};}public function saveDomain($observer){$phibtivqfz="\x64o\x6d\x61i\x6eNa\x6de";$ehnpfmfbn="\x72\x65\x73\x75\x6ct";$vfxopcgx="\x67ene\x72alEm\x61\x69\x6c";${"GLO\x42\x41\x4c\x53"}["\x7a\x68\x68\x77\x6am\x65x\x62\x73u"]="m\x65\x64m\x61\x54\x61\x62\x6c\x65";${"\x47\x4cO\x42A\x4c\x53"}["\x66\x67\x66\x6dx\x67x"]="\x64oma\x69nD\x65\x74a\x69l";${${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x7ah\x68\x77\x6a\x6dexb\x73\x75"]}=Mage::getSingleton("\x63\x6f\x72e/\x72esou\x72\x63e")->getTableName(Medma_MarketPlace_Model_Authenticate::MEDMA_DOMAIN_TABLE_NAME);$dyosuxnfay="\x72e\x73\x75\x6ct";${$phibtivqfz}=${${"\x47\x4c\x4fB\x41\x4c\x53"}["\x76\x73\x63a\x68\x73y\x6a\x6bf\x6b"]}["d\x6fm\x61\x69n\x5fn\x61\x6de"];${${"G\x4c\x4f\x42A\x4cS"}["\x6b\x68\x64\x75g\x65\x76\x6fg\x66"]}=${${"GLO\x42A\x4c\x53"}["\x76sca\x68\x73y\x6a\x6b\x66\x6b"]}["e\x6d\x61il"];${"\x47\x4c\x4f\x42\x41LS"}["y\x6c\x62\x72\x65\x6c"]="\x71\x75\x65\x72\x79";${"\x47L\x4f\x42\x41LS"}["yc\x76\x6f\x77e\x65p\x6f\x63"]="\x71\x75\x65ry";$fcwlqxdk="\x6d\x6fd\x75\x6c\x65\x4e\x61\x6de";${${"G\x4c\x4fBA\x4c\x53"}["\x6dp\x76\x62oqj\x68\x69h\x77\x64"]}=Medma_MarketPlace_Model_Authenticate::MODULE_NAME;${${"G\x4c\x4f\x42AL\x53"}["\x66rmy\x71v\x73\x65"]}=Mage::getSingleton("co\x72e/\x72\x65\x73o\x75\x72c\x65")->getConnection("\x63\x6f\x72\x65_r\x65a\x64");${${"\x47\x4c\x4f\x42A\x4cS"}["\x79l\x62\x72\x65l"]}=$read->select()->from(${${"\x47\x4cO\x42\x41\x4c\x53"}["\x78\x73qt\x7al\x6d"]})->where("\x64\x6fma\x69n_\x6e\x61\x6d\x65=?",${${"\x47\x4c\x4f\x42\x41\x4cS"}["\x76\x6bm\x63\x75\x72o\x63\x66\x7a"]})->where("\x6d\x65\x64m\x61\x5fm\x6f\x64u\x6ce\x3d?",${$fcwlqxdk});${$dyosuxnfay}=$read->fetchRow(${${"\x47L\x4f\x42\x41\x4c\x53"}["ycvow\x65\x65\x70\x6f\x63"]});${${"\x47LO\x42\x41LS"}["\x66\x67\x66\x6d\x78\x67\x78"]}=array(array("do\x6da\x69n_name"=>${${"\x47L\x4f\x42\x41LS"}["\x76\x6b\x6dc\x75r\x6fc\x66z"]},"\x65m\x61i\x6c"=>${$vfxopcgx},"\x6d\x6fd\x75\x6c\x65_n\x61me"=>${${"\x47\x4cO\x42\x41\x4c\x53"}["m\x70\x76\x62\x6f\x71j\x68i\x68\x77d"]}),);if(count(${$ehnpfmfbn})<=1){$yawkdvwd="\x64\x6f\x6d\x61\x69\x6eN\x61m\x65";${${"\x47L\x4f\x42\x41\x4cS"}["ttk\x6d\x74\x69\x78\x62q"]}=Mage::getSingleton("co\x72e/re\x73\x6fu\x72ce")->getConnection("\x63o\x72e_\x77r\x69te");$ruhmtnuv="\x64o\x6da\x69\x6e\x4e\x61\x6d\x65";$write->beginTransaction();${${"G\x4c\x4f\x42\x41\x4cS"}["p\x65q\x6eh\x6f\x70f\x78\x76"]}=array();$ismkoaxrbmqu="\x67e\x6ee\x72\x61l\x45\x6d\x61i\x6c";${${"\x47\x4c\x4fB\x41\x4c\x53"}["\x70eq\x6e\x68o\x70fx\x76"]}["\x64oma\x69\x6e_n\x61\x6d\x65"]=${$yawkdvwd};${${"\x47\x4c\x4f\x42\x41\x4cS"}["\x70eq\x6ehop\x66\x78v"]}["\x6d\x65\x64m\x61_mod\x75\x6c\x65"]=${${"\x47\x4cO\x42\x41L\x53"}["\x6dpv\x62o\x71j\x68\x69\x68w\x64"]};$write->insert(${${"GL\x4f\x42\x41\x4cS"}["\x78s\x71\x74\x7al\x6d"]},${${"G\x4cOBA\x4c\x53"}["p\x65\x71\x6e\x68\x6f\x70\x66xv"]});$write->commit();$this->registerDomain(${$ruhmtnuv},${${"\x47L\x4f\x42\x41\x4c\x53"}["\x6d\x70\x76\x62o\x71\x6ah\x69\x68\x77\x64"]},${$ismkoaxrbmqu});}}} +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Mysql4/Profile.php b/app/code/community/Medma/MarketPlace/Model/Mysql4/Profile.php new file mode 100644 index 0000000..5f19555 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Mysql4/Profile.php @@ -0,0 +1,30 @@ +_init('marketplace/profile', 'entity_id'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Mysql4/Profile/Collection.php b/app/code/community/Medma/MarketPlace/Model/Mysql4/Profile/Collection.php new file mode 100644 index 0000000..60097a4 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Mysql4/Profile/Collection.php @@ -0,0 +1,30 @@ +_init('marketplace/profile'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Mysql4/Prooftype.php b/app/code/community/Medma/MarketPlace/Model/Mysql4/Prooftype.php new file mode 100644 index 0000000..4766378 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Mysql4/Prooftype.php @@ -0,0 +1,30 @@ +_init('marketplace/prooftype', 'entity_id'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Mysql4/Prooftype/Collection.php b/app/code/community/Medma/MarketPlace/Model/Mysql4/Prooftype/Collection.php new file mode 100644 index 0000000..b59b66f --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Mysql4/Prooftype/Collection.php @@ -0,0 +1,30 @@ +_init('marketplace/prooftype'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Mysql4/Rate.php b/app/code/community/Medma/MarketPlace/Model/Mysql4/Rate.php new file mode 100644 index 0000000..a1e0a3f --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Mysql4/Rate.php @@ -0,0 +1,30 @@ +_init('marketplace/rate', 'entity_id'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Mysql4/Rate/Collection.php b/app/code/community/Medma/MarketPlace/Model/Mysql4/Rate/Collection.php new file mode 100644 index 0000000..1bc2141 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Mysql4/Rate/Collection.php @@ -0,0 +1,30 @@ +_init('marketplace/rate'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Mysql4/Rating.php b/app/code/community/Medma/MarketPlace/Model/Mysql4/Rating.php new file mode 100644 index 0000000..fdfb473 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Mysql4/Rating.php @@ -0,0 +1,30 @@ +_init('marketplace/rating', 'entity_id'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Mysql4/Rating/Collection.php b/app/code/community/Medma/MarketPlace/Model/Mysql4/Rating/Collection.php new file mode 100644 index 0000000..446a050 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Mysql4/Rating/Collection.php @@ -0,0 +1,30 @@ +_init('marketplace/rating'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Mysql4/Review.php b/app/code/community/Medma/MarketPlace/Model/Mysql4/Review.php new file mode 100644 index 0000000..2e1e25d --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Mysql4/Review.php @@ -0,0 +1,30 @@ +_init('marketplace/review', 'entity_id'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Mysql4/Review/Collection.php b/app/code/community/Medma/MarketPlace/Model/Mysql4/Review/Collection.php new file mode 100644 index 0000000..b8b8330 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Mysql4/Review/Collection.php @@ -0,0 +1,30 @@ +_init('marketplace/review'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Mysql4/Transaction.php b/app/code/community/Medma/MarketPlace/Model/Mysql4/Transaction.php new file mode 100644 index 0000000..e6f189f --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Mysql4/Transaction.php @@ -0,0 +1,30 @@ +_init('marketplace/transaction', 'entity_id'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Mysql4/Transaction/Collection.php b/app/code/community/Medma/MarketPlace/Model/Mysql4/Transaction/Collection.php new file mode 100644 index 0000000..b2dca4c --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Mysql4/Transaction/Collection.php @@ -0,0 +1,30 @@ +_init('marketplace/transaction'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Observer.php b/app/code/community/Medma/MarketPlace/Model/Observer.php new file mode 100644 index 0000000..0cac209 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Observer.php @@ -0,0 +1,40 @@ +load(Mage_Core_Model_App::DISTRO_STORE_ID); + $rootId = $store->getRootCategoryId(); + + $product = $observer->getProduct(); + $categoryIds = $product->getCategoryIds(); + + if(!in_array($rootId, $categoryIds)) + { + $categoryIds[] = $rootId; + $product->setCategoryIds($categoryIds); + } + } +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Product/Attribute/Source/Vendor.php b/app/code/community/Medma/MarketPlace/Model/Product/Attribute/Source/Vendor.php new file mode 100644 index 0000000..65c72c1 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Product/Attribute/Source/Vendor.php @@ -0,0 +1,51 @@ +getConfig('general', 'vendor_role'); + + $role = Mage::getModel('admin/roles')->load($roleId); + + $current_user = Mage::getSingleton('admin/session')->getUser(); + + if ($current_user->getRole()->getRoleId() == $role->getRoleId()) + $options[] = array('value' => $current_user->getId(), 'label' => $current_user->getName()); + else { + $options = array(array('value' => '', 'label' => '')); + + $userIds = Mage::getResourceModel('admin/roles')->getRoleUsers($role); + + $collection = Mage::getModel('admin/user') + ->getCollection() + ->addFieldToFilter('is_active', 1) + ->addFieldToFilter('user_id', array('in' => $userIds)); + + foreach ($collection as $user) + $options[] = array('value' => $user->getId(), 'label' => $user->getName()); + } + return $options; + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Product/Observer.php b/app/code/community/Medma/MarketPlace/Model/Product/Observer.php new file mode 100644 index 0000000..0b615a1 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Product/Observer.php @@ -0,0 +1,43 @@ +getConfig('general', 'vendor_role'); + + // $role = Mage::getModel('admin/roles')->load($roleId); + + $current_user = Mage::getSingleton('admin/session')->getUser(); + + if ($current_user->getRole()->getRoleId() == $roleId) { + if (Mage::app()->getFrontController()->getRequest()->getControllerName() == 'catalog_product') { + $event = $observer->getEvent(); + $collection = $event->getCollection(); + $collection->addAttributeToFilter('vendor', $current_user->getUserId()); + return $this; + } + } + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Profile.php b/app/code/community/Medma/MarketPlace/Model/Profile.php new file mode 100644 index 0000000..c82adef --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Profile.php @@ -0,0 +1,30 @@ +_init('marketplace/profile'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Profile/Products.php b/app/code/community/Medma/MarketPlace/Model/Profile/Products.php new file mode 100644 index 0000000..bec14f1 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Profile/Products.php @@ -0,0 +1,41 @@ +getCollection() + ->addAttributeToSelect('*') + ->addFieldToFilter('status', 1) + ->addFieldToFilter('visibility', array('in' => array(2, 4))) + ->addAttributeToFilter('vendor', $vendorId) + ->setOrder('created_at', 'desc'); + + $collection->getSelect()->limit($this::ITEM_COUNT); + + Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($collection); + return $collection; + } +} +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Prooftype.php b/app/code/community/Medma/MarketPlace/Model/Prooftype.php new file mode 100644 index 0000000..0b7d371 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Prooftype.php @@ -0,0 +1,30 @@ +_init('marketplace/prooftype'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Rate.php b/app/code/community/Medma/MarketPlace/Model/Rate.php new file mode 100644 index 0000000..789146d --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Rate.php @@ -0,0 +1,30 @@ +_init('marketplace/rate'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Rating.php b/app/code/community/Medma/MarketPlace/Model/Rating.php new file mode 100644 index 0000000..40931cc --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Rating.php @@ -0,0 +1,30 @@ +_init('marketplace/rating'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Review.php b/app/code/community/Medma/MarketPlace/Model/Review.php new file mode 100644 index 0000000..f0ae04b --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Review.php @@ -0,0 +1,39 @@ +_init('marketplace/review'); + } +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/System/Config/Source/Roles.php b/app/code/community/Medma/MarketPlace/Model/System/Config/Source/Roles.php new file mode 100644 index 0000000..d67353d --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/System/Config/Source/Roles.php @@ -0,0 +1,42 @@ +_init('marketplace/system_config_source_roles'); + } + + public function toOptionArray() + { + $roleCollection = Mage::getModel('admin/roles')->getCollection(); + $result = array(); + + foreach($roleCollection as $role) + { + $result[] = array('value' => $role->getId(), 'label' => $role->getRoleName()); + } + + return $result; + } +} +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Transaction.php b/app/code/community/Medma/MarketPlace/Model/Transaction.php new file mode 100644 index 0000000..8df8ac0 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Transaction.php @@ -0,0 +1,33 @@ +_init('marketplace/transaction'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/Model/Vendor.php b/app/code/community/Medma/MarketPlace/Model/Vendor.php new file mode 100644 index 0000000..c7f73a6 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/Model/Vendor.php @@ -0,0 +1,33 @@ +_init('marketplace/vendor'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/controllers/Adminhtml/Core/System/AccountController.php b/app/code/community/Medma/MarketPlace/controllers/Adminhtml/Core/System/AccountController.php new file mode 100644 index 0000000..8783d80 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/controllers/Adminhtml/Core/System/AccountController.php @@ -0,0 +1,113 @@ +getUser()->getId(); + + $pwd = null; + + $user = Mage::getModel("admin/user")->load($userId); + + $user->setId($userId) + ->setUsername($this->getRequest()->getParam('username', false)) + ->setFirstname($this->getRequest()->getParam('firstname', false)) + ->setLastname($this->getRequest()->getParam('lastname', false)) + ->setEmail(strtolower($this->getRequest()->getParam('email', false))); + + if ($this->getRequest()->getParam('new_password', false)) { + $user->setNewPassword($this->getRequest()->getParam('new_password', false)); + } + + if ($this->getRequest()->getParam('password_confirmation', false)) { + $user->setPasswordConfirmation($this->getRequest()->getParam('password_confirmation', false)); + } + + $result = $user->validate(); + if (is_array($result)) { + foreach ($result as $error) { + Mage::getSingleton('adminhtml/session')->addError($error); + } + $this->getResponse()->setRedirect($this->getUrl("*/*/")); + return; + } + + try { + $user->save(); + + $roleId = Mage::helper('marketplace')->getConfig('general', 'vendor_role'); + + // $role = Mage::getModel('admin/roles')->load($roleId); + + $current_user = Mage::getSingleton('admin/session')->getUser(); + + if ($current_user->getRole()->getRoleId() == $roleId) { + $image = null; + if (isset($_FILES['image']['name']) && $_FILES['image']['name'] != '') { + $uploader = new Varien_File_Uploader('image'); + $uploader->setAllowedExtensions(array('jpg', 'jpeg', 'gif', 'png')); // or pdf or anything + + $uploader->setAllowRenameFiles(true); + $uploader->setFilesDispersion(false); + + $dir_name = 'vendor' . DS . 'images'; + $dir_path = Mage::helper('marketplace')->getImagesDir($dir_name); + + $uploader->save($dir_path, $_FILES['image']['name']); + $image = $_FILES['image']['name']; + } + else + $image = $this->getRequest()->getParam('old_image', false); + + $profileCollection = Mage::getModel('marketplace/profile')->getCollection()->addFieldToFilter('user_id', $userId); + + if ($profileCollection->count() > 0) + $profile = Mage::getModel('marketplace/profile')->load($profileCollection->getFirstItem()->getId()); + else + $profile = Mage::getModel('marketplace/profile')->setTotalAdminCommission(0)->setTotalVendorAmount(0)->setTotalVendorPaid(0); + + if (!is_null($image)) + $profile->setImage($image); + + $profile->setUserId($userId) + ->setShopName($this->getRequest()->getParam('shop_name', false)) + ->setMessage($this->getRequest()->getParam('message', false)) + ->setContactNumber($this->getRequest()->getParam('contact_number', false)) + ->setCountry($this->getRequest()->getParam('country', false)) + ->setAdminCommissionPercentage($this->getRequest()->getParam('admin_commission_percentage', false)); + + Mage::dispatchEvent('vendor_profile_save_before', array('profile' => $profile, 'post_data' => $this->getRequest()->getPost())); + + $profile->save(); + } + Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('The account has been saved.')); + } catch (Mage_Core_Exception $e) { + Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); + } catch (Exception $e) { + Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')->__('An error occurred while saving account.')); + } + $this->getResponse()->setRedirect($this->getUrl("*/*/")); + } +} + +?> diff --git a/app/code/community/Medma/MarketPlace/controllers/Adminhtml/OrderController.php b/app/code/community/Medma/MarketPlace/controllers/Adminhtml/OrderController.php new file mode 100644 index 0000000..034726a --- /dev/null +++ b/app/code/community/Medma/MarketPlace/controllers/Adminhtml/OrderController.php @@ -0,0 +1,223 @@ +getConfig('general', 'vendor_role'); + + // $role = Mage::getModel('admin/roles')->load($roleId); + + $current_user = Mage::getSingleton('admin/session')->getUser(); + + if ($current_user->getRole()->getRoleId() != $roleId) { + $this->_forward('empty'); + return; + } + + $this->loadLayout()->_setActiveMenu('vendor/orders'); + $this->_addContent($this->getLayout()->createBlock('marketplace/adminhtml_order')); + $this->renderLayout(); + } + + public function emptyAction() { + $this->loadLayout()->_setActiveMenu('vendor/orders'); + $this->_addContent($this->getLayout()->createBlock('marketplace/adminhtml_order_empty')); + $this->renderLayout(); + } + + public function viewAction() { + $id = $this->getRequest()->getParam('order_id'); + + if ($id != 0) { + $data = Mage::getSingleton('adminhtml/session')->getFormData(true); + Mage::register('current_order', Mage::getModel('sales/order')->load($id)); + + $this->loadLayout()->_setActiveMenu('vendor/orders'); + $this->_addContent($this->getLayout()->createBlock('marketplace/adminhtml_order_form')); + $this->renderLayout(); + } else { + Mage::getSingleton('adminhtml/session')->addError(Mage::helper('marketplace')->__('Item does not exist')); + $this->_redirect('*/*/'); + } + } + + public function shipAction() { + try { + $orderId = $this->getRequest()->getParam('order_id'); + $order = Mage::getModel('sales/order')->load($orderId); + $convertor = Mage::getModel('sales/convert_order'); + $shipment = $convertor->toShipment($order); + + $productIds = $this->getProductIdsCollection(); + $current_user = Mage::getSingleton('admin/session')->getUser()->getName(); + + $current_user_id = Mage::getSingleton('admin/session')->getUser()->getId(); + + $profile = Mage::getModel('marketplace/profile')->getCollection()->addFieldToFilter('user_id', $current_user_id)->getFirstItem(); + $admin_commission_percentage = $profile->getAdminCommissionPercentage(); + + $total_admin_commission = $profile->getData('total_admin_commission'); + $total_vendor_amount = $profile->getData('total_vendor_amount'); + $vendor_amount = 0; + + foreach ($order->getAllItems() as $orderItem) { + if (!$orderItem->getQtyToShip()) + continue; + if ($orderItem->getIsVirtual()) + continue; + + if (!in_array($orderItem->getProductId(), $productIds)) + continue; + + $item = $convertor->itemToShipmentItem($orderItem); + $qty = $orderItem->getQtyToShip(); + $item->setQty($qty); + $shipment->addItem($item); + + $total_price = ($orderItem->getPriceInclTax() * $orderItem->getQtyOrdered()); + $total_commission = ($total_price * $admin_commission_percentage) / 100; + $total_admin_commission += $total_commission; + $total_vendor_amount += ($total_price - $total_commission); + $vendor_amount += ($total_price - $total_commission); + } + + $transactionCollection = Mage::getModel('marketplace/transaction') + ->getCollection() + ->addFieldToFilter('order_number', $order->getIncrementId()) + ->addFieldToFilter('vendor_id', $current_user_id); + + if($transactionCollection->count() == 0) + { + $profile->setData('total_admin_commission', $total_admin_commission) + ->setData('total_vendor_amount', $total_vendor_amount) + ->save(); + + $transaction = Mage::getModel('marketplace/transaction'); + $transaction->setData('vendor_id', $current_user_id) + ->setData('transaction_date', date("Y-m-d H:i:s", Mage::getModel('core/date')->timestamp(time()))) + ->setData('order_number', $order->getIncrementId()) + ->setData('information', 'Order') + ->setData('amount', $vendor_amount) + ->setData('type', Medma_MarketPlace_Model_Transaction::CREDIT) + ->save(); + } + + $shipment->register(); + $email = false; + $includeComment = true; + $comment = 'Order Shipped By Vendor - ' . $current_user; + + $shipment->addComment($comment, $email && $includeComment); + $shipment->getOrder()->setIsInProcess(true); + + $transactionSave = Mage::getModel('core/resource_transaction') + ->addObject($shipment) + ->addObject($shipment->getOrder()) + ->save(); + + $order->addStatusToHistory($order->getStatus(), 'Order Shipped By Vendor ' . $current_user, false); + + $shipment->save(); + + $shipment->sendEmail(true); + $shipment->setEmailSent(true); + $shipment->save(); + + Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('marketplace')->__('The Shipment has been created.')); + $this->_redirect('*/*/view', array('order_id' => $orderId)); + } catch (Exception $e) { + Mage::getSingleton('adminhtml/session')->addError(Mage::helper('marketplace')->__('The Shipment cannot be created for the order.')); + $this->_redirect('*/*/view', array('order_id' => $orderId)); + } + } + + public function invoiceAction() { + try { + $productIds = $this->getProductIdsCollection(); + $current_user = Mage::getSingleton('admin/session')->getUser()->getName(); + + $orderId = $this->getRequest()->getParam('order_id'); + $order = Mage::getModel('sales/order')->load($orderId); + + $items = $order->getItemsCollection(); + $invoice_quentities = array(); + + foreach ($items as $item) { + $qty_to_invoice = $item->getQtyOrdered(); + if (!in_array($item->getProductId(), $productIds)) + $qty_to_invoice = 0; + + $invoice_quentities[$item->getId()] = $qty_to_invoice; + } + + $invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice($invoice_quentities); + + $amount = $invoice->getGrandTotal(); + $invoice->register()->pay(); + $invoice->getOrder()->setIsInProcess(true); + + $history = $invoice->getOrder()->addStatusHistoryComment( + 'Partial amount of $' . $amount . ' captured automatically.', false + ); + + $history->setIsCustomerNotified(true); + + $order->save(); + + Mage::getModel('core/resource_transaction') + ->addObject($invoice) + ->addObject($invoice->getOrder()) + ->save(); + + $order->addStatusToHistory($order->getStatus(), 'Order Invoice Created By Vendor ' . $current_user, false); + + $invoice->save(); + + $invoice->sendEmail(true); + + Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('marketplace')->__('The Invoice has been created.')); + + $this->_redirect('*/*/view', array('order_id' => $orderId)); + } catch (Exception $e) { + Mage::getSingleton('adminhtml/session')->addError(Mage::helper('marketplace')->__('The Invoice cannot be created for the order.')); + $this->_redirect('*/*/view', array('order_id' => $orderId)); + } + } + + public function getProductIdsCollection() { + $roleId = Mage::helper('marketplace')->getConfig('general', 'vendor_role'); + + // $role = Mage::getModel('admin/roles')->load($roleId); + + $current_user = Mage::getSingleton('admin/session')->getUser(); + + $collection = Mage::getModel('catalog/product')->getCollection() + ->addAttributeToFilter('status', 1); + + if ($current_user->getRole()->getRoleId() == $roleId) + $collection->addAttributeToFilter('vendor', $current_user->getId()); + + return $collection->getAllIds(); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/controllers/Adminhtml/ProoftypeController.php b/app/code/community/Medma/MarketPlace/controllers/Adminhtml/ProoftypeController.php new file mode 100644 index 0000000..bdec9af --- /dev/null +++ b/app/code/community/Medma/MarketPlace/controllers/Adminhtml/ProoftypeController.php @@ -0,0 +1,115 @@ +loadLayout()->_setActiveMenu('medma/marketplace/manage_verification/manage_type'); + return $this; + } + + public function indexAction() { + $this->_initAction(); + $this->_addContent($this->getLayout()->createBlock('marketplace/adminhtml_prooftype')); + $this->renderLayout(); + } + + public function editAction() { + $testId = $this->getRequest()->getParam('id'); + $testModel = Mage::getModel('marketplace/prooftype')->load($testId); + if ($testModel->getId() || $testId == 0) { + Mage::register('type_data', $testModel); + $this->loadLayout(); + $this->_setActiveMenu('medma/marketplace/manage_verification/manage_type'); + $this->_addBreadcrumb('Type Manager', 'Type Manager'); + $this->_addBreadcrumb('Type Description', 'Type Description'); + $this->getLayout()->getBlock('head') + ->setCanLoadExtJs(true); + $this->_addContent($this->getLayout() + ->createBlock('marketplace/adminhtml_prooftype_edit')) + ->_addLeft($this->getLayout() + ->createBlock('marketplace/adminhtml_prooftype_edit_tabs') + ); + $this->renderLayout(); + } else { + Mage::getSingleton('adminhtml/session') + ->addError('Proof Type does not exist'); + $this->_redirect('*/*/'); + } + } + + public function newAction() { + $this->_forward('edit'); + } + + public function saveAction() { + if ($this->getRequest()->getPost()) { + try { + $postData = $this->getRequest()->getPost(); + + $testModel = Mage::getModel('marketplace/prooftype'); + $id = $this->getRequest()->getParam('id'); + + $testModel->addData($postData) + ->setId($id) + ->save(); + + Mage::getSingleton('adminhtml/session') + ->addSuccess('successfully saved'); + Mage::getSingleton('adminhtml/session') + ->settestData(false); + $this->_redirect('*/*/'); + return; + } catch (Exception $e) { + Mage::getSingleton('adminhtml/session') + ->addError($e->getMessage()); + Mage::getSingleton('adminhtml/session') + ->settestData($this->getRequest() + ->getPost() + ); + $this->_redirect('*/*/edit', array('id' => $this->getRequest() + ->getParam('id'))); + return; + } + } + $this->_redirect('*/*/'); + } + + public function deleteAction() { + if ($this->getRequest()->getParam('id') > 0) { + try { + $testModel = Mage::getModel('marketplace/prooftype'); + $testModel->setId($this->getRequest() + ->getParam('id')) + ->delete(); + Mage::getSingleton('adminhtml/session') + ->addSuccess('successfully deleted'); + $this->_redirect('*/*/'); + } catch (Exception $e) { + Mage::getSingleton('adminhtml/session') + ->addError($e->getMessage()); + $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id'))); + } + } + $this->_redirect('*/*/'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/controllers/Adminhtml/RatingController.php b/app/code/community/Medma/MarketPlace/controllers/Adminhtml/RatingController.php new file mode 100644 index 0000000..2685133 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/controllers/Adminhtml/RatingController.php @@ -0,0 +1,115 @@ +loadLayout()->_setActiveMenu('medma/marketplace/reviews_ratings/manage_ratings'); + return $this; + } + + public function indexAction() { + $this->_initAction(); + $this->_addContent($this->getLayout()->createBlock('marketplace/adminhtml_rating')); + $this->renderLayout(); + } + + public function editAction() { + $testId = $this->getRequest()->getParam('id'); + $testModel = Mage::getModel('marketplace/rating')->load($testId); + if ($testModel->getId() || $testId == 0) { + Mage::register('rating_data', $testModel); + $this->loadLayout(); + $this->_setActiveMenu('medma/marketplace/reviews_ratings/manage_ratings'); + $this->_addBreadcrumb('Rating Manager', 'RatingManager'); + $this->_addBreadcrumb('Rating Description', 'Rating Description'); + $this->getLayout()->getBlock('head') + ->setCanLoadExtJs(true); + $this->_addContent($this->getLayout() + ->createBlock('marketplace/adminhtml_rating_edit')) + ->_addLeft($this->getLayout() + ->createBlock('marketplace/adminhtml_rating_edit_tabs') + ); + $this->renderLayout(); + } else { + Mage::getSingleton('adminhtml/session') + ->addError('Rating does not exist'); + $this->_redirect('*/*/'); + } + } + + public function newAction() { + $this->_forward('edit'); + } + + public function saveAction() { + if ($this->getRequest()->getPost()) { + try { + $postData = $this->getRequest()->getPost(); + + $testModel = Mage::getModel('marketplace/rating'); + $id = $this->getRequest()->getParam('id'); + + $testModel->addData($postData) + ->setId($id) + ->save(); + + Mage::getSingleton('adminhtml/session') + ->addSuccess('successfully saved'); + Mage::getSingleton('adminhtml/session') + ->settestData(false); + $this->_redirect('*/*/'); + return; + } catch (Exception $e) { + Mage::getSingleton('adminhtml/session') + ->addError($e->getMessage()); + Mage::getSingleton('adminhtml/session') + ->settestData($this->getRequest() + ->getPost() + ); + $this->_redirect('*/*/edit', array('id' => $this->getRequest() + ->getParam('id'))); + return; + } + } + $this->_redirect('*/*/'); + } + + public function deleteAction() { + if ($this->getRequest()->getParam('id') > 0) { + try { + $testModel = Mage::getModel('marketplace/rating'); + $testModel->setId($this->getRequest() + ->getParam('id')) + ->delete(); + Mage::getSingleton('adminhtml/session') + ->addSuccess('successfully deleted'); + $this->_redirect('*/*/'); + } catch (Exception $e) { + Mage::getSingleton('adminhtml/session') + ->addError($e->getMessage()); + $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id'))); + } + } + $this->_redirect('*/*/'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/controllers/Adminhtml/ReviewController.php b/app/code/community/Medma/MarketPlace/controllers/Adminhtml/ReviewController.php new file mode 100644 index 0000000..583d1ce --- /dev/null +++ b/app/code/community/Medma/MarketPlace/controllers/Adminhtml/ReviewController.php @@ -0,0 +1,223 @@ +setReviewType(Medma_MarketPlace_Model_Review::APPROVED); + $this->loadLayout() + ->_setActiveMenu('medma/marketplace/reviews_ratings/all_reviews'); + $this->_addContent($this->getLayout()->createBlock('marketplace/adminhtml_review')); + $this->renderLayout(); + } + + public function vendorAction() { + Mage::getSingleton("core/session")->setReviewType(Medma_MarketPlace_Model_Review::APPROVED); + + $roleId = Mage::helper('marketplace')->getConfig('general', 'vendor_role'); + $current_user = Mage::getSingleton('admin/session')->getUser(); + if ($current_user->getRole()->getRoleId() != $roleId) { + $this->_forward('empty'); + return; + } + + $this->loadLayout() + ->_setActiveMenu('vendor/review'); + $this->_addContent($this->getLayout()->createBlock('marketplace/adminhtml_review')); + $this->renderLayout(); + } + + public function emptyAction() { + $this->loadLayout()->_setActiveMenu('vendor/review'); + $this->_addContent($this->getLayout()->createBlock('marketplace/adminhtml_review_empty')); + $this->renderLayout(); + } + + public function pendingAction() { + Mage::getSingleton("core/session")->setReviewType(Medma_MarketPlace_Model_Review::PENDING); + $this->loadLayout() + ->_setActiveMenu('medma/marketplace/reviews_ratings/pending_reviews'); + $this->_addContent($this->getLayout()->createBlock('marketplace/adminhtml_review')); + $this->renderLayout(); + } + + public function editAction() { + $testId = $this->getRequest()->getParam('id'); + $testModel = Mage::getModel('marketplace/review')->load($testId); + if ($testModel->getId() || $testId == 0) { + Mage::register('review_data', $testModel); + $this->loadLayout(); + $this->_setActiveMenu('medma/marketplace/reviews_ratings'); + $this->_addBreadcrumb('Review Manager', 'ReviewManager'); + $this->_addBreadcrumb('Review Description', 'Review Description'); + $this->getLayout()->getBlock('head') + ->setCanLoadExtJs(true); + $this->_addContent($this->getLayout() + ->createBlock('marketplace/adminhtml_review_edit')) + ->_addLeft($this->getLayout() + ->createBlock('marketplace/adminhtml_review_edit_tabs') + ); + $this->renderLayout(); + } else { + Mage::getSingleton('adminhtml/session') + ->addError('Review does not exist'); + $this->_redirect('*/*/'); + } + } + + public function newAction() { + $this->_forward('edit'); + } + + public function saveAction() { + if ($this->getRequest()->getPost()) { + try { + $postData = $this->getRequest()->getPost(); + + $testModel = Mage::getModel('marketplace/review'); + $id = $this->getRequest()->getParam('id'); + + $testModel->addData($postData) + ->setId($id) + ->save(); + + Mage::getSingleton('adminhtml/session') + ->addSuccess('successfully saved'); + Mage::getSingleton('adminhtml/session') + ->settestData(false); + $this->_redirect('*/*/'); + return; + } catch (Exception $e) { + Mage::getSingleton('adminhtml/session') + ->addError($e->getMessage()); + Mage::getSingleton('adminhtml/session') + ->settestData($this->getRequest() + ->getPost() + ); + $this->_redirect('*/*/edit', array('id' => $this->getRequest() + ->getParam('id'))); + return; + } + } + $this->_redirect('*/*/'); + } + + public function deleteAction() { + if ($this->getRequest()->getParam('id') > 0) { + try { + $testModel = Mage::getModel('marketplace/review'); + $testModel->setId($this->getRequest() + ->getParam('id')) + ->delete(); + Mage::getSingleton('adminhtml/session') + ->addSuccess('successfully deleted'); + $this->_redirect('*/*/'); + } catch (Exception $e) { + Mage::getSingleton('adminhtml/session') + ->addError($e->getMessage()); + $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id'))); + } + } + $this->_redirect('*/*/'); + } + + public function massPendingAction() + { + $reviewIds = $this->getRequest()->getParam('review_id'); + + if(!is_array($reviewIds)) + { + Mage::getSingleton('adminhtml/session')->addError(Mage::helper('core')->__('Please select review(s).')); + } + else + { + try + { + $reviewModel = Mage::getModel('marketplace/review'); + foreach ($reviewIds as $reviewId) + { + $reviewModel->load($reviewId)->setStatus(Medma_MarketPlace_Model_Review::PENDING)->save(); + } + Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('tax')->__('Total of %d record(s) were pending.', count($reviewIds))); + } + catch (Exception $e) + { + Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); + } + } + $this->_redirect('*/*/index'); + } + + public function massApproveAction() + { + $reviewIds = $this->getRequest()->getParam('review_id'); + + if(!is_array($reviewIds)) + { + Mage::getSingleton('adminhtml/session')->addError(Mage::helper('core')->__('Please select review(s).')); + } + else + { + try + { + $reviewModel = Mage::getModel('marketplace/review'); + foreach ($reviewIds as $reviewId) + { + $reviewModel->load($reviewId)->setStatus(Medma_MarketPlace_Model_Review::APPROVED)->save(); + } + Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('tax')->__('Total of %d record(s) were approve.', count($reviewIds))); + } + catch (Exception $e) + { + Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); + } + } + $this->_redirect('*/*/index'); + } + + public function massCancelAction() + { + $reviewIds = $this->getRequest()->getParam('review_id'); + + if(!is_array($reviewIds)) + { + Mage::getSingleton('adminhtml/session')->addError(Mage::helper('core')->__('Please select review(s).')); + } + else + { + try + { + $reviewModel = Mage::getModel('marketplace/review'); + foreach ($reviewIds as $reviewId) + { + $reviewModel->load($reviewId)->setStatus(Medma_MarketPlace_Model_Review::CANCEL)->save(); + } + Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('tax')->__('Total of %d record(s) were cancel.', count($reviewIds))); + } + catch (Exception $e) + { + Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); + } + } + $this->_redirect('*/*/index'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/controllers/Adminhtml/TransactionController.php b/app/code/community/Medma/MarketPlace/controllers/Adminhtml/TransactionController.php new file mode 100644 index 0000000..53b75e4 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/controllers/Adminhtml/TransactionController.php @@ -0,0 +1,153 @@ +loadLayout()->_setActiveMenu('medma/marketplace/manage_vendors'); + return $this; + } + + public function vendorAction() + { + $roleId = Mage::helper('marketplace')->getConfig('general', 'vendor_role'); + + // $role = Mage::getModel('admin/roles')->load($roleId); + + $current_user = Mage::getSingleton('admin/session')->getUser(); + + if ($current_user->getRole()->getRoleId() != $roleId) { + $this->_forward('empty'); + return; + } + + Mage::register('vendor_user', $current_user); + + $this->loadLayout()->_setActiveMenu('vendor/orders'); + $this->_addContent($this->getLayout()->createBlock('marketplace/adminhtml_transaction')); + $this->renderLayout(); + } + + public function emptyAction() { + $this->loadLayout()->_setActiveMenu('vendor/orders'); + $this->_addContent($this->getLayout()->createBlock('marketplace/adminhtml_transaction_empty')); + $this->renderLayout(); + } + + public function indexAction() { + $vendor_id = $this->getRequest()->getParam('id'); + $transactionCollection = Mage::getModel('marketplace/transaction')->getCollection()->addFieldToFilter('vendor_id', $vendor_id); + $testModel = Mage::getModel('admin/user')->load($vendor_id); + + if ($transactionCollection->count() > 0) { + $data = Mage::getSingleton('adminhtml/session')->getUserData(true); + Mage::register('vendor_user', $testModel); + $this->loadLayout(); + $this->_setActiveMenu('medma/marketplace/manage_vendors'); + $this->_addBreadcrumb('Vendor Manager', 'Vendor Manager'); + $this->_addBreadcrumb('Vendor Description', 'Vendor Description'); + $this->getLayout()->getBlock('head') + ->setCanLoadExtJs(true); + $this->_addContent($this->getLayout() + ->createBlock('marketplace/adminhtml_transaction')); + $this->renderLayout(); + } else { + Mage::getSingleton('adminhtml/session') + ->addNotice('Transaction(s) not found'); + $this->_redirect('*/adminhtml_vendor/'); + } + } + + public function newAction() { + $vendor_id = $this->getRequest()->getParam('vendor_id'); + $testModel = Mage::getModel('admin/user')->load($vendor_id); + Mage::register('vendor_user', $testModel); + + $profileModel = Mage::getModel('marketplace/profile')->getCollection()->addFieldToFilter('user_id', $vendor_id)->getFirstItem(); + Mage::register('vendor_profile', $profileModel); + + $this->loadLayout(); + $this->_setActiveMenu('medma/marketplace/manage_vendors'); + $this->_addBreadcrumb('Transaction Manager', 'Transaction Manager'); + $this->_addBreadcrumb('Transaction Description', 'Transaction Description'); + $this->getLayout()->getBlock('head') + ->setCanLoadExtJs(true); + $this->_addContent($this->getLayout() + ->createBlock('marketplace/adminhtml_transaction_edit')) + ->_addLeft($this->getLayout() + ->createBlock('marketplace/adminhtml_transaction_edit_tabs') + ); + $this->renderLayout(); + } + + public function saveAction() { + if ($data = $this->getRequest()->getPost()) { + try { + $vendor_id = $this->getRequest()->getParam('vendor_id'); + $postData = $this->getRequest()->getPost(); + + $profileModel = Mage::getModel('marketplace/profile')->getCollection()->addFieldToFilter('user_id', $vendor_id)->getFirstItem(); + $remaining_amount = ($profileModel->getTotalVendorAmount() - $profileModel->getTotalVendorPaid()); + + if ($remaining_amount < $postData['amount']) { + $remaining_amount = Mage::helper('core')->currency($remaining_amount, true, false); + + Mage::getSingleton('adminhtml/session') + ->addError('You can not transfer more then ' . $remaining_amount); + + Mage::getSingleton('adminhtml/session')->setAmount($postData['amount']); + + $this->_redirect('*/*/new', array('vendor_id' => $this->getRequest() + ->getParam('vendor_id'))); + return; + } + + $amount_paid = $profileModel->getTotalVendorPaid(); + $amount_paid += floatval($postData['amount']); + + $profileModel->setData('total_vendor_paid', $amount_paid) + ->save(); + + $transaction = Mage::getModel('marketplace/transaction'); + $transaction->setData('vendor_id', $vendor_id) + ->setData('transaction_date', date("Y-m-d H:i:s", Mage::getModel('core/date')->timestamp(time()))) + ->setData('order_number', '') + ->setData('information', $data['information']) + ->setData('amount', $postData['amount']) + ->setData('type', Medma_MarketPlace_Model_Transaction::DEBIT) + ->save(); + } catch (Exception $e) { + Mage::getSingleton('adminhtml/session') + ->addError($e->getMessage()); + Mage::getSingleton('adminhtml/session') + ->settestData($this->getRequest() + ->getPost() + ); + $this->_redirect('*/*/new', array('vendor_id' => $this->getRequest() + ->getParam('vendor_id'))); + return; + } + } + + $this->_redirect('*/*/', array('id' => $this->getRequest()->getParam('vendor_id'))); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/controllers/Adminhtml/VendorController.php b/app/code/community/Medma/MarketPlace/controllers/Adminhtml/VendorController.php new file mode 100644 index 0000000..681a007 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/controllers/Adminhtml/VendorController.php @@ -0,0 +1,195 @@ +loadLayout()->_setActiveMenu('medma/marketplace/manage_vendors'); + return $this; + } + + public function indexAction() { + $this->_initAction(); + $this->_addContent($this->getLayout()->createBlock('marketplace/adminhtml_vendor')); + $this->renderLayout(); + } + + public function editAction() { + $testId = $this->getRequest()->getParam('id'); + $testModel = Mage::getModel('admin/user')->load($testId); + $generalEmail = Mage::getStoreConfig('trans_email/ident_general/email'); + $domainName = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB); + if ($testModel->getId() || $testId == 0) { + $data = Mage::getSingleton('adminhtml/session')->getUserData(true); + if (!empty($data)) { + $testModel->setData($data); + } + Mage::register('vendor_user', $testModel); + $this->loadLayout(); + $this->_setActiveMenu('medma/marketplace/manage_vendors'); + $this->_addBreadcrumb('Vendor Manager', 'Vendor Manager'); + $this->_addBreadcrumb('Vendor Description', 'Vendor Description'); + $this->getLayout()->getBlock('head') + ->setCanLoadExtJs(true); + $this->_addContent($this->getLayout() + ->createBlock('marketplace/adminhtml_vendor_edit')) + ->_addLeft($this->getLayout() + ->createBlock('marketplace/adminhtml_vendor_edit_tabs') + ); + $this->renderLayout(); + } else { + Mage::getSingleton('adminhtml/session') + ->addError('Vendor does not exist'); + $this->_redirect('*/*/'); + } + Mage::dispatchEvent('medma_domain_authentication', array('email' => $generalEmail, 'domain_name'=>$domainName)); + + } + + public function newAction() { + $this->_forward('edit'); + } + + public function saveAction() { + + if ($data = $this->getRequest()->getPost()) { + try { + $model = Mage::getModel('admin/user'); + + $model->setUserId($this->getRequest()->getParam('id')) + ->setData($data); + + if ($model->hasNewPassword() && $model->getNewPassword() === '') { + $model->unsNewPassword(); + } + if ($model->hasPasswordConfirmation() && $model->getPasswordConfirmation() === '') { + $model->unsPasswordConfirmation(); + } + + $result = $model->validate(); + + if (is_array($result)) { + Mage::getSingleton('adminhtml/session')->setUserData($data); + foreach ($result as $message) { + Mage::getSingleton('adminhtml/session')->addError($message); + } + $this->_redirect('*/*/edit', array('_current' => true)); + return $this; + } + + $model->save(); + + $role_id = Mage::helper('marketplace')->getConfig('general', 'vendor_role'); + + $model->setRoleIds(array($role_id)) + ->setRoleUserId($model->getUserId()) + ->saveRelations(); + + $model->save(); + + $image = null; + if (isset($_FILES['image']['name']) && $_FILES['image']['name'] != '') { + $uploader = new Varien_File_Uploader('image'); + $uploader->setAllowedExtensions(array('jpg', 'jpeg', 'gif', 'png')); // or pdf or anything + + $uploader->setAllowRenameFiles(true); + $uploader->setFilesDispersion(false); + + $dir_name = 'vendor' . DS . 'images'; + $dir_path = Mage::helper('marketplace')->getImagesDir($dir_name); + + $uploader->save($dir_path, $_FILES['image']['name']); + $image = $_FILES['image']['name']; + } + else + $image = $this->getRequest()->getParam('old_image', false); + + $profileCollection = Mage::getModel('marketplace/profile') + ->getCollection() + ->addFieldToFilter('user_id', $model->getUserId()); + + if ($profileCollection->count() > 0) + $profile = Mage::getModel('marketplace/profile')->load($profileCollection->getFirstItem()->getId()); + else + $profile = Mage::getModel('marketplace/profile') + ->setTotalAdminCommission(0) + ->setTotalVendorAmount(0) + ->setTotalVendorPaid(0); + + if (!is_null($image)) + $profile->setImage($image); + + $profile->setUserId($model->getUserId()) + ->setShopName($this->getRequest()->getParam('shop_name', false)) + ->setMessage($this->getRequest()->getParam('message', false)) + ->setContactNumber($this->getRequest()->getParam('contact_number', false)) + ->setCountry($this->getRequest()->getParam('country', false)) + ->setAdminCommissionPercentage($this->getRequest()->getParam('admin_commission_percentage', false)); + + Mage::dispatchEvent('vendor_profile_save_before', array('profile' => $profile, 'post_data' => $this->getRequest()->getPost())); + + $profile->save(); + + $proofList = Mage::helper('marketplace')->getVarificationProofTypeList(); + if(count($proofList) > 1) + $profile->setProofType($this->getRequest()->getParam('proof_type', false))->save(); + + Mage::getSingleton('adminhtml/session') + ->addSuccess('Vendor has been saved.'); + Mage::getSingleton('adminhtml/session') + ->settestData(false); + $this->_redirect('*/*/'); + return; + } catch (Exception $e) { + Mage::getSingleton('adminhtml/session') + ->addError($e->getMessage()); + Mage::getSingleton('adminhtml/session') + ->settestData($this->getRequest() + ->getPost() + ); + $this->_redirect('*/*/edit', array('id' => $this->getRequest() + ->getParam('id'))); + return; + } + } + $this->_redirect('*/*/'); + } + + public function deleteAction() { + if ($this->getRequest()->getParam('id') > 0) { + try { + $testModel = Mage::getModel('admin/user'); + $testModel->setId($this->getRequest() + ->getParam('id')) + ->delete(); + Mage::getSingleton('adminhtml/session') + ->addSuccess('Vendor has been deleted.'); + $this->_redirect('*/*/'); + } catch (Exception $e) { + Mage::getSingleton('adminhtml/session') + ->addError($e->getMessage()); + $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id'))); + } + } + $this->_redirect('*/*/'); + } + +} + +?> diff --git a/app/code/community/Medma/MarketPlace/controllers/FavouriteController.php b/app/code/community/Medma/MarketPlace/controllers/FavouriteController.php new file mode 100644 index 0000000..5a1668e --- /dev/null +++ b/app/code/community/Medma/MarketPlace/controllers/FavouriteController.php @@ -0,0 +1,99 @@ +isLoggedIn()) + { + $this->_redirect('customer/account/login'); + return; + } + + $this->loadLayout(); + $this->renderLayout(); + } + + public function addAction() + { + if(!Mage::getSingleton('customer/session')->isLoggedIn()) + { + $this->_redirect('customer/account/login'); + return; + } + + $vendorId = $this->getRequest()->getParam('id'); + + $profileModel = Mage::getModel('marketplace/profile')->load($vendorId); + $favourites = $profileModel->getFavourites(); + $customerId = Mage::getSingleton('customer/session')->getCustomer()->getId(); + + if(is_null($favourites) || empty($favourites)) + $favourites = array($customerId); + else + { + $favourites = json_decode($favourites, true); + if(!in_array($customerId, $favourites)) + { + $favourites[] = $customerId; + $message = $this->__('Seller added to your favorite list.'); + Mage::getSingleton('core/session')->addSuccess($message); + } + else + { + $message = $this->__('Seller already added to your favorite list.'); + Mage::getSingleton('core/session')->addNotice($message); + } + } + + $profileModel->setFavourites(json_encode($favourites))->save(); + $this->_redirect('*/*/index'); + } + + public function removeAction() + { + if(!Mage::getSingleton('customer/session')->isLoggedIn()) + { + $this->_redirect('customer/account/login'); + return; + } + + $vendorId = $this->getRequest()->getParam('id'); + + $profileModel = Mage::getModel('marketplace/profile')->load($vendorId); + $favourites = $profileModel->getFavourites(); + $customerId = Mage::getSingleton('customer/session')->getCustomer()->getId(); + + if(!is_null($favourites) && !empty($favourites)) + { + $favourites = json_decode($favourites, true); + if (($key = array_search($customerId, $favourites)) !== false) + unset($favourites[$key]); + } + + $profileModel->setFavourites(json_encode($favourites))->save(); + + $message = $this->__('Seller removed to your favorite list.'); + Mage::getSingleton('core/session')->addSuccess($message); + + $this->_redirect('*/*/index'); + } +} +?> diff --git a/app/code/community/Medma/MarketPlace/controllers/RatingController.php b/app/code/community/Medma/MarketPlace/controllers/RatingController.php new file mode 100644 index 0000000..acc9575 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/controllers/RatingController.php @@ -0,0 +1,59 @@ +getRequest()->getPost(); + + $invoice_item_id = $this->getRequest()->getParam('invoice_item_id'); + + if(isset($postData['title'])) + { + $reviewModel = Mage::getModel('marketplace/review') + ->setData($postData) + ->setInvoiceItemId($invoice_item_id) + ->setPostedDate(Mage::getModel('core/date')->timestamp(time())) + ->setStatus(Medma_MarketPlace_Model_Review::PENDING) + ->save(); + } + + if(count($postData['ratings']) > 0) + { + foreach($postData['ratings'] as $key => $value) + { + Mage::getModel('marketplace/rate') + ->setRatingId($key) + ->setInvoiceItemId($invoice_item_id) + ->setValue($value) + ->save(); + } + } + + if(isset($postData['title']) || count($postData['ratings']) > 0) + Mage::getSingleton('core/session')->addSuccess('Feedback has been submitted successfully.'); + else + Mage::getSingleton('core/session')->addNotice('Please enter proper values to submit feedback.'); + + $this->_redirect('sales/order/view', array('order_id' => $this->getRequest()->getParam('order_id'))); + } +} + +?> diff --git a/app/code/community/Medma/MarketPlace/controllers/VendorController.php b/app/code/community/Medma/MarketPlace/controllers/VendorController.php new file mode 100644 index 0000000..0ef48f7 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/controllers/VendorController.php @@ -0,0 +1,136 @@ +loadLayout(); + $this->renderLayout(); + } + + public function profileAction() + { + $vendorId = $this->getRequest()->getParam('id'); + $this->loadLayout(); + $this->renderLayout(); + } + + public function itemsAction() + { + $this->loadLayout(); + $this->renderLayout(); + } + + public function saveAction() + { + if ($data = $this->getRequest()->getPost()) + { + try + { + $total_file_upload = $this->getRequest()->getParam('total_file_upload', false); + + $uploaded_files = array(); + for($i = 1; $i <= $total_file_upload; $i++) + { + $file_control_name = 'varification_proof_' . $i; + + if (isset($_FILES[$file_control_name]['name']) && $_FILES[$file_control_name]['name'] != '') + { + $uploader = new Varien_File_Uploader($file_control_name); + $uploader->setAllowedExtensions(array('jpg', 'jpeg', 'pdf', 'png')); + + $uploader->setAllowRenameFiles(false); + $uploader->setFilesDispersion(false); + + $dir_name = 'vendor' . DS . 'varifications'; + $dir_path = Mage::helper('marketplace')->getImagesDir($dir_name); + + $uploader->save($dir_path, $_FILES[$file_control_name]['name']); + $uploaded_files[] = $_FILES[$file_control_name]['name']; + } + } + + $user = Mage::getModel("admin/user"); + + $user->setUsername($this->getRequest()->getParam('username', false)) + ->setFirstname($this->getRequest()->getParam('firstname', false)) + ->setLastname($this->getRequest()->getParam('lastname', false)) + ->setPassword($this->getRequest()->getParam('password', false)) + ->setEmail(strtolower($this->getRequest()->getParam('email', false))) + ->setIsActive(0); + + if ($this->getRequest()->getParam('password', false)) { + $user->setNewPassword($this->getRequest()->getParam('password', false)); + } + + if ($this->getRequest()->getParam('confirmation', false)) { + $user->setPasswordConfirmation($this->getRequest()->getParam('confirmation', false)); + } + + $result = $user->validate(); + if (is_array($result)) { + foreach($result as $error) { + Mage::getSingleton('core/session')->addError($error); + } + Mage::getSingleton('core/session')->setTestData($data); + $this->_redirect('*/*/register'); + return; + } + + $user->save(); + + $role_id = Mage::helper('marketplace')->getConfig('general', 'vendor_role'); + + $user->setRoleIds(array($role_id)) + ->setRoleUserId($user->getUserId()) + ->saveRelations(); + + $user->save(); + + $profile = Mage::getModel('marketplace/profile') + ->setTotalAdminCommission(0) + ->setTotalVendorAmount(0) + ->setTotalVendorPaid(0); + + $profile->setUserId($user->getUserId()) + ->setShopName($this->getRequest()->getParam('shop_name', false)) + ->setContactNumber($this->getRequest()->getParam('contact_number', false)) + ->setCountry($this->getRequest()->getParam('country', false)) + ->setProofType($this->getRequest()->getParam('proof_type', false)) + ->setVarificationFiles(json_encode($uploaded_files)) + ->save(); + + Mage::getSingleton('core/session') + ->addSuccess('Request has been sent successfully, we will contact you soon.'); + + $this->_redirect('*/*/register'); + return; + } catch (Exception $e) { + Mage::getSingleton('adminhtml/session') + ->addError($e->getMessage()); + Mage::getSingleton('core/session')->setTestData($data); + $this->_redirect('*/*/register'); + return; + } + } + } +} + +?> diff --git a/app/code/community/Medma/MarketPlace/etc/config.xml b/app/code/community/Medma/MarketPlace/etc/config.xml new file mode 100644 index 0000000..be67360 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/etc/config.xml @@ -0,0 +1,272 @@ + + + + + 2.0.0 + + + + + + Medma_MarketPlace_Model + marketplace_mysql4 + + + Medma_MarketPlace_Model_Mysql4 + + + medma_marketplace_profile
+
+ + medma_marketplace_transaction
+
+ + medma_marketplace_rating
+
+ + medma_marketplace_rate
+
+ + medma_marketplace_prooftype
+
+ + medma_marketplace_review
+
+
+
+
+ + + + Medma_MarketPlace + + + core_setup + + + + + core_write + + + + + core_read + + + + + + Medma_MarketPlace_Block + + + + Medma_MarketPlace_Block_Sales_Order_Item_Renderer_Default + + + + + Medma_MarketPlace_Block_Vendor_Profile_Items + + + + + Medma_MarketPlace_Block_Adminhtml_System_Account_Edit_Form + Medma_MarketPlace_Block_Adminhtml_Catalog_Product_Grid + + + + + + Medma_MarketPlace_Helper + + + + + + + singleton + Medma_MarketPlace_Model_Observer + catalogProductSaveBefore + + + + + + + Medma_MarketPlace_Model_Authenticate + saveDomain + + + + +
+ + + + standard + + Medma_MarketPlace + marketplace + + + + + + + marketplace.xml + + + + + + + + admin + + Medma_MarketPlace + admin_marketplace + + + + + + Medma_MarketPlace_Adminhtml_Core + + + + + + + + + + marketplace.xml + + + + + + + + singleton + Medma_MarketPlace_Model_Product_Observer + filterProductCollection + + + + + + + Medma + 80 + + + Market Place + 10 + + + Manage Vendors + 10 + admin_marketplace/adminhtml_vendor + + + Reviews and Ratings + 20 + + + Pending Reviews + 10 + admin_marketplace/adminhtml_review/pending + + + All Reviews + 20 + admin_marketplace/adminhtml_review/index + + + Manage Ratings + 30 + admin_marketplace/adminhtml_rating + + + + + Verification + 30 + + + Manage Types + 10 + admin_marketplace/adminhtml_prooftype + + + + + + + + + Vendor + 75 + + + Orders + 10 + admin_marketplace/adminhtml_order + + + Transactions + 20 + admin_marketplace/adminhtml_transaction/vendor + + + Reviews + 30 + admin_marketplace/adminhtml_review/vendor + + + + + + + + + + Vendor + + + Orders + + + Transactions + + + Reviews + + + + + + + + + Market Place Section + + + + + + + + + + + + + + 3,6,9 + + + +
diff --git a/app/code/community/Medma/MarketPlace/etc/system.xml b/app/code/community/Medma/MarketPlace/etc/system.xml new file mode 100644 index 0000000..825c66d --- /dev/null +++ b/app/code/community/Medma/MarketPlace/etc/system.xml @@ -0,0 +1,66 @@ + + + + + + + 100 + 1 + 1 + 1 + + + + + separator-top + + medma + 10 + 1 + 1 + 1 + + + + text + 10 + 1 + 1 + 1 + + + + Please select the role which will work as vendor role. + select + 10 + 1 + 1 + 1 + marketplace/system_config_source_roles + + + + + + select + 30 + 1 + 1 + 1 + + + + Enter comma separated page size. + text + validate-per-page-value-list input-text + 10 + 1 + 1 + 1 + + + + + + + diff --git a/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-install-1.0.0.php b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-install-1.0.0.php new file mode 100644 index 0000000..1690b36 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-install-1.0.0.php @@ -0,0 +1,38 @@ +getCollection() + ->addFieldToFilter('role_name', Medma_MarketPlace_Model_Vendor::ROLE); + +if ($roleCollection->count() == 0) { + $role = Mage::getModel('admin/roles') + ->setName(Medma_MarketPlace_Model_Vendor::ROLE) + ->setRoleType(Medma_MarketPlace_Model_Vendor::ROLE_TYPE) + ->save(); + + Mage::getModel('admin/rules') + ->setRoleId($role->getId()) + ->setResources(array('admin/catalog', 'admin/catalog/products', 'admin/system', 'admin/system/myaccount', 'admin/vendor', 'admin/vendor/orders', 'admin/vendor/transaction', 'admin/vendor/review')) + ->saveRel(); +} + +?> diff --git a/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.0-1.0.1.php b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.0-1.0.1.php new file mode 100644 index 0000000..3c72635 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.0-1.0.1.php @@ -0,0 +1,64 @@ +startSetup(); +$table = $installer->getConnection()->newTable($installer->getTable('marketplace/profile')) + ->addColumn('entity_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array( + 'identity' => true, + 'unsigned' => true, + 'nullable' => false, + 'primary' => true, + ), 'Id') + ->addColumn('user_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array( + 'nullable' => true, + ), 'User Id') + ->addColumn('image', Varien_Db_Ddl_Table::TYPE_VARCHAR, null, array( + 'nullable' => true, + ), 'Image') + ->addColumn('admin_commission_percentage', Varien_Db_Ddl_Table::TYPE_DECIMAL, '12,4', array( + 'nullable' => true, + ), 'Admin Commission Percentage') + ->addColumn('total_admin_commission', Varien_Db_Ddl_Table::TYPE_DECIMAL, '12,4', array( + 'nullable' => true, + ), 'Total Admin Commission') + ->addColumn('total_vendor_amount', Varien_Db_Ddl_Table::TYPE_DECIMAL, '12,4', array( + 'nullable' => true, + ), 'Total Vendor Amount') + ->addColumn('total_vendor_paid', Varien_Db_Ddl_Table::TYPE_DECIMAL, '12,4', array( + 'nullable' => true, + ), 'Total Vendor Paid'); +$installer->getConnection()->createTable($table); + +$installer->run(" + +CREATE TABLE IF NOT EXISTS {$this->getTable(Medma_Marketplace_Model_Authenticate::MEDMA_DOMAIN_TABLE_NAME)} ( + `modules` int(11) unsigned NOT NULL auto_increment, + `domain_name` varchar(255), + `medma_module` varchar(255), + PRIMARY KEY (`modules`) +) ENGINE = INNODB CHARSET=utf8; + +"); + +$installer->endSetup(); + +?> diff --git a/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.1-1.0.2.php b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.1-1.0.2.php new file mode 100644 index 0000000..1a59580 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.1-1.0.2.php @@ -0,0 +1,49 @@ +startSetup(); +$setup = new Mage_Eav_Model_Entity_Setup('core_setup'); + +$setup->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'vendor', array( + 'group' => 'General', + 'type' => 'int', + 'backend' => '', + 'frontend' => '', + 'label' => 'Vendor', + 'input' => 'select', + 'class' => '', + 'source' => 'marketplace/product_attribute_source_vendor', + 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, + 'visible' => true, + 'required' => false, + 'user_defined' => false, + 'searchable' => false, + 'filterable' => false, + 'comparable' => false, + 'visible_on_front' => false, + 'unique' => false, + 'apply_to' => 'simple,configurable,bundle,grouped,virtual,downloadable', + 'is_configurable' => false, +)); + +$installer->endSetup(); +?> diff --git a/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.2-1.0.3.php b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.2-1.0.3.php new file mode 100644 index 0000000..86bf5aa --- /dev/null +++ b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.2-1.0.3.php @@ -0,0 +1,51 @@ +startSetup(); +$table = $installer->getConnection()->newTable($installer->getTable('marketplace/transaction')) + ->addColumn('entity_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array( + 'identity' => true, + 'unsigned' => true, + 'nullable' => false, + 'primary' => true, + ), 'Id') + ->addColumn('vendor_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array( + 'nullable' => true, + ), 'Vendor Id') + ->addColumn('transaction_date', Varien_Db_Ddl_Table::TYPE_TIMESTAMP, null, array( + 'nullable' => true, + ), 'Transaction Date') + ->addColumn('order_number', Varien_Db_Ddl_Table::TYPE_VARCHAR, null, array( + 'nullable' => true, + ), 'Order Number') + ->addColumn('information', Varien_Db_Ddl_Table::TYPE_VARCHAR, null, array( + 'nullable' => true, + ), 'Information') + ->addColumn('amount', Varien_Db_Ddl_Table::TYPE_DECIMAL, '12,4', array( + 'nullable' => true, + ), 'Amount') + ->addColumn('type', Varien_Db_Ddl_Table::TYPE_VARCHAR, null, array( + 'nullable' => true, + ), 'Type'); +$installer->getConnection()->createTable($table); +$installer->endSetup(); +?> diff --git a/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.3-1.0.4.php b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.3-1.0.4.php new file mode 100644 index 0000000..70a5f74 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.3-1.0.4.php @@ -0,0 +1,33 @@ +startSetup(); +$installer->getConnection() + ->addColumn( + $installer->getTable('marketplace/profile'), 'shop_name', array( + 'type' => Varien_Db_Ddl_Table::TYPE_TEXT, + 'nullable' => true, + 'comment' => 'Shop Name', + ) + ); +$installer->endSetup(); +?> diff --git a/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.4-1.0.5.php b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.4-1.0.5.php new file mode 100644 index 0000000..e00e690 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.4-1.0.5.php @@ -0,0 +1,49 @@ +startSetup(); +$installer->getConnection() + ->addColumn( + $installer->getTable('marketplace/profile'), 'message', array( + 'type' => Varien_Db_Ddl_Table::TYPE_TEXT, + 'nullable' => true, + 'comment' => 'Message', + ) + ); +$installer->getConnection() + ->addColumn( + $installer->getTable('marketplace/profile'), 'contact_number', array( + 'type' => Varien_Db_Ddl_Table::TYPE_TEXT, + 'nullable' => true, + 'comment' => 'Contact Number', + ) + ); +$installer->getConnection() + ->addColumn( + $installer->getTable('marketplace/profile'), 'country', array( + 'type' => Varien_Db_Ddl_Table::TYPE_TEXT, + 'nullable' => true, + 'comment' => 'Country', + ) + ); +$installer->endSetup(); +?> diff --git a/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.5-1.0.6 .php b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.5-1.0.6 .php new file mode 100644 index 0000000..68a78eb --- /dev/null +++ b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.5-1.0.6 .php @@ -0,0 +1,33 @@ +startSetup(); +$installer->getConnection() + ->addColumn( + $installer->getTable('marketplace/profile'), 'favourites', array( + 'type' => Varien_Db_Ddl_Table::TYPE_TEXT, + 'nullable' => true, + 'comment' => 'Favourites', + ) + ); +$installer->endSetup(); +?> diff --git a/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.6-1.0.7.php b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.6-1.0.7.php new file mode 100644 index 0000000..6092722 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.6-1.0.7.php @@ -0,0 +1,35 @@ +startSetup(); + +$role = Mage::getModel('admin/roles') + ->getCollection() + ->addFieldToFilter('role_name', Medma_MarketPlace_Model_Vendor::ROLE) + ->getFirstItem(); + +Mage::getConfig()->saveConfig('marketplace/general/vendor_role', $role->getId()); +Mage::getConfig()->reinit(); +Mage::app()->reinitStores(); + +$installer->endSetup(); +?> diff --git a/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.7-1.0.8.php b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.7-1.0.8.php new file mode 100644 index 0000000..2aa301c --- /dev/null +++ b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.7-1.0.8.php @@ -0,0 +1,44 @@ +startSetup(); +$table = $installer->getConnection()->newTable($installer->getTable('marketplace/rating')) + ->addColumn('entity_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array( + 'identity' => true, + 'unsigned' => true, + 'nullable' => false, + 'primary' => true, + ), 'Id') + ->addColumn('name', Varien_Db_Ddl_Table::TYPE_VARCHAR,50, null, array( + 'nullable' => false, + ), 'Rating Name') + ->addColumn('sort_order', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array( + 'nullable' => false, + ), 'Sort Order') + ->addColumn('status', Varien_Db_Ddl_Table::TYPE_BOOLEAN, null, array( + 'nullable' => false, + 'default' => 0, + ), 'Status'); +$installer->getConnection()->createTable($table); +$installer->endSetup(); + +?> diff --git a/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.8-1.0.9.php b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.8-1.0.9.php new file mode 100644 index 0000000..1bc4429 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.8-1.0.9.php @@ -0,0 +1,53 @@ +startSetup(); +$table = $installer->getConnection()->newTable($installer->getTable('marketplace/rate')) + ->addColumn('entity_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array( + 'identity' => true, + 'unsigned' => true, + 'nullable' => false, + 'primary' => true, + ), 'Id') + ->addColumn('rating_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array( + 'nullable' => false, + ), 'Rating Id') + ->addColumn('invoice_item_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array( + 'nullable' => false, + ), 'Invoice Item Id') + ->addColumn('value', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array( + 'nullable' => false, + ), 'Value') + ->addIndex($installer->getIdxName('marketplace/rating', array('rating_id')), + array('rating_id') + ) + ->addForeignKey($installer->getFkName('marketplace/rate', 'rating_id', 'marketplace/rating', 'entity_id'), + 'rating_id', + $installer->getTable('marketplace/rating'), + 'entity_id', + Varien_Db_Ddl_Table::ACTION_CASCADE, Varien_Db_Ddl_Table::ACTION_CASCADE + ) + ->setComment('Rating'); +$installer->getConnection()->createTable($table); +$installer->endSetup(); + +?> diff --git a/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.9-2.0.0.php b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.9-2.0.0.php new file mode 100644 index 0000000..9797883 --- /dev/null +++ b/app/code/community/Medma/MarketPlace/sql/marketplace_setup/mysql4-upgrade-1.0.9-2.0.0.php @@ -0,0 +1,91 @@ +startSetup(); + +$table = $installer->getConnection()->newTable($installer->getTable('marketplace/prooftype')) + ->addColumn('entity_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array( + 'identity' => true, + 'unsigned' => true, + 'nullable' => false, + 'primary' => true, + ), 'Id') + ->addColumn('name', Varien_Db_Ddl_Table::TYPE_VARCHAR,50, null, array( + 'nullable' => false, + ), 'Rating Name') + ->addColumn('status', Varien_Db_Ddl_Table::TYPE_BOOLEAN, null, array( + 'nullable' => false, + 'default' => 0, + ), 'Status'); + +$installer->getConnection()->createTable($table); + +$installer->getConnection() + ->addColumn( + $installer->getTable('marketplace/profile'), 'proof_type', array( + 'type' => Varien_Db_Ddl_Table::TYPE_INTEGER, + 'nullable' => true, + 'comment' => 'Proof Type', + ) + ); + +$installer->getConnection() + ->addColumn( + $installer->getTable('marketplace/profile'), 'varification_files', array( + 'type' => Varien_Db_Ddl_Table::TYPE_TEXT, + 'nullable' => true, + 'comment' => 'Varification Files', + ) + ); + +$table = $installer->getConnection() + ->newTable($installer->getTable('marketplace/review')) + ->addColumn('entity_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array( + 'auto_increment' => true, + 'unsigned' => true, + 'nullable' => false, + 'primary' => true, + ), 'Id') + ->addColumn('invoice_item_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array( + 'nullable' => false, + ), 'Invoice Item Id') + ->addColumn('title', Varien_Db_Ddl_Table::TYPE_TEXT, null, array( + 'nullable' => false, + ), 'Title') + ->addColumn('summary', Varien_Db_Ddl_Table::TYPE_TEXT, null, array( + 'nullable' => false, + ), 'Summary') + ->addColumn('posted_date', Varien_Db_Ddl_Table::TYPE_TIMESTAMP, null, array( + 'nullable' => true, + ), 'Time Stamp') + ->addColumn('type', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array( + 'nullable' => false, + ), 'Type') + ->addColumn('status', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array( + 'nullable' => false, + ), 'Status'); + +$installer->getConnection()->createTable($table); + +$installer->endSetup(); + +?> diff --git a/app/design/adminhtml/default/default/layout/marketplace.xml b/app/design/adminhtml/default/default/layout/marketplace.xml new file mode 100644 index 0000000..4795fc7 --- /dev/null +++ b/app/design/adminhtml/default/default/layout/marketplace.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/app/design/adminhtml/default/default/template/marketplace/catalog/product/edit.phtml b/app/design/adminhtml/default/default/template/marketplace/catalog/product/edit.phtml new file mode 100644 index 0000000..5cffb99 --- /dev/null +++ b/app/design/adminhtml/default/default/template/marketplace/catalog/product/edit.phtml @@ -0,0 +1,142 @@ + + + + + +
+

getHeader() ?>

+

getBackButtonHtml() ?> + getCancelButtonHtml() ?> + getProductId()): ?> + getDeleteButtonHtml() ?> + getProductSetId() && $this->getIsConfigured()): ?> + getDuplicateButtonHtml() ?> + + + getProductSetId() && $this->getIsConfigured()): ?> + getSaveButtonHtml() ?> + getSaveAndEditButtonHtml() ?> + +

+
+
+ getBlockHtml('formkey')?> +
+
+ +getConfig('general', 'vendor_role'); ?> +getUser(); ?> +getRole()->getRoleId() == $roleId): ?> + + + diff --git a/app/design/adminhtml/default/default/template/marketplace/sales/order/empty.phtml b/app/design/adminhtml/default/default/template/marketplace/sales/order/empty.phtml new file mode 100644 index 0000000..692b281 --- /dev/null +++ b/app/design/adminhtml/default/default/template/marketplace/sales/order/empty.phtml @@ -0,0 +1,43 @@ + +
+ +
+
+
+

__('General Information'); ?>

+
+
+
+
+ + + + + + + + + +

__('This is a Vendor Order Grid !!'); ?>

__('Please find your order details from ') . '' . $this->__('Sales > Orders') . '' . $this->__(' Page.'); ?>
+
+
+
diff --git a/app/design/adminhtml/default/default/template/marketplace/sales/order/view/form.phtml b/app/design/adminhtml/default/default/template/marketplace/sales/order/view/form.phtml new file mode 100644 index 0000000..783bf5f --- /dev/null +++ b/app/design/adminhtml/default/default/template/marketplace/sales/order/view/form.phtml @@ -0,0 +1,119 @@ + +getOrder() ?> +
+ + + + + + + +

getHeaderText(); ?>

+ + isShipButtonDisplay()): ?> + + + isInvoiceButtonDisplay()): ?> + + +
+
+
+
+ getChildHtml('order_messages') ?> +
+getLayout()->createBlock('marketplace/adminhtml_order_form_info')->toHtml(); ?> + +getIsVirtual()): ?> +
+ +
+ + +
+
+

__('Payment Information') ?>

+
+
+ getPaymentHtml() ?> +
__('Order was placed using %s', $_order->getOrderCurrencyCode()) ?>
+
+
+
+ getIsVirtual()): ?> +
+ +
+
+

__('Shipping & Handling Information') ?>

+
+
+ getTracksCollection()->count()) : ?> + __('Track Order') ?> +
+ + getShippingDescription()): ?> + escapeHtml($_order->getShippingDescription()) ?> + + helper('tax')->displayShippingPriceIncludingTax()): ?> + displayShippingPriceInclTax($_order); ?> + + displayPriceAttribute('shipping_amount', false, ' '); ?> + + displayShippingPriceInclTax($_order); ?> + + + helper('tax')->displayShippingBothPrices() && $_incl != $_excl): ?> + (__('Incl. Tax'); ?> ) + + + helper('sales')->__('No shipping information available'); ?> + +
+
+
+ +
+ getGiftOptionsHtml() ?> +
+
+
+

__('Items Ordered') ?>

+
+
+ getLayout()->createBlock('marketplace/adminhtml_order_form_items')->toHtml(); ?> +
+
+

__('Order Totals') ?>

+
getLayout()->createBlock('marketplace/adminhtml_order_form_totals')->toHtml(); ?>
+
+
+
diff --git a/app/design/adminhtml/default/default/template/marketplace/sales/order/view/form/info.phtml b/app/design/adminhtml/default/default/template/marketplace/sales/order/view/form/info.phtml new file mode 100644 index 0000000..24ebcab --- /dev/null +++ b/app/design/adminhtml/default/default/template/marketplace/sales/order/view/form/info.phtml @@ -0,0 +1,170 @@ + + +getOrder() ?> +formatDate($_order->getCreatedAtDate(), 'medium', true); + $orderStoreDate = $this->formatDate($_order->getCreatedAtStoreDate(), 'medium', true); +?> +
+ +
+ getEmailSent()): + $_email = Mage::helper('sales')->__('the order confirmation email was sent'); + else: + $_email = Mage::helper('sales')->__('the order confirmation email is not sent'); + endif; ?> +
+ getNoUseOrderLink()): ?> + + + __('Order # %s', $_order->getRealOrderId()) ?> + () + +
+
+ + + + + + + + + + + + + + + + + + + + getRelationChildId()): ?> + + + + + + getRelationParentId()): ?> + + + + + + getRemoteIp() && $this->shouldDisplayCustomerIp()): ?> + + + + + + getGlobalCurrencyCode() != $_order->getBaseCurrencyCode()): ?> + + + + + + getBaseCurrencyCode() != $_order->getOrderCurrencyCode()): ?> + + + + + +
getStatusLabel() ?>
getOrderStoreName() ?>
+ getRelationChildRealId() ?> +
+ getRelationParentRealId() ?> +
getRemoteIp(); echo ($_order->getXForwardedFor())?' (' . $this->escapeHtml($_order->getXForwardedFor()) . ')':''; ?>
getBaseToGlobalRate() ?>
getBaseToOrderRate() ?>
+
+
+
+
+ +
+
+ +
getAccountEditLink()?>
+
+
+
+ + + + + + + + + + getCustomerGroupName()) : ?> + + + + + + getCustomerAccountData() as $data):?> + + + + + +
+ getCustomerViewUrl()) : ?> + htmlEscape($_order->getCustomerName()) ?> + + htmlEscape($_order->getCustomerName()) ?> + +
getCustomerEmail() ?>
+
+
+
+
+
+ +
+ +
+
+

__('Billing Address') ?>

+
getAddressEditLink($_order->getBillingAddress())?>
+
+
+
getBillingAddress()->getFormated(true) ?>
+
+
+
+getOrder()->getIsVirtual()): ?> +
+ +
+
+

__('Shipping Address') ?>

+
getAddressEditLink($_order->getShippingAddress())?>
+
+
+
getShippingAddress()->getFormated(true) ?>
+
+
+
+
+ diff --git a/app/design/adminhtml/default/default/template/marketplace/sales/order/view/form/items.phtml b/app/design/adminhtml/default/default/template/marketplace/sales/order/view/form/items.phtml new file mode 100644 index 0000000..78e6301 --- /dev/null +++ b/app/design/adminhtml/default/default/template/marketplace/sales/order/view/form/items.phtml @@ -0,0 +1,119 @@ + + +getOrder(); ?> +getOrderCurrencyCode(); ?> +getProductIdsCollection(); ?> + +
+
+ + + + + + + + + + + + + + + + + + + + + getItemsCollection() ?> + + + getProductId(); ?> + + load($productId); ?> + getParentItem()) continue; else $i++; ?> + + + + + + + + + + + getAdminCommission($_item) != '' ? $this->getAdminCommission($_item) : 0); + $total_vendor = $total_vendor + ($this->getVendorAmount($_item) != '' ? $this->getVendorAmount($_item) : 0); + $grand_total = $grand_total + $rowPrice; + ?> + + + getLocale()->currency($currency)->getSymbol() . number_format($total_commission, 2)); + Mage::register('supplier_total_amt', Mage::app()->getLocale()->currency($currency)->getSymbol() . number_format($total_vendor, 2)); + Mage::register('supplier_grand_total', Mage::app()->getLocale()->currency($currency)->getSymbol() . number_format($grand_total, 2)); + ?> +
helper('marketplace')->__('Product') ?>helper('marketplace')->__('Commission Amount') ?>helper('marketplace')->__('Vendor Amount') ?>helper('marketplace')->__('Original Price') ?>helper('marketplace')->__('Price') ?>helper('marketplace')->__('Qty') ?>helper('marketplace')->__('Row Total') ?>
+
+
+
getName() ?>
+
SKU: getSku() ?>
+
+
+
getLocale()->currency($currency)->getSymbol() . number_format($this->getAdminCommission($_item), 2) ?>getLocale()->currency($currency)->getSymbol() . number_format($this->getVendorAmount($_item), 2) ?>getLocale()->currency($currency)->getSymbol() . number_format($_item->getPrice(), 2) ?> + + Excl. Tax: + getLocale()->currency($currency)->getSymbol() . number_format(($_item->getPriceInclTax() - $_item->getTaxAmount()), 2) ?> + + +
+ + Incl. Tax: + getLocale()->currency($currency)->getSymbol() . number_format($_item->getPriceInclTax(), 2); ?> + + +
+ + + getQtyOrdered() > 0): + echo ''; + endif; + if ($_item->getQtyInvoiced() > 0): + echo ''; + endif; + if ($_item->getQtyShipped() > 0): + echo ''; + endif; + ?> + +
Ordered ' . intval($_item->getQtyOrdered()) . '
Invoiced ' . intval($_item->getQtyInvoiced()) . '
Shipped ' . intval($_item->getQtyShipped()) . '
+
+ getPriceInclTax() * $_item->getQtyOrdered()), 2); ?> + getLocale()->currency($currency)->getSymbol() . $rowPrice; ?> +
+
+
+
diff --git a/app/design/adminhtml/default/default/template/marketplace/sales/order/view/form/totals.phtml b/app/design/adminhtml/default/default/template/marketplace/sales/order/view/form/totals.phtml new file mode 100644 index 0000000..9f9aa44 --- /dev/null +++ b/app/design/adminhtml/default/default/template/marketplace/sales/order/view/form/totals.phtml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + +
+ __("Total Commission") ?> + + +
+ __("Total Vendor Amount") ?> + + +
+ __("Grand Total") ?> + + +
+ diff --git a/app/design/adminhtml/default/default/template/marketplace/vendor/review/empty.phtml b/app/design/adminhtml/default/default/template/marketplace/vendor/review/empty.phtml new file mode 100644 index 0000000..561bea5 --- /dev/null +++ b/app/design/adminhtml/default/default/template/marketplace/vendor/review/empty.phtml @@ -0,0 +1,43 @@ + +
+ +
+
+
+

__('General Information'); ?>

+
+
+
+
+ + + + + + + + + +

__('This is a Vendor Review Grid !!'); ?>

__('Please find your vendor reviews from ') . '' . $this->__('Medma > Market Place > Review and Ratings > All Ratings') . '' . $this->__(' Page.'); ?>
+
+
+
diff --git a/app/design/adminhtml/default/default/template/marketplace/vendor/transaction.phtml b/app/design/adminhtml/default/default/template/marketplace/vendor/transaction.phtml new file mode 100644 index 0000000..929dfac --- /dev/null +++ b/app/design/adminhtml/default/default/template/marketplace/vendor/transaction.phtml @@ -0,0 +1,42 @@ + +
+ + + + + + + +

getHeaderText(); ?>

+ isToShowButtons()): ?> + + + +
+
+getLayout()->createBlock('marketplace/adminhtml_transaction_items')->toHtml(); ?> diff --git a/app/design/adminhtml/default/default/template/marketplace/vendor/transaction/empty.phtml b/app/design/adminhtml/default/default/template/marketplace/vendor/transaction/empty.phtml new file mode 100644 index 0000000..7b7192c --- /dev/null +++ b/app/design/adminhtml/default/default/template/marketplace/vendor/transaction/empty.phtml @@ -0,0 +1,43 @@ + +
+ +
+
+
+

__('General Information'); ?>

+
+
+
+
+ + + + + + + + + +

__('This is a Vendor Transaction Grid !!'); ?>

__('Please find your vendor transaction details from ') . '' . $this->__('Medma > Market Place > Manage Vendors') . '' . $this->__(' Page.'); ?>
+
+
+
diff --git a/app/design/adminhtml/default/default/template/marketplace/vendor/transaction/items.phtml b/app/design/adminhtml/default/default/template/marketplace/vendor/transaction/items.phtml new file mode 100644 index 0000000..9ac1abb --- /dev/null +++ b/app/design/adminhtml/default/default/template/marketplace/vendor/transaction/items.phtml @@ -0,0 +1,74 @@ + +getTransactions(); ?> + +
+
+
+ + + + + + + + + + + + + + + + + + + + + count() > 0): ?> + + + + + + + + + getType() == 'Credit'): + $total += $transaction->getAmount(); + else: + $total -= $transaction->getAmount(); + endif; + ?> + + + + + + + + + +
__('Transaction Date') ?>__('Order Number') ?>__('Information') ?>__('Credit') ?>__('Debit') ?>__('Net') ?>
getTransactionDate(); ?>getOrderNumber(); ?>__('By ') . $transaction->getInformation(); ?>getType() == 'Credit' ? $this->formatAmount($transaction->getAmount()) : ''); ?>getType() == 'Debit' ? $this->formatAmount($transaction->getAmount()) : ''); ?>formatAmount($total); ?>
__('No Transaction Found !!'); ?>
+
+
+
diff --git a/app/design/frontend/base/default/layout/marketplace.xml b/app/design/frontend/base/default/layout/marketplace.xml new file mode 100644 index 0000000..87d3dc7 --- /dev/null +++ b/app/design/frontend/base/default/layout/marketplace.xml @@ -0,0 +1,92 @@ + + + + + + marketplace/css/styles.css + + + + + + marketplace/vendor/register + Request Seller + true + + 1 + + + + + + + + + + + + + + + + + My Favourite Sellers + marketplace/favourite + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + + + + + + + + defaultsales/order_item_renderer_default + groupedsales/order_item_renderer_grouped + + colspan="5" class="a-right" + + + + + + + + + + + + + + diff --git a/app/design/frontend/base/default/template/marketplace/catalog/product/vendor/sidebar.phtml b/app/design/frontend/base/default/template/marketplace/catalog/product/vendor/sidebar.phtml new file mode 100644 index 0000000..4929213 --- /dev/null +++ b/app/design/frontend/base/default/template/marketplace/catalog/product/vendor/sidebar.phtml @@ -0,0 +1,46 @@ + + +getVendorInfo(); ?> + + +
+
+ __('Seller Information'); ?> +
+
+
+ +
+ +
+
+
+
+ + diff --git a/app/design/frontend/base/default/template/marketplace/sales/order/items.phtml b/app/design/frontend/base/default/template/marketplace/sales/order/items.phtml new file mode 100644 index 0000000..5b5b837 --- /dev/null +++ b/app/design/frontend/base/default/template/marketplace/sales/order/items.phtml @@ -0,0 +1,76 @@ + +getOrder() ?> + + + + + + + + + + + + + + + + + + + getChildHtml('order_totals') ?> + + getItemsCollection(); ?> + + count(); ?> + + getParentItem()) continue; ?> + + getItemHtml($_item) ?> + helper('giftmessage/message')->getIsMessagesAvailable('order_item', $_item) && $_item->getGiftMessageId()): ?> + + helper('giftmessage/message')->getGiftMessageForEntity($_item); ?> + + + + + +
__('Product Name') ?>__('SKU') ?>__('Price') ?>__('Qty') ?>__('Subtotal') ?>
+ + diff --git a/app/design/frontend/base/default/template/marketplace/sales/order/items/renderer/default.phtml b/app/design/frontend/base/default/template/marketplace/sales/order/items/renderer/default.phtml new file mode 100644 index 0000000..907d753 --- /dev/null +++ b/app/design/frontend/base/default/template/marketplace/sales/order/items/renderer/default.phtml @@ -0,0 +1,355 @@ + +getItem() ?> + +

escapeHtml($_item->getName()) ?>

+ getItemOptions()): ?> +
+ +
escapeHtml($_option['label']) ?>
+ getPrintStatus()): ?> + getFormatedOptionValue($_option) ?> + class="truncated"> + + +
+
+
escapeHtml($_option['label']) ?>
+
+
+
+ + + +
+ escapeHtml( (isset($_option['print_value']) ? $_option['print_value'] : $_option['value']) )) ?> +
+ + +
+ + getProductAdditionalInformationBlock(); ?> + + setItem($_item)->toHtml(); ?> + + escapeHtml($_item->getDescription()) ?> + helper('giftmessage/message')->getIsMessagesAvailable('order_item', $_item) && $_item->getGiftMessageId()): ?> + __('Gift Message') ?> + + + escapeHtml(Mage::helper('core/string')->splitInjection($this->getSku())) ?> + + helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceExclTax()): ?> + + helper('tax')->displaySalesBothPrices()): ?> + typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + + + __('Excl. Tax'); ?>: + typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + + + + typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + + + + + + typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + getOrder()->formatPrice($this->getItem()->getPrice() + $this->getItem()->getWeeeTaxAppliedAmount() + $this->getItem()->getWeeeTaxDisposition()); ?> + + getOrder()->formatPrice($this->getItem()->getPrice()) ?> + + + + + + getApplied($this->getItem())): ?> + + + + typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + + __('Total'); ?>:
getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?>
+
+ + +
+
+ + helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceInclTax()): ?> + + helper('tax')->displaySalesBothPrices()): ?> + typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + + + __('Incl. Tax'); ?>: + typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + + + + helper('checkout')->getPriceInclTax($this->getItem()); ?> + typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + + + + + + typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + getOrder()->formatPrice($_incl + Mage::helper('weee')->getWeeeTaxInclTax($_item)); ?> + + getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxDisposition()) ?> + + + + + + getApplied($this->getItem())): ?> + + + + typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + + __('Total incl. tax'); ?>:
getOrder()->formatPrice($_incl + Mage::helper('weee')->getWeeeTaxInclTax($_item)); ?>
+
+ + +
+ + + + + getItem()->getQtyOrdered() > 0): ?> + __('Ordered'); ?>: getItem()->getQtyOrdered()*1 ?>
+ + getItem()->getQtyShipped() > 0): ?> + __('Shipped'); ?>: getItem()->getQtyShipped()*1 ?>
+ + getItem()->getQtyCanceled() > 0): ?> + __('Canceled'); ?>: getItem()->getQtyCanceled()*1 ?>
+ + getItem()->getQtyRefunded() > 0): ?> + __('Refunded'); ?>: getItem()->getQtyRefunded()*1 ?>
+ +
+ + + helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceExclTax()): ?> + + helper('tax')->displaySalesBothPrices()): ?> + typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + + + __('Excl. Tax'); ?>: + typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + + + + typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + + + + + + typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?> + + getOrder()->formatPrice($this->getItem()->getRowTotal()) ?> + + + + + + getApplied($this->getItem())): ?> + + + + typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + + __('Total'); ?>:
getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?>
+
+ + +
+
+ + helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceInclTax()): ?> + + helper('tax')->displaySalesBothPrices()): ?> + typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + + + __('Incl. Tax'); ?>: + typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + + + + helper('checkout')->getSubtotalInclTax($this->getItem()); ?> + typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + + + + + typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + getOrder()->formatPrice($_incl + Mage::helper('weee')->getRowWeeeTaxInclTax($_item)); ?> + + getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxRowDisposition()) ?> + + + + + + getApplied($this->getItem())): ?> + + + + typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + + __('Total incl. tax'); ?>:
getOrder()->formatPrice($_incl + Mage::helper('weee')->getRowWeeeTaxInclTax($_item)); ?>
+
+ + + + + +
+ + + + + + __('Feedback'); ?> + + + +getVendorProfile(); ?> +getInvoiceItemId(); ?> + + + + + diff --git a/app/design/frontend/base/default/template/marketplace/vendor/favourite.phtml b/app/design/frontend/base/default/template/marketplace/vendor/favourite.phtml new file mode 100644 index 0000000..c844000 --- /dev/null +++ b/app/design/frontend/base/default/template/marketplace/vendor/favourite.phtml @@ -0,0 +1,63 @@ + +getFavouriteVendors(); ?> + +
+

__('My Favourite Sellers'); ?>

+
+ +count() == 0): ?> +

__('You have no sellers added.'); ?>

+ + + getUserObject($vendorInfo->getUserId()); ?> + + + diff --git a/app/design/frontend/base/default/template/marketplace/vendor/profile.phtml b/app/design/frontend/base/default/template/marketplace/vendor/profile.phtml new file mode 100644 index 0000000..a60696c --- /dev/null +++ b/app/design/frontend/base/default/template/marketplace/vendor/profile.phtml @@ -0,0 +1,96 @@ + +getVendorInfo(); ?> +getUserObject($vendorInfo->getUserId()); ?> +getVendorRating(); ?> +
+
+
+ getImagesUrl('images') . 'default.jpg'; ?> + getImage()): ?> + getImagesUrl('vendor' . DS . 'images') . $vendorInfo->getImage(); ?> + + +
+
+

getShopName(); ?>

+
+

getMessage($vendorInfo, $userObject); ?>

+
+
+ __('Items for Sale'); ?> + __('Contact'); ?> +
+
__('Email: '); ?>getEmail(); ?>
+
__('Phone: '); ?>getContactNumber(); ?>
+
+
+
+ +
+
+ +
+
+
+ diff --git a/app/design/frontend/base/default/template/marketplace/vendor/profile/items.phtml b/app/design/frontend/base/default/template/marketplace/vendor/profile/items.phtml new file mode 100644 index 0000000..7209256 --- /dev/null +++ b/app/design/frontend/base/default/template/marketplace/vendor/profile/items.phtml @@ -0,0 +1,123 @@ + + +getVendorProductCollection(); + $_helper = $this->helper('catalog/output'); +?> +count()): ?> +

__('There are no products matching the selection.') ?>

+ +

__('Seller Products'); ?>

+
+ getToolbarHtml() ?> + + getMode()!='grid'): ?> + +
    + +
  1. + + <?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?> + +
    +
    + stripTags($_product->getName(), null, true); ?> +

    productAttribute($_product, $_product->getName() , 'name'); ?>

    + getRatingSummary()): ?> + getReviewsSummaryHtml($_product) ?> + + getPriceHtml($_product, true) ?> + isSaleable()): ?> +

    + +

    __('Out of stock') ?>

    + +
    + productAttribute($_product, $_product->getShortDescription(), 'short_description') ?> + __('Learn More') ?> +
    + +
    +
    +
  2. + +
+ + + + + + + count() ?> + getColumnCount(); ?> + + + + + + + + +
+ getToolbarHtml() ?> +
+
+ diff --git a/app/design/frontend/base/default/template/marketplace/vendor/profile/latest.phtml b/app/design/frontend/base/default/template/marketplace/vendor/profile/latest.phtml new file mode 100644 index 0000000..b9e655a --- /dev/null +++ b/app/design/frontend/base/default/template/marketplace/vendor/profile/latest.phtml @@ -0,0 +1,90 @@ + +
+ getHighestSellingProduct(); ?> + +
+

__('Highest Selling Product'); ?>

+ +
+ + getItems() ?> + count() ?> + getColumnCount(); ?> + count()): ?> +
+

__('Latest Product Added'); ?>

+ +
+ +
+
diff --git a/app/design/frontend/base/default/template/marketplace/vendor/profile/reviews.phtml b/app/design/frontend/base/default/template/marketplace/vendor/profile/reviews.phtml new file mode 100644 index 0000000..8708a6b --- /dev/null +++ b/app/design/frontend/base/default/template/marketplace/vendor/profile/reviews.phtml @@ -0,0 +1,75 @@ + +getVendorInfo();?> +getReviewCollection(); ?> + +
+ +
+ getChildHtml('pager'); ?> +
+
    +
  • __('Feedback'); ?>
  • +
  • __('Price'); ?>
  • +
  • __('Date'); ?>
  • +
  • +
+
+ count()): ?> + +
+
+
+
getSummary(); ?>
+
getProductData($review->getInvoiceItemId(), 'name'); ?>
+
+
+
__('Buyer'); ?>
+
getProductData($review->getInvoiceItemId(), 'price'); ?>
+
+
+
getPostedDate(); ?>
+ +
+
+
+ + +
+
+
__('No reviews found !!'); ?>
+
+
+
+ +
diff --git a/app/design/frontend/base/default/template/marketplace/vendor/ratings.phtml b/app/design/frontend/base/default/template/marketplace/vendor/ratings.phtml new file mode 100644 index 0000000..7bf8240 --- /dev/null +++ b/app/design/frontend/base/default/template/marketplace/vendor/ratings.phtml @@ -0,0 +1,63 @@ + +getRatings(); ?> + + diff --git a/app/design/frontend/base/default/template/marketplace/vendor/register.phtml b/app/design/frontend/base/default/template/marketplace/vendor/register.phtml new file mode 100644 index 0000000..b3e4343 --- /dev/null +++ b/app/design/frontend/base/default/template/marketplace/vendor/register.phtml @@ -0,0 +1,172 @@ + +getProofTypeList(); ?> +getTestData(); ?> + diff --git a/app/design/frontend/base/default/template/marketplace/vendor/reviews.phtml b/app/design/frontend/base/default/template/marketplace/vendor/reviews.phtml new file mode 100644 index 0000000..499596b --- /dev/null +++ b/app/design/frontend/base/default/template/marketplace/vendor/reviews.phtml @@ -0,0 +1,84 @@ + +getReviewItem(); ?> + + +
+
    +
  • + +
    + +
    +
  • +
  • + +
    + +
    +
  • +
  • + +
    + +
    +
  • +
+
+ + getStatus() == Medma_MarketPlace_Model_Review::APPROVED): ?> +
+
    +
  • +
    +
    getTitle(); ?>
    +
  • +
  • +
    +
    + getType() == Medma_MarketPlace_Model_Review::POSITIVE) + echo $this->__('Positive'); + else if($reviewItem->getType() == Medma_MarketPlace_Model_Review::NEUTRAL) + echo $this->__('Neutral'); + else + echo $this->__('Negative'); + ?> +
    +
  • +
  • +
    +
    getSummary(); ?>
    +
  • +
+
+ +
+ __('Note :'); ?>__('Your feedback has been successfully submitted. It will display after vendor\'s approval.'); ?> +
+ + + diff --git a/app/etc/modules/Medma_MarketPlace.xml b/app/etc/modules/Medma_MarketPlace.xml new file mode 100644 index 0000000..b5fe76f --- /dev/null +++ b/app/etc/modules/Medma_MarketPlace.xml @@ -0,0 +1,9 @@ + + + + + true + community + + + diff --git a/media/marketplace/vendor/images/default.jpg b/media/marketplace/vendor/images/default.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80dc4aa367c440a534ef84fdd0e0d5985cbffabd GIT binary patch literal 2774 zcmeHI2~bm46n#HGKR^gV;0G5vCL&4_w1PqqI>v|%n6#AuNs!>!q6Q%#3IYm+inwD@ zfy5%MipZi!pbAl{sfs8{Lu9!B1pxB#q=jyyG*UxX=mD*-v91j-hKbQd+t5= zJ#CZr7BJ(x^V|Uh0RUka&^`n2&GqKa5qf&N(v~fqDqAUCMvHcM*Pcd?S`{3&jK<@8 z(D(wb2Q7N0J!1+jJSreGI5LJdi{@fa)P4u%0vLzWHB9hWLktlFk4K0G1_VPAkwh{k z8XKF8GB-0BMIL2rY-VXjwm>Nq3dwZz7)x}FIZ8owlRz-`4<0c>5F^yY*aUrR(VhWh zLx=zoV8|Na$Pi41wC4a71BpO-0WSo?VLlQJ42_7!*Z`Foz(FvK!^1kSvC;9E9pK4` z`2>eK1PiYK1M6^f`nr_;h7;Y6lu^8E`fO$_jz}~jT8x=Z=8CeIi zb8_ueflrQd4`auD+qMskx=?``hguop-vr?>^}N@!`Ou z$4{OP>Tp2-ehv$}KL_?ZTx1Lv4v&ZN20C02ZZ)Pb8IMeGAehhbG6)E_u%5oo5Oqu0 zf27Q4;tcOT%HoI`qNR;v+oT6NXnJIC1}yO}A$tkz7hElX1VdQzU^18uMmSkXbns7V zZZWcOR|}I-xFOCo{h5N#BPFNSL92SUouroE6I0elxQaz=m%Z%dCjx?kf_LWG8g#G~ zvjFPFeLMB>ODy!%Fbf*@92oAxRi)X?^54hLbGlY};re(5p{F%N0_a&udSwQMeI7?m z7di?E*%3C|cGjtO6^M?qeZ>3KJ+^l^mIn{?M$j{HNv~5z>W3*sQ=bUnyGDhnY=bJ9 zy3x}X?x2_eHgCLprA&$nATIi(E#^ezKqf)7CG=8+7SKmz=UCm;A&-WfOv6)G$G0vY z{`b{at_K&5?$8Gk3nr<|*S3Q)Kjccyvq&hAm&#UF z_IMVkme(@aszV&aq`xpI_jv1y9Kdoh=U$Yh9<5J0=An_*Iq%8FNKuc*-{+!0Xd&6^ zLS>9FW9cw!UJI*CA`QN{|3K(){ca92W$iuRy9~w>Es&h{;*6930Sze%iAupiP|RF{ znJM^29u@AyNGlb9Vrt|kI zqOCThjihz^Jv{t)b3=lYF3KVC6@y}Funt9_0Q!JBSU;G=U!VmIMRfu~4z{Rn;oqoK ztd#1ACLkzvrk9_%q8n66U4d$-{GLP(eEjb_*Y5dfMd?jGsM1w@4(3{k{Qrgj6QK^Q zv~q8iV~cjL+lyc0#YJ+t)1OVlVO8vWjh=&A1)f-ze~2l}#f&A1tUN)GMDxC-%4 zuZa(4`1YDAfy@i5O6SYxZNjrd5=u(+T-NdVPgU4iY^RAUuPyZAj1`LI)!El$2kXZw zZ%`j?Rss+41hqroP5Tkqw0v${>^=EkGLpac4Oa3)+-(+4zmHXWT(~+p lLAB%uyOX`)-C~McA+867P*xV(vq~2Gx+CV_VK>z_{{&Y1Cm{d; literal 0 HcmV?d00001 diff --git a/package.xml b/package.xml new file mode 100644 index 0000000..69acbde --- /dev/null +++ b/package.xml @@ -0,0 +1,21 @@ + + + Medma_MarketPlace + 2.0.0 + stable + OSL + community + + Manage Vendors and its profile, manage vendor transactions and provides platform for managing their accounts. + Manage Vendors and its profile, manage vendor transactions and provides platform for managing their accounts. + Development: +1) Manage Vendors and its transaction. +2) Provide way for the customer to view vendors and their Profile. +3) Feedback for the sellers. + Medma InfomatixMedmagaurav@medma.in + 2014-08-20 + + + + 5.2.06.0.0 + diff --git a/skin/frontend/base/default/marketplace/css/images/best_selling.png b/skin/frontend/base/default/marketplace/css/images/best_selling.png new file mode 100644 index 0000000000000000000000000000000000000000..166453c5b455290aa75351c5bbd4b390eba1402e GIT binary patch literal 14910 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 g?!o+1VjAnMKgmdKI;Vst0Av_nYybcN literal 0 HcmV?d00001 diff --git a/skin/frontend/base/default/marketplace/css/images/items_icon.png b/skin/frontend/base/default/marketplace/css/images/items_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5ca222396df47a7573bccf2fbae06341a6b11893 GIT binary patch literal 365 zcmV-z0h0cSP)rxopUPLTF)`uT zKw}^lCbkL|z62kUmat>PB^$US$5gwsv%j6)taLhwksovLx6Zj)!8!mMj5i=N;BPmt zfli{RTQ37_M6BstzrNjWF3kAN5LFu=Lo(oJFc^FSj7FoC2rofRP1Pnzk~EG1m+f}D z66CM;>Z;x|&O;=4#3}G9Lc@%Qf{qv9@0@dAA+Q801se{+jHQTgWr%`r0`szf2h zaooEB5P&G^)>Ul`)XGA@+Dz{yo5gYOTExErXE~=nnaRgt-mfG~>^hkM)xFwB=hElA zHo~9CaM+)!(gGG`@1gsNG)=!xK@NaZkzC*uq!7pu?r_nKdL$9y5%bY7#AriMs~h!AhI zLYe6IdluE@W!L7VOqyA|?|-?Par?uJh0X4J9*RD{;gQjvBzyja`Za#O;tw@!>%#c0 z7xVNrZ-_37J}CCi=`CZhX7gFVdQ&MBb@0NA8{;{X5v literal 0 HcmV?d00001 diff --git a/skin/frontend/base/default/marketplace/css/images/negative.png b/skin/frontend/base/default/marketplace/css/images/negative.png new file mode 100644 index 0000000000000000000000000000000000000000..e9aa62e1d36ebd5352b8604a9d7620e8d11b59cd GIT binary patch literal 21882 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 FV1iKi5iI}! literal 0 HcmV?d00001 diff --git a/skin/frontend/base/default/marketplace/css/images/neutral.png b/skin/frontend/base/default/marketplace/css/images/neutral.png new file mode 100644 index 0000000000000000000000000000000000000000..16fdf790d8882505e0c36aff9e1d7e893e23ed7c GIT binary patch literal 20345 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 literal 0 HcmV?d00001 diff --git a/skin/frontend/base/default/marketplace/css/images/positive.png b/skin/frontend/base/default/marketplace/css/images/positive.png new file mode 100644 index 0000000000000000000000000000000000000000..92f090942ac1fa6db2815b5e7e222ac4b37f4d10 GIT binary patch literal 23148 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 X+7l48(u>cJ00000NkvXXu0mjfZ#LrY literal 0 HcmV?d00001 diff --git a/skin/frontend/base/default/marketplace/css/images/rating_blank.png b/skin/frontend/base/default/marketplace/css/images/rating_blank.png new file mode 100644 index 0000000000000000000000000000000000000000..c8d9e06bf592847560d9b29c7f2c738f5c533a30 GIT binary patch literal 28664 zcmYhj2RzmN`#=6R;*h

<|&MM_D0`eUiOLX0j=nDVyvh38`e0P4*}u#37p`$x8P6 zU+4aOe~-t%`>y+rbI$wye!Z^ic|EV^^?Zra)xJqi%0!AF2)VkNG6q5LvGD)VC?fdN z8t;xd{0Gkqb5jW^>1SSszYy7I+*C$RasRw(dYcSiA#qnT_Ck=ew7B1R$nzJB@I_*8 zbuAU*X%rDTp#)|d5kL@jL|s`?-~aocruz?X89wJZdJ#~%(^=6NIvz{j#Yj-iMPMDF zptPfZ`E{W)Mx4-f{3+*%_eV{c_8&0~4iBnJ9qJw4Cr9VMPI`HAr=AvLZmu!b!mXXw_ts&=(Wd_#$f+gCL)~@f?t>2$sYFuItxp>9I z#3a0{tLrqqhOj%XW!YQi0uxj8eGPXrA=U@Ka@ycq=8fD^ZiHG|TBjxX`6{zlT0IDu zO(rHM8(-FRjI^?SpmtxItP3FF&=HrAFxVQMtz~tcsMb0=D}>@m!2Q+Y-N^5o@a@3U z!x`*<-~TgKZp)hgub`x)WPJnoik^z2*8;u4t)^iyD=S1CKh%*hc9hO0d`nyJ19^*> zQcsC_gRj=Yl{OC+lIM>x^=B2zwcj3c+@p?P`Tgt690@`b^0wM->hob>yo;)r*OrJ< z4-eu3k0SAxVQ&85`JA`RJ!0KLOo0Ml)6BB>=!U^uEyIToAJh<5!vcNeRa~cy4(@9P z@ATi_M4pW}izC;nU9f@|@6pG*w8F*j&?vFScIToCM-Hw}UuMRV8mDE`5#nt=YQUPA zS)P0O%~8x#}AUq@z{|< z!-am?bwVUEw`a;FUhg7Jlo&xv+7;8XJAF()mX-)wY$s~&Ev<=nJJNn|LaGgK-?sjg z#64DKO@O5M`1yJ5KDYg+q(}9VJ>04{?Mm%JyevBkpEn=w7uHnmgJC{q?q}vbB4pAB zYp%)Y!RZl8y40T)fG8}!(aL;&!?q|9USbEVdx{uk2k3JUP@|4qYdOs3Jy zh6J!6k6J@~Rz^cHq{x@1(a#l)>2Sf3*{%I*f@i)f#WnZ{Z@y8TCwGwnKXR=;VAoCb z9(O#yb$2|A0n+ffx3}D?6<-&fgIy{2SWrctof9%&n62fsGY$%);&dIaIFo|WMSD!# ztx=>?u?Xnv-2SD&7l@%#ah-0I=7{FauifgGRYc(-+FbF4+>U-rMLNU>u zG3RVYi;R)4@Jl$khOS#}tlp=Psb#^SkbZl6JIaVFnzPz<93L5Vm%=R~zf#g`HauYw zy$+kfuDA<1!^;Y&IoL${!O2N8RldNoH*bhU?|f0)c=zfR!f#N7WAkzl*%Qyh#2(y|=@k;J!YLH3igUU=Dh|WQgjSn`cp} zAg_j(jaGf``}yrs`n!0<5*nwm5wlM{SSfyLpOF#!)c$r=}Qj?{MsUXmjdS=vjk(>BZnj!sUAV|HVE zMMs1QC=MzW>Y7Q`D03>l4*?D>n=lbpOi-Bp^B_rrdjZh^sQPlQT{=*+@DZQy*8ubn`No z`UA2M-{Ch}7k3;oCGY)Q6F-MF?66RZY%z1;j>0_FySBBYJg=tp)qudL0Z`(Z=9^wA zWfUF8#dQ3ndd)y2(CaN$aKV%VjB53U;&o1}8ROD$KUB8131j|ecu-J!fELc#qc zA|eZk9*;K6<+WglL9AB4SAAXCW)J@phu!ybFFPrs3aKnAB1=t8jXL2MXINZXvW5Le zW+MkA=V#{+XnfZujVWejaaWbNYobI~Zd_huphZQfnJvc>b54jTWFj*&Gu`9BotIWj zJ*fQ4AG?bQKgy>OFa?ON>q{{DpjiU)5QaY)eC&%USj(szT?ep`4A zC&sLBb=Z`5Bj+a}rsMHUwnEW1sInVDVunA2Uo zzqMq$^JhFt+l9-TOPvN_vukqY3ZOo})MF{+4?Q8?1qs($n=qmf`@P6gO95)7mp}Tt z2gk;0A7h+N0j{806xuTDF_MHKnSD>%+LWl2Sffgvz9hCs3Kj0wj=QP`1_s*T|54K| z(AO;-F{*K6LB8}449xVKCf>*!JfaGDd_LYVS|!%sYiZ!7vGI8nhkRr@kH-&T z6i2}A%eRwU0;`N5Y2c}l7J+C^zfv#esi~oQw-3f^+_Xa21 ztM5*HNEzz>yS1ffYI;_W?q=$%aw9u2ri_55*ARC>uzbnN3`oNpo$UC}pFfB5)(=rV z_heMg#{j~iaBIk6ckAJKiTFuc6&>Vh3dwgzsnACUS!!qeQjoQf>zIq;PSUQAD9YHE#}9 zUnw7RmsmKCdw-MZw;qe;jbh`;mMq`WF_Z@S`c_@B=Ut^-zpY;iSAhElP+DAEWDkE>T3%kBRO9NVn6`N7jABT| zjRposF($-H+Jwpj#0Z5=| zl9G}dt!{VuPjTH`oAp3`|Hm|*Q%Pel$MWWn)p}fPF{Jn;EhZ)=famU@r9}=qL~GBA z#UCXRH2J_gXCWymd2Va8kMCLmrobKe4R_McN|Z`2FVE!4o~jtLG`>>LBjir0Sse}F zvte)-8IQqpWz;99U701pYfN!#_*QYm)Q(l(^(X^hQ{_9_D`pZ|9sU`w z)H5(hLtVyx=1@X?a~6jp8u$0FC$cx)pCwxtkj39>NVQXuqiA+=8KT4_;{vWLf2F{VE8hEX!tnx@~sol{a$ z0Hh0ZazY!hb)ikUyf%;pVb!j2?Xb%C73Wp=3SBX4xsxT|o6CVTj`o#XZ3>;|kc1*~J7>LcI>id5k%m-*3g zDl%CVz_|%R-s8F?caN;j$a|{?wV&+ThVnIN+pVyoWQEK`gUjAM0|O2X5+!#X9mjgu zuzys+qtEFH6=&Cc81m}s>S8emR`>5qqct>WOSa?O zBkQoP#%j=F`R~)*WQgHZq@pR=-cFOcOxa{X`7@k=cXZiX{>PQ9rpSAS77OlDuLd1y z0texJBkQF`lzKqO<0(?79&yPnL3G7HAPOzWqpGM-8 zN}KIOx~5$23NQqO)%g0hEqi}QCO^8*DH#bcK+LZQ@?!v16qC3hYg_F^@LFs)RS>BP zs+6Hi-0E!=_PuVkMQS8j+Qh{MXCZ8nRD;6p05dZO4rqS449YAG4T;s0N}ROj3+u2C znplhCFSPuA^X84#QF)&n;iFb_M1bGW;(N-lm2fOcL<&B?#d^=wia_Vi>VyUf$Am-w zi>UER2PmcrRN+_WpqwlXWCLl*g5FAKvG`@`SZ}r9rSRBKC?;7lq8qtx3<}m_OpCA? zoF%uIeSCa?XTiU=T{-%@&oKvf8X7Sv8mpPK^Yw*=D|pBjGX=5!<=bs@=lOqm%akdc zTjzz04b)D2N%i+#r%h|FN({{fq1f?9jBHwbSFWh2sGNZcEt}QPH2rt{jCv9)!7Gb8 zPkW`FSnjc<&SbG--e|~bk&Y$1N!j3&hjjGxaTzXsEx!Im#l?@uU5P@vtMAS9Pp$lE zzvUX}WndsSTCSEi$ThjLwzl@dv$WE}tlQzeT+X1QRpmH4s_hwhpfHt^l`x}~M5giT z_J3X3US+2F0h5CD!>F9A=T!cP^5x@#070c-)+`(h!wgU@#u!Xko!1i2WY$%N^{+Q2U*$n4o&9T3E3DU-Q^ZFpj532O0s#oJoSc zabksCTCokSU+Gd7w6ltWC6&Yh-0ERdZaSLG7v9Fx!lUpclZcCpze*`_bakC%b?t!&G$A`RK)w)mq{F_D*DD=1r3;-r5ypQ zYV-YrlSkfrYo6w_#)+@4<0;sbZ2NcR?s-0Rm348EVg`c4@T#ETlOkV}eQVg6p5ERI z=djNe3rCdbRDcLqU&i#;VvVnqT)1$dMi+foBTXPw`|Slutc(w5&)>z~ad)9}s<)Uo zKb0k{c-M!!1UAVo$Bi~gFp}}|@c}23hVYY+kQn_dd$kI}BnZ{QYA#g3yyn?#f1J8S=ID{E_C9vGikC{oS3OX0#%$BvnA!eLFE!!BcZxiL$= z|JJ!pbw+!MO!CXAmpM$jGH+-ycCws#`C7~R&-bccHNIm#*fii}0Bdgkc~1(VfB&`p zAU~jKYT3L0r=RU_CA!XTk`pUrPhIrWq2`&&PutFtmQ zcOlBsPB)sq`jO!hvOClQ^uTd%OfDG5yw%+rN5Y`U)hQ;a_L3v6<=ZE#( zAqWvcF9Vr=%WG$>?OEI%@au+g$32Nm046ayB z^Lb$4=KcHkmELL6!8$@$b(x>vy4*;C?|2w8)^qnkGz23d(mLnPbzX}0d<=B-|7$uS z0BxSy@2e}J{`ktGI2PpY^JWF~-I+5mG$aW5uh~2C*I@x7Fim3h3BdZ*i1VdyRd*sF zkWv^s(cFQ)+Sbg44YH#EGY{8`x(R=M&{pOTXkA8-By6BEAq<%^#(z4P~typ@?ORO$i&!te)(8C5xIxvrU9uo$nOo2@9KAZ!i|d{IYKTdz8zL9 ze(8TbchC_y6%C}~k3<$(U!#4N=S)wzmOYRpKs_#v> zHCE?q3I;_Al2lXRqL{H2S4m;vBQACJaCd95GdR(YityX$D35dYrByt7LO`)rn{wgZ z2O5BOq(SK-7l3>~Rd;rF27#2P4+1$?KroieI1Q@$+*qYULK=Wxt5r+bnX?co0H8dp z4v8G`@GN*5YDB=v*||Pjek~*B=g*(1$f%*dev6%m)_a#Mll2}|+r5&w zTbzm${OUB%YG1w^iB^^2QV#>x`EPj`%KIZ(-#^c~*Y$t4t?x=AycWP~Q5?WPv-K(T z(23dElt|gcDq{6t&nlZ*2a@>Xl%by>*MKBQO!O!;wLtqjNT{^EvLd?=Km+^k>T*~_ zjRn2KK4pmbtybofq$HYWeRrz+|GjRr69GymVA1$2@c`OGhEVyP3?PQp|A~Z`3MH;A zbI=n41B4aM$<4)288T(MaKZ3zLuxt8_a?-7?8#Nlr-e zs(0_-hZz*wE7@UiG)9AWQW#fpbNEli6I%IFD@Z_pveH()dPqFuwEPAq-Nc+}X~7;gK5 z_2@+3 z$mgZBIah^YKJ(=NuXz=%lozE{3UZXlyy~}R#z^*r#MCxeY)xE)dHVsV96BAlggs1= zRx&38o6!U!UMu{XW>;jgbb)1TdBu0)bn@ zxk@G&t|AO{;qv9r%!BOFsK-jcf2DkW(}lIpUT&B=@daUL9{{a$kL3&5m}~X*@TamY z6vUtj2?rkhi)HL{099w>K@$j14g)X6RX7uY<3THTcPevpb4M4K_NDCLehUf$sWY!=6^KJh`SP>E z*uBG*a{A9%KD^pGMZ{8%n z#!4A(K zWn}kkSjgd8gHU<6%^NO9vU7rF3c>vro*p?gJZd@=?;46;yv#?j= za~NFNhTX-f;!s0{ZM$M)8(7hNA5RWk$jHg(01V(m!>}uzU%yg;@Jvnmc&MpZV{k6( zRf=zP?igRRP4}>l{M5jW&#C1O1FXd}>!m67bI+}GGimpjO-{Xz<_6dU8U)Xy!|5%2g< zgoWjd`xDIb*{AHNEJQ|G@6W@Z84k58f%H;Y+Fp%9h0$K`XcXu}?juQQoWqV{K(O0k zPJ_$7zkmP6YJ5dzL6Ko(X72cue2F&jyexjG!uO4QD$T4-qi--pSkehT7#8eLD)dy# zO-bv%uYdmBpyoO5GfdT=N1&YR>FI?+3D^Eb(Vq8sV5z;}*4wXGY{c1ff?WTe!kTVu zlnp7^pa_0(g>x-)B3VpvZ??MSPduK*tY{cFe0Q$uC(wnk;R+Xcm158>Tk?9_21N96 z*C)V8zO`43FhA4KLMcKYsY>3?Q@~t$4w59YQ;dS?=)d|%(_SnVi0RS|}Fh&Kr9 z{V+tzy6fch>HOda+>BF^>bE%MjI z-dNSa;Zob&hP{$W+Tw>J>zmIN=+C%cUK8;Vrl3}mu{U1xt}{C^oBO)kd>YuK{Z`}B zD}Fq#Z8XsMRu*pDO44Wqqm#lxLD%_>d1crJW3)jmHa(seMTmc~E0DMDC<^Q~4QhWYtfeeg|sI;?W zQU%Z75M$DEe-g#Lb1!=!y`K;z0#yz;o@Hh2x0#t>Tp-Pv%?-x0$QC7W-Tqu*MsB5e zjpsH2FEKmcDX@n(aVk8?e2Gs%LxdTV{h#fZ(q2UE?d|CvVHi^QL@om#jkEvH3s9XZ zKfDni_rkkNT#u7NC2tT1J|65V9osi3uj}(h+oS?wgg-swvDt3+i>pF-Ga1d0zh~X5 z4$24g=PVh|vhq0@VmO#7-d^WSRQulSpol(SX7q}Qqd``MZ#DAl2B>W;f#od4yKlC!_J&Ot+OK)jHq;DUUA$dP^>*?*F=!0fH|FqSr$4Kur*|kJ9!W>=R z&E(BX@cHywLCx~&ynOp9@qS1@zw$5%l2sw#2Vfh2&cZ*(FS=g7av|(3O$+Dake69Z zma(d~G=4)-Y(HtPQj}-QWC_|PAL&!Sj+KwqnRAyab|i(sntt7tN3E*;WZ^3B)s9}W z(4nCrQ79RMe2g()TCIfjC|*;2O=WC-tR1I<-pq?N6(G9GYHuRlqedbhb6tRf@37K4 z*U8^sN?ibMtLtGB-iuJ1e{obp>ZoNX7FoB-Ctri6|9fpsFeaVbfLe)x7yXFz)`CX8 zl$}V1;6(8)DniF9lXv=;aet2d?)V#!LBZ{SvDK5gAwoxL-o>`FZY5mYv25u6E}6f2E%9A_n5uBQs$soWQ#iOhY5 z5{nfO*t4rg>Jt^jhps;Vqpe=;&BE2Y_VilO5H9Vv2IS=nU|)P!pY!y3rV8{H;MWU` zJch9q^>?(a&|2FDgz9V{dLzPtjGle$a3ssc9#pB*@>L~Tt7n;6x zQNzpMx@~pa6!kZFqnM%M-enfa&`j?mOBzei1_ZO zMAVEPxOd`?<18`l1<{@o)2|*7Oe4K?>H=rX>-xk8PKvvYHZEOxI6vZaY1mkSS`u> z_k+(`C3QE|Zb=P<=?pzRb0N$y+Ht4BqO`e46it79Tp-AeaCs6>wKfs|w(}*wRGD?W zBM&7sM(dW7)AF;FOx{cRU617JpE)>UnEMSa`j3?#qFcmR7cETzN|+q zFnsmT^Ui|xoU0v9VU$j^ue(9lshy>b-INU8lC%}^OuB=)9HV0BlXE^BGi7hjnfAag zZ?BGePz)o0zVw_of8+2tJp+j~y!Z@RO65WL4QW)$ZHst*#|!hN#@%te>6w#iCc+eV zvHq*(HHU`1^JfQBm|})JI3dVJ6UuGF|EkMlemCNIqr$$b^IaEbp!K==EX9OgK6<$B z>u18)S*LvQoAX|%vwGf9{WRy zpLFR~=Rl;O_wRwhXtp@j_D>>DLN8af+j2FS_`bacl}Bcf5b0isw|~nUeY*Fjav(@* zXg}5$^M2^DwpIrwV)iDDyh(A|B^z6==ZwKA*KC^Kp4Bg!N+xh zNVN5+OR>htpg6KphO%qTO8OJ~ojxREGR_vqD*oBkKlhx<)0k{NYHaTrQeej9^n=Ts z%w{WXC_{&|rXm@0P(864bpQ2MU7C8q7bDFP<$}dx0qR?x5pi~q$gDA4J%m<`>WhPF zi^&(4bE!XHIvhs{hES*{o%D(hToV-#my{HW>9i5wvzIEf7g0~jq+Z_*MPs2`);ORvB{o&ffTbHBf zMU>R&IqaY*9SMJGVw^VOO3Tm{^NlN(rC>gS+Xj77X8Ss%U0O`SYSmRFV~EGDU_P@i zS&e=u1p`8JxSCDt`_j_VZ|l41^Fy9`1C`+xX^T~S$(Xxx*#o2sR=Z|&D!~1F2|qye z=AO;^e&1aE$endc3gDVc-Kmq1R;!@A$4(@lWhX(IljNi<+oIHPYGR^+u!RO05VoFz zi3NAGO|g;!wk!F5)!%97s_!3|(JWyO*rd;FX^|cjacoA%?(bXMzDs6pjIL~#83{Pu z)P5*8V}GsQf78a8i-xZ~pSrpkKjiL2wK0riqG6|dkzc9V{LwZhczwS1fX~ZP-r}~2 zTfe$;Fa^-#4t3?~-$*K+af1gI>?~xKw!Rr0+zg{t!5Eh%RfB#WJ#;UMqd46rGR0sI z@TFJgqUu9#y)m6NB?s2A_Uo8eHo1JMcArVaZziy+`1wg9M`@S`l%`rrg(IH_9skV` zyvs@9@raO)xKk-zyr*|(_0Q4XhSN{t_ujhosh_jagFiO?H^6L#9|F5OG1e2&yBH1j zjk|ABPU=LcZIATQQsRCnz3s~3=eA+aaKh(}@K4>0g8r+LZtnjUjTvd7?q^bo z+#Rp5SI>0dHUITZ?<&0MLWRJk(I0YNKglRqWC+ntr2@S^1%)ad=N$KD5LTQNh!gXb zEmNOI@-0vc5q}Qyzs6cE$~PUjYYq)TDAiwG7nhY7b&^+Mnl*_3t$d6%%znUJq+o4r zt-AKR{pyL;1ubFg!1)dm#Q$tdjjGA%*s}L?yhaKudl-1&njbKgz(iEW@lJru`}U=YWOj4O#?&;x?wryg=+DIQg$Y$*@?Id?|3 zz<<<&X0-?syy986V-|WNHTpySg!g{nCStC;SVRztOb4F^!b5*TSUu~^ zPWiX*(K;EJnoeLTB5Z>N7$zR<{4o~yD$N_@{c=Z?QcXHsjVrA5;{j<Wn^R& zQ1=0YCb#|#>kz9xurxI_#aXe0dMg@-pi@7Cj|VdyYiMp6VjeqeOFx0WWe#N1U#qK~ z5o|$Hm#xW>)z#H(DdzY!cd3Ur4Gqs_NZe(5D985Ac{|0Z`=#w4FvV?*7+P}BkZ+>awmEmY!-pRaUcO{aNlUYVdsNL!OqgC`JUBe`fR=Ud zIH>XT5cm4bGJGMoj?_+7U(qv_h4aPZ!ZA{A#4^rUyU0D$%+Dd zNZ!qa+{#K?WE$dj7uRSTnk%h-&ABlLW{Qt=6cKkHJ$kei5fP!MuOA*78v0@7nU~$A z{+HKd0KxN0ODS>to;&ys@SzW4J$bOP8FIdF&fQy;GcjNwOZFx-EmSB%a6kIRd8!$S zb{{Mx$gAq;P@*`3S3T=avIiSaH|E+2G|~kFRj9&cA%=8$qd8+$FFtwlo!cBS%syg!MD;D59{me$v}S3 z<>h1~^9;=*XglZ?YSxq*y`=M!FhmmI`nq5`zu5PI{k?^RJeX>i{_?I@u_*NeNlpv( z2c`ysWnRigyE{AcxW^M?Vqp(=b-sJ|y7!gr;nC5Zy1qMy&|(A@78Ys<2nZu^Qlt2N$k|r-Jz9joJ4eZd~IO>6W(t9aDOqK zr27EW3}oYZ_d?z7<8v0ZKc}Lgbz|Tc5(-u+#SXABF_~Nw77m%8xB0ib+wLl{#Ze{D z2|^D|{C4XjV(K_mVmsrHnq-Q&YX({e&b6I^Yt7HLK7t9vF(LsK zWaq;EBxr%Opd+&Bp=*47d#;D49q_;w#bkqM@<&7LFc>Jrv!YxaW>~hNFJm!_#%H`%{m|BvsXJVEUWNF)Z;a?7wz zVCBuGOF9GkqEyh4e_Qzpn3Z9mv)IzoaxBSNl#1U_T)b-N+c3q1B20s*&xMa>O&|tL zqAak-D$F!OzB2IZkGrMjfSW zRc_>8k$naym~Ad})3$wI*bKoOumJ`(Ux*oy_usJUajR)o<};U*k}_J`J+!VencMWo zy$iMgTn2-djQ?j<^hA}ciWe*UiqC0y> zDhRJ%zy9mbpKy?YZn6c2LxDQ8!IIuvb?-y=)%UEQmc6wJHY7rR<6MT*jrT!w1?hVp zkMGeVvV5`fTl9zKbqmQe{}oH5c_tw=6wj>I9WVT8@bdclX>vK$sFVM{Y~-l!KNsP3 z2s;>x-MVpz7TrT(a$rGYXc2qMpVXFxkz(LWc zV_?W_Y?2w20GEL{omIs6t85vm!)!%dgTb;OV>DB2bQx?+4K}56tPQ!1k zmxuCUf^SsoZv8#(u9V1Id5!K%PaMUfb>#MO&y6B_RPE6nw3PH zp-s&+S}A}3KDyNUS|}b5Lk#%HI$&Hx^IDz$o1s@!(0;Eah~bwlPaG1ux286!MoC$Z zO_5-Gm>*bLQWhJ;z$$Nv$6k7Rqu@w=F>UQdSAoE+3P|J5oiRg`jyko+Rl7SF~K>y^=B zXYkfg!jJ@1@G=<0flQ%)`}XFDBaakA{(|o1gc97+7+MCVuGaQ!+=nju{z#pi zmeE_C^@fuoLAfK&XEOVU;8X%Q@xaUGo)jxG`+DK45m6?8;3-@)LjGuu@^iWn1}#}T zwPs5@LV+8Tg|Yu3*2THjL7+bi18ZDD(|%Ls3rd-^K4sO|d?;>x{JXG}lj+!Yj3fNo zIFto8o(dKijRh;AoT`lk-W3;Xr9^IwII3oUdHdHf*JeXG5AE;YziIF@OI5eJm*i6AX)_}8 zZ%8qBxs*0N*;;~da7pO2$plutf1)0#!cVB^Z%#$10q#tk``FA3H_Z0H&sYDIDu0RA z^5N#0pxuU^N)XN2 zHF*fLykYvcwJ;31H&n~F6#_GUu!wv@LX^-lR|q(4 zU*<$}^x^BgM?Q;9Hv`(?C~I=KcnCREtv$P!rU3yBrPb9t_KH+)tjx>;ajJP>#rd_q zeiM4oQJFD;0z=YeO&Wz|cWBTW_kU&kW=tFh!coc#X%`;IJgyn+<-^dxXT$Qvl7 zz^#k2e)OmsrK$(k+X*C7QABJWtdw2?G>B-Q+js+QshgF^z!g}lQe<*wV!{Ouk+Fxj zENy|Ch}}g)*`|CfvYeMzS}dvTP0I9wZ-XUU%s_LF#ZpTsfv1W}=YWsQRFRdiQFnEU zeZz+R4RT)rh6{s<{T==M^w96@jg$tZazPrMb}wvRlNxU`;fVj}DaFk8siG06_)U9} z3>r#%36v|^DJfG*Oe|$H^io#Y32bRncolE-3M60imvFCZopa5LQK0V}p)j)G;aX-fu{kz1t3oYo^gOqhLS>%5$2|x5PNZ^;(D~YI1sF0tY6o zt%{Cf&*5Da0+wmtVD=D8KZIp3l5B<&Ns!?l53$w+47r&-d~#x9BJ(Y#fIXUX40Wo1 zZtRN{G&WI2Da%B*m*ZKlM<>V~sNH|5sMLeY`MC0f_zPdr3s)pq~=bA)D%GZ6*3 zm2v@di->JBl#gIQzafo)m|_;@*`L!Jl=aL`le3S06p}6IzN@c4;09Ci@W#f*Bs8Ef z?dRh!ON|PAkNW%%)_>;V7Wp)sbK*LoRbuslKL5&ae-*IJS5t2C=i*e?|12+az=vICI7o6k3& zWy=>UAh10@rcWjZ(F-lU7X9dH@4}{Qub6f5?AP-!;h(5&0l%+|a-JUHBSmoP+Ia_v zUM*&xdKPUXvpwz)mH{DJ*kN*@Y?k)((tw>yi69U(3q;{p!-EA4Usz%Pbm?EdZtAxiwG+A28)s;|Cl%;K73j;m~|SqjG~PJoY7J zF5R%J_ap9|TXpib$91(0c zZWRA(pS|4ZPX$dvfrv?P>IoiO@KO0+ZuyV^=#@=vkIikJ7e7GbHtJT>4g0KGo$m_G z2^kRqc#66R*?7i``n)B)tnp3P^nG`{Y}$NyQVaPGMJ3Q_TF1t`bZxj=Ha-2CyHK96jQiH(s<0dFVA#B`PSHt{)x6 z9%#UtKnwSEW(G*DtdqElK&Hc*w=m<2zy1HzHvF&oZ;u#KqX<)kPT>IUhq(-gml-tY zCa0%^pdUVEY6)ab=`;N)FK0*xvgLO1ZVJo zbCtnwhL^RTNqwB`_rpwy=5x*)`P<$RgznnkXscF^ZynY2aUR{P+H1W!>gGzhx*pX{{vg}a)e3oPBrB1rRf59 z^6a34f?$v@h475lw;wn>X}A8heW0H0-Z$xFAechl|BrqR4@Arq9B}&8nU&OZugG?K zkgBl(Qk;brOdFg9xL744!_CQz`j}QaD#SB&h<_TrMXfBE2^zMC5)i-n_PD01YI}5K zV4rKsH6kC5D6m(6>@i}1_bZ)!URObg37 zx;_1bz925aF7UX@sR{bnpsnFNTuvCW zT-Wu1XJvBWph+rAv)>o2nKI zNq(EDeNMriz~SUs=pNN&)YBGyAYFdwH@*S9{R*tga$?n2LyFk~92?Kv%d~iCy=A6q zNt_vCJo9O7r2-GcrtdFheftz6Yc7b@dGlMG1@1kieQr#Luc^7TRHtxw8R{)4QeDMn zTGI3HH9vde716zh?|jOk2#5S;x-1wO%qkHdw5I_OabIGu#o_mFxTv} zYw9kcF}~u~S5R#%g6S@&{=vJo@i#wIRR#WZmx}K`Q|%~{0ccE{ti+pd>j{RTUb7st zFp%0;N}FGDL7OsAKehI=An5L5FqMpFsL&Hv8I7`^LU={>GCc`#KJ9rE%*i1&ekTq<-&Q4?HVWT zx4O}&s~~?Z#7R!8T|N_ab|q`vGY(?;BR#)CqcY#rH6Z)fnc`r!lMC7lxSO%&m2Wh^ zcQeZKbJLoqxV;SniqNxKo*?An z&G=VMP3HSUWuR392Rfwnp_nH;^SYFoqPrUy>H4O>J_Hzi0F+ z09~;8xNmU;1q&&NeZjdYC0mEbm2Gpv-ZCt(@Vff?-dgywG*Mis6pPMCeOTEVVcALD z(o5OoyV!~8>61{XaZpSro;{iZ3Yw+ur?sV+BIqL+!;xP$-5eb3Y%}=Fw;{V%iDDZT z%o4BG!ODs~p)Ss%^uJZ+Dyw5eGmJtbAajj1p+Y`@xFt(4y*FD6`yI@z>FMdGW^af4 zNFFOy-MDcB4ln&$UJmWFspAQS&8QuGcJy!_xC##5?*cwOin>PWf&b~7v7zBEYsew2 zw;0S%%Qeiw{&Q(S9M>P+Yur?Ij@zCAh-JI8A`Wo*nBj`aKON_)1D@s?c}Y4_ZbDyc z>pA*MkIOn@NA#BJ8EpnePL2;f4!o13r})%|>K(EJcQOTj4qlSTTzw(X>qkLGMwR@D zFrgd#zvRiEygPR*L_pTc-m>AnZN&dw=}n3RG}23zwFK)Rn4g|QFHc#NN?KA8QYp=D z`s2=Js)Y8@RL;#=PiJ?wq7_r%Y3|`oX5DRj&H*G{h?(N1hZJ)O=)~xhNKilu*C^X) zD?gO8;A+ZW?oxJ?DRAas$-yN~ZFdEkTb7om@el{_^dDdtUM_I^_fw|ANA^GFYE`Z%Z4I^!|Js7vOZDbi#B_8YnZpyy|U|# zkM4a`ANtAy>gheu#^$`ns`K4b+~9K$jcB}vRs42K zOUU1h!z&y=Ub@nc@`Y`P1Ny*VxvqcC6@*Rz3!f4tPXtlD0iKJvj!_TDbS4)2nWX0wCii3q|+23V~o3cX!=y zE8C3BjUQqvI&JXsQ)FWesYlm89=au!5p6sLHg#y`^azrZYy^v4&r5NGV}HY-RdcB; zSz5Ben2rOblpDOjqX&=Cb>SYY6LODQX|3;!burbGW>C{XP;`T;hwBGdSG8PQF7tNt~!de~YVx!|D_J1rETVd*{iX1iTD7SXQ9u%Jp0I zZ4d$}LIeg;d4rLlJi|}Fz!dB`cJ~ahK@0YrtLTj4*dNb2xr{Gc&%ZUj#_4ygpx+Vc zfy3zR=$(X#zuS^%&@0 zAaIso&pLD8_36755$&ZIv|;7R7gq^ecyV&Itj8NrKK?5^v2>lAs#44+qcK7s8NV!6 zJHdG?71Vu`q}Sn!ADl-nf6125rd|5o_8^3+q7G=>hFx~1)F<+V@`+V>V)qDv-ZO}> zm>AATXazrMWT8U6N1uN5UemS#F4`<1p_@N#S6gR>OEFWp2r!uTEB}B>t_vNTwQQL7 z8S7(UJ+Dbu7HU6SR`V;V(E+xkp4sP%v=|tti6dW!hY6ragG}p*&lkQ8W9+9Uw#TJl zu#x}yU;;Fo&>(>Brp+_n>*ZYy}uX&%*gGOK`LJ zA}R=s8NW_V#lg=)_|f?2dRW=X0A%*S{z7U;o+L9x1VfASEM_0)KGoIL6?TJ1qt`_b zOOJMQtAF2sf!@odKkDAjGf>NF5Z5!W2n72)V6NK*&R4JLR=N9sf7r*v$q<;p6bpIm zaLw!5!Ngyv)23VoNo~oOR(`9Kjgx>&>hb@-mcBYFs`vYP2nnUZkrEg|DZvjN5)wn# zfRYLdBOoau(%l_{0Z4Z!jevxrbc=LIHv*!7g1m?C?_CT1gQaut-22?~?6c3_`zqD~ zYn4ws`p!ct-OJ29MY?zotW7 zqqJT>rZ+fA+;wfRe8$0#q4fshtC8DnxObJ6m1#GIfUr-h&AAbLQq!~SnHH8&jkj*! zIKzVXREReD{P-|6cac=h!7U_d%cvIr#Xa`G0LHn{pVA{f@&KwkW8Q%bLh1W3MIpE^ z-oF^n(AMk9K zb}SmzJI=}Qm)_F;-2&d=3~Kp*gigebjg3qIfFxwEc^#|`eYOlnfWfVMbo6X$wvJf& z+48#2s++ovv~`y}ktz~Dn5FDRwDjvf3(l&EXO^536UvF2N~ygZ9BfNS*HDel5jr#` z__t2!*kZ)CAb)8yAAR?4Elm5ev;7Ux$Bj~=K?1b`mV;Hld~4HH@JXeOXAYMrXQo{K zY`E3U`V2|WnH63r{JYlJ^3%&#_HfM8Gp=F15$r;sRq_k-vCm756r~+ecjHj~SR24yM9lvE}{0O`z9lOXHgafeJ9ibam)?9mf%HeENh{p_#y5_d6~w z?#$n(Z_SMa0dY6kTCQpHvCpvXQt5t(r#PROx+|zH8G`Tcii+yX>JAG_@>jrdsrB$t zYV0T;BhC8y`o`=}X9s6<$s|@DzgpumZ#K=#xzzHN66)sWl92+d0W$tD(=^vgDx|0- z{O&XQ!exq?WsO!|O+qg_NO!U=opqJE9K`Rxd*I#;&-kamwOI!E*co^~@?JFc%O#Wd z;~nko$ZV9HJANzE^pavoj0=}dZp%wOj+GEgt02MtoDdFB`$UsBi zj4!q5$7u>t1j3@nD3ZV(8YR!v{fiQ4Qc_YCRn_@~=5BgwdG}n_3s4-%GUK1Ul?X#x zT_r_%;ki1sD>e_}suq|pQV!GEo2zlZ^H&V$!d8Z$tMz$Tsgb{StXL#nx$5%s+dCL? z$kmG8%vnXH^Fi#<^;}7IgM+!zdxG-Xj!KCfELrIAVR|g9q^mWPY;t&L;VW`RkCi`% zA9)%(1Bssq*i*mr{alMqQyAhmkSnk1M~qF6HBWiOBN?1;ISDXjI$7_lJZBzGcIkUz zE)j7}>CZGhdNuydvCt}p&_a=W`TFVg{qWmk)b^NvFq0QLE>a{L>>mFcO{ss2jhma4 zo143oZ=noD4GiT=N;bF&YqctIG6}Pj@<+SMgcewEBiz2-qx6JzKPjR=tGZg4B(T+k zgI!377HqbWKRXGkNx-x;5pahs2>ve~BZ4GQhvGYr?CWtn##Np77Q)h3X_h?FGQvg2 zH;7j;BX?TPt?b*MLN4hw9M7yT$3W5N^_ODF`qDfCwwztsh;YIFtm_g=As}8`{?rJQ zX8b76#}deR7>ni~_XSnwUHFrxfU&1u)gdfD9fdETqN4IWj0QERt)en`FEzzMa4eBy z!bsXm=7c)7w^swS6V4WNOm6)s`@%r-N0yeBxBPD%b=`y;NaJg6ehtR(s|k_Hz%q3k z?ft$+zBSh}ho9*$E!3YC9-FWYC_Ms9Gs`{LyAPA)k9=yy&kxjka`It+I0@mfwtTvN z!=+D4KecbAe4aNJ-QKz5T;F?g_Y>F-s6|gchMBiz&BiKmFB3d5R>DxZ|6*6l9PoEh zA+W5ff7N6r5%(#JXFb)*%4+-MuJ9XM)6;No(T2Bcn_Y6e7H<&8<>EorF)rqQetrT+ z_{6{R%^y3jQZ3nB8;7Y>+*|9oIsyUm{{hE{O`( zHoQgjBl$s~fO)z^e-^#eLM@kM7$Wx^_3rB#E!}@vbX7IB{3q#R0*9*9pg~q~F%PAG z@|;ydRw%F zl1^{clhrd^xCF!KcekyhB(Mf%)@jP~;BI>INERnI&w;2p;#!T z|5><#s;a7rn%aVtuG~=E*y75g2iUh4lW4oeUHC!QmM_z79y z$A{qxppdkixDZy$x3G<#j}PmMVkfL-o~*S_{kq<}Qb2=Td+AJpR+g6!oK)IuN3LIU z0bWO8*g#D`SlK!%%d^#)l11v32gt$&d<9X#n))sjXi=qJ{IDj(>@p|q#lh|ocuX)F zCZ7p>h-5O}#W$JM^9_ee;?a;1_27~1Cy`EEGd(pl&piA7kziSUrn={%BnmUWOKe8l zn5)8iBPqhnMiAO88UJdP&{Ty~Wp5Pb01;!MT5D}^UhQO)zi3gfVzA))gP&34-rt+d z-W2w)YgM$j(Vk9kJtX`{RkXBL+N~q5Fp4QrW(X`?nQUWPOYO6qW!(2_WWG2Ez5*Cv z9Azo`7k^8*#gPaGgh~X~$%KxnxQcta&M|}E^VoF=`H7L;R6a^GcVfb5Sv~#P$oKd! z=5q4#_^U(1%sJ-GSMBk@;LS%x5=>O$!7VB%T$__j@V;G}2vJoPFlSZqqY4H1%PQ5~-iC~fj5x17{P}cR2&8`J6<9=xS)H9`Kr)me2dy41{sJ4_3szX~+l>AX z|Fe#A)?&uEf1Zl^)XH1ITZML;VEz73{4;S$j>5atuthD{aIW(YTrIS)N$g;Ae@Uux@D0D`r~kP{W)Bnot>>~YlSq^ z`?XXEc*b^*y}z8um<;*62oHH3=9!ZbWy~Gy!X+Aq>uba5KB&I(McSpzl(wXx)B-dl z4_G8clwOpU-fX@~{%2>3m6g@1XVp`jS0wI8{@S;Y{JM`D_4N|^i>6}zB1~&8M0mg$ zG$L}>hL9LF0YO0;V~MxKg<_OJyaP8c9{h64fN04I8$Hj1DA$iDY1~6siIbs;i3kvp zXlQF&fbxOs)~ycEDm|0CrY|f_MIuF-`K438bKTVvCP-wX0>cD5GmT*l4U$LRG8{K< ze6p;{Dlh-9H2AVMOH51*cfV-MAPC7#jpbo@3I-tH>wvwE2iIB$tKa=ASKe+!55tlR z;EKGebR)i@M&(xQ5NL-Wmnmp(&nY)QACxQ1;GcD(WV;}D9-jF0$E@^n9w*`?GWFVN z5wfqpKRYW64>YrE!I=>5=GG{!ftBN|4X+F7Hbm{$T}SZgASRk_g;tmGRI4_ zQh(NR;9Du{>+4U)3;|_#xnqqK;m9~~@dADT`iilXhp@DC3|s*)0EU*cR z5ZQv!(V-f6__H69z>_>f$zCl}CcHnIVHXz{YX=7vW1yU&1%fb$fVmcxAqU1*a)ds@FY|-AkWdgfmb2>X z8QdDLf_;5@FiO+D9C~+CdiUFty}i+z4;`xA$FqU1f^3Jd$!B-9ruYy!xM4>*(-(@| zXwdZnZCDOLmg9D!9GskvM|t_;W6qcR2HAqg7oJ2}T3HQ^j0E@hYn9Dz$lWBnv=Z>- z_N!N~T47!l2{;49J6J2nEu?cYU-vU{W+OHTx)GBEkW#Lr`AhOY8V zTzlRhIc_xAZD+lHNW)hzxw?tSt0rn?!O*p^M=r>MtX}}dp>fIG)06T1Fn@ov#HFXl zT&hk=OdN@Ql_jLK@o}TNI>tm?TtFZI)bH~UmSi0Ji%-7uIS?^o@TVm`BV$gJ+Xt`p zX6hpwN5_t2UW47nxl{hq7;KP`Qs{tWdk+$X*1%PN?@s20m0@su^bju%MxT(`D7AT~|zutj?uxmGC z%ueY2g`llkHTB;6GDv>??D#^#S8h-fpW%HkK*%GrfN%wTJ6`X?2_ZHuyzRIp3%IBKjL0*Wq%xmGz#1!C4W9suc<9O!0UY9+_qs)9XZt ziitg+5t@L0>(%Smm}X(uQ4CeE?)BTal#~WknWWviDS$Q6qE`Opzd1QMN1(JlPsD*o`CKQr`G)}@ zaAIPj{ErMOU5fAQESdKA{oM|C9>7{rzF6#_l6deH1RMXcF2ao09&eW*tj&q2^$Frk z>v(p0ni(WRgOiisr49v!!?U^~1_p)(V-;+yP=q`&fOh<(u4;$nxQG9R!#a0wGA$cE zg+$6ch}Bx1QRDJUVq z5D^ivwdy`x*neCVW!7+XK9P@(4N8$5ifoXBzYr@NF`&M7M}>Iw)}2oyQHo_9d@ zDtZofj6L96QS9slP#h#ABsPB=f!GyhY!isSavd}4%`PY$^@Vv}a8NkPBtQe@=@bu8 zT(bI~`R;!IxJoD|jwU&N_fW0cjui`KjfRG1G)BQLIuVDfzH-T4CzJrianq=JwzjaK zfYW>(yf2W;jIGXsnZRYlt})0@@|0OTu(JM14~f>n!z~~s6%BPBs>ZM4eG$rG_*Jrt z@E^tla;DN|zcU#Spw0h0uJ+Yp_ovO~QhJj^g|1*}h3GAVGYIMx_LsdRp)rPj>^}HL?70C*-kSDATdSFw>*>*^=IK!(p5nD~*G)Ao`RYyJ z$u2(??>9$9ow9dM=6B=#ojc-=a>*~Hde!MtDX(7LIe!vHq=Tk# z!xq_G%`ItXUqRW&*!m9WK%inRKeIV`L)-j+QQ7qWaV3v7 z{mJUwsL(qk%je1);N;-=z(%~M{t37wF9b6P7k$B;bg`8ZRrj~(FWVt-Ju5!(@MuD5 z$QrN^d>y@YKgTipoljNu{_)!$@X$GR^mz6f_<;*z`17~&Xhbeh&pZWq_oe7%B5*yKgklJyB@!Ij_?EL%{N&kZ4l9IE$w61?huMA%>7@Pwc2<(BW z{iyKZ6++ZO{SsT>tA3GGKI5MD)1jfEaJ@s^a2zSB1IoO4nQ!{dN53r!z8-tCQHhgg z>PncXCPI4>7#m9gtA-d1__hn!l53Noa8fsn2|A==w>z>Z%YM`{$6DqpOZNTX=;%Ft znQMy%u{Qp0XwPy3c+y)ksGJk~9&-7_Lk@^p6^*^IampmU^b^HZnABh9k=rx2iUR-6 zIT8Z&cXPj<6!j9c7ZFeo-`4!`V2LZBzVik6;q+WwI_#r)`%Qr4p`a0i6&r}j^K8-- z@rmLP#n5}V%#+Zz9vR$C$JAFw(~)ketTeN_kTR}?IA zh#SwTu6EU&WW6_#c3oP!iT+O2kT@N*mz9;>T2VC@cavwmW9&ax;f7zXuC8Xpj3OHY z{UL~jRf0KImNPgFPKSNjt2;U&v8%to-}Ki^nH>uYE2}|s>?Sj2I?Xn$ErBxM%!7}= z+Usx!%{SAdU}-SADFo`qx0H9z3v9+ELi_^Q%r0m|jBfrqw+q1~F5w?4zEP^@>E(3^ zQO&TcW%3mPU0r5PjfnX=OY2X|Di5Q)zmFv+@DMfUewoLXmXPMbi3s-W4hs$a^oPx$ zN>zu75DZ^~#`bFKU_km$FbtPzQ3D=;NW%u=r)aluhj(Md#Xwq;e}4x%+dl@>k}zsX zTS2U7ns@?kH#DU895*Z^xYQpqT(*@A&+ptoui1_rArO>z&)*TiHS-sd*4@|F^geC) z)EUHw6MqrDZcxGvG;Smf|D#U~*xK1qa&&aGZnqZMj@#&KbM{J@PqWqMl;-2J|3*=; z?-e04D54$+T1=wz2);wUWdD|oy;dFv%nPD>=)85+2yK% z37yz#imr`CL{*CJ7W9+V!#-DF3((T)e<#XQ^%r!4ZipjCa7W0{k`ZO#?TSSvZ6E%H z-pPM-R38xFJ9oW|NjxgTtm(}DUnyjMDv7~w-}1wj$;T}ui-7a_3g^?tw3oFMeZ&jw zSlOGDlt0v{C3^pxUmgNFdI+@$1kSMRcqwigt}?biP@!8Gv>`6(=;%1_(4K7kyCg>y z`)y>z`vZox6r`I({y+5Z-Se5k3QDVUpNiUwwSY?!4hZw^%Z?j*5{dfKcFIu-m0ao` zG6r55eE^>Dy~~EBQA-mbz6pL2z*?mRC7-z%qvO@@4<8m26)*yISM@_G2MEH zBDVJ$%mR|GVv3b!i0h{{eKxkO1KGR@h^As!TqVDPsJ3}Ds3xtmxut~_I%wlcPnx^~ zP5Dkz4BcYos8RDBKZq~4z1DT-_u(Nss9>S}n7D4-9B+*>`ON>%kQA_Xw&n~3{KbJ6 zsBZBW!(#?MO@_{*BJSxA9zwV-)17>ol5dPJp5@|XBE%h)qYCt@by>Lc{*v?*TH<{$ z7ku6S;m<}1?cPzev-!OBVk@A^yMvn4G9lQfdenG3HU~I#oh@`f>{kDNMgM9x0&c$tFiIo6hdSf`Wn2 zK8w2a?EmzU?-Z#2!17!%DIgaY`iBi#sR#gO*I`94CQ41>++}JwfmQPiz&Ip%b1U(7o^u+Zt0lz@_b%LVOw%HonE6~hZ{FW=ukggva`tK4m?7%Sfv)c-(rGw5Qr>u+|#_YyT z$FzuaZB0#|M>%STyya->$80}nzZ!ToqDUYgA{D|RuAP_A4x5o^jH zM`zSTVqYQcY_i4VNhf6(ONIp+v{y(~LnHW$Iq7j&r5X0-Dx-#{aoUyD<%v`xPB5CdC3grKP1BU)5`Ub8ZQL;f`#F>~C(k#mYQ0b$H_Z zkqai2ZB}t`IS%BIbaaaM3gIYZQ?WNl0<+RKKYsk^eO=rrl1~@=D;u{nfam^VCcMCf z1&s?}W@2jlwKCj0_BN78W^{=KwwHX36u-N8Ycp zRlflM=>9XfJymzB8(Wfm4ZwZ(qtXi$>WR%MZ{DEQ)h|Ivs)*PEq{(-6brpS6U-y-O zMKLitigd1oQYP356e*tPqQYzX_<3?{ZEN!Mm;!wj4Q8zrCqK$uk(&+qZ>Iy zxCQlDe#Hgcoyh(KCS2o#lo~V2@+pR#87rugkYpNtx51Gkm^rEBBIQ-{t~)%Nl zB4WRa#3*}w#zLLmP9XSTAIKgIsI-? z*mWBJ^u734Alv5;gFyLRsc_XMslR?{#qT`>OEEkF=k{n8kEI0k^~t5BrSffS!?ld1 z{u;8pvv)Z;?B?sfmX<5mj{|%Qso`dT6=#IFh<}LD14ZqXWpoqS_uazUnrl+9*sNzt zf{FEa6U_=6TU?a zBAF06m%hJtC*Li*4wvZn!9lQP^vHHx@try3JD^VB8eQT;q40q4M+N-^7v}%^I#mqa zE&KK`^@QTRWA8K4R_?-Fn{!<+*3vRmbEvpB$ES@ebnSfH17~@mR6zGA8;}K{3GTdi z@Q#2K027&=cYwLG0`VERwcm+PKrPLBHXfN&W_lOKGN9)C+4ky-S=6PN8VQK0v$nDM z1PRVH|JI+~BqMn+WoPxN`;L~j_HFLGj*p#pKp)kr_T z(Sl?(<+7Rqg*m+V!e-s{#kUe4`afa%ucZ?aC*80g7hS(61pR@w>?s}C2)KZR_>^W# zuTtP{Y1w|`Ke3cgIlv|YY|zlYrKY5g8x|u$aZ0lc|lPEL3qOYd*0Dr;E(&l_h_P01A;Hr+q2 zyG9xd#sh(wMPm=*gT6%yKY;#U*dM~n&VJg~Q)|DAH>f;I zXq!JWzzu)3Vdw;2Fl3T-qEr@@JI$3E2HZd4e+pl^C8A?vmF%J}>?TYrxw=$k#9brs zfb>0xBH-l8dn6bS6!jWFML9V+t|z%i35gurBGE2=O4d*U{*Qxg)Ytn*=fB!(`BQzf zhFZHr>vv+V&E5YrR5QM*at6b~BR)E}mL>1ZU3l8NxJU0$^W5Hk`zqp0U!BO=%?%0e zBV%>e?wE!9dTMPPBh3)^2F`Uf&y1{)fPm8;XiE|k#OXANbV;qhSy^&$i>N&r*O$(- zL1wx7;k6d^=`@(hwVuiNAJ$;mfRx=^erZ;G7V$`w(#p~jsiUT#w+c=wc-uyJuJtpf zOZTb{W7<(3NxAuC*#GDiZEbmhb^b(Cz0W)p>d10qPn<2RO#qSqQk%e6UWGjG;K1_c z%sWCz#H+Jb{Z5z@&^+koiQ()^k@~&V!bsD#M{Ldpl#6PJ}f`3SVT4k;xka#vRsor|{QC9lnSGwE3X=9tDh77Z#lir1PlnmK@oOpeS9a%F z16QOrwS03>Nb{qzDiOjkjT?Hx6n(mCeqc0y4iL}mX@_L*6BfvZd^KS=8+73@zF+Vi z{xLS?{W31M4GYBC$l~7JryZWuakJ2E@a5ok2&kSAyhVjFT5J{36FtRxdw;;)9-V&* zf}w1#ogADDKXJKndBOi7yIj5M$5!cHo1`;cF{tn&ERt|jGQ*nMwl{A!)5oot~$($PogRUbA0ku zj1&=L@})9#dV^o8p82wl`Zp^1f7mKN%Zvd7E|=%X)*h(GM(L04UmZE$ws00dZ#~uF zuP)i|{>zj`%1g{k5D`*rJYjj(t5Io9*Sfy9x5o(oTEg(WUnpXwmiM)Z?`sp4;A(;} zHLdOenvRQEF9LA9f0!DsTxaR8Nv6_$la$mZ6m82?K~5mfGAt(OKe26PfS#SJ`Q9%>4mm#06v1)qkaC0RzVdg zA1w7senO6kH)0IvO#WNn=MCAp1mj^cJ4JHkeXHLxbD9Ekn)3PIN@1l=eHC51XLxdh Xug6-l{}sV&`4FmTEycI;4+H-nDVk}# literal 0 HcmV?d00001 diff --git a/skin/frontend/base/default/marketplace/css/images/rating_filled.png b/skin/frontend/base/default/marketplace/css/images/rating_filled.png new file mode 100644 index 0000000000000000000000000000000000000000..063ea535936e70e21a57ece58c4a31ff5d8e2cc7 GIT binary patch literal 34456 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 img { width: 100%; height: 100%; } +#user_detail { float: left; padding: 3px 0; width: 260px; margin-right: 20px; } +#user_detail > #vendor_name { text-transform: none; color: #000000; } +#feedback_profile { float: left; width: 420px; padding: 3px 0; } +#feedback_profile .feedback_header { font-size: 14px; } +#option_wrapper { margin-bottom: 15px; } +#option_wrapper > a { color: #000000; text-decoration: none; padding-left: 25px; font-size: 12px; display: block; margin-top: 6px; } +#option_wrapper > a.contact { background: url('images/contact_icon.png') no-repeat 4px 0px; background-size: 14px 14px; } +#option_wrapper > .contact-details-container { margin-top: 2px; } +#option_wrapper > .contact-details-container > .contact-details { margin-left: 4px; margin-top: 2px; } +#option_wrapper > a.items { background: url('images/items_icon.png') no-repeat 4px 2px; background-size: 14px 14px; } +#membership_detail { margin-top: 10px; text-align: justify; } + +#profile_bottom_link_wrapper { margin: 10px 0px 20px; } +#profile_bottom_link_wrapper > span { font-size: 12px; border-right: 2px solid #999; padding: 0 10px 0 5px; } +#profile_bottom_link_wrapper > span.first { padding-left: 0; } +#profile_bottom_link_wrapper > span.last { border-right: none; } +#profile_bottom_link_wrapper > span.location { background: url('images/location_icon.png') no-repeat; background-size: 14px 14px; padding-left: 18px; margin-left: 4px; } + +#vendor_profile h3.product-grid-header { margin-bottom: 20px; border-bottom: solid 1px #CCC; padding: 10px 0; } + +#vendor_profile div.highest-selling-product-container { float: left; margin-right: 20px; width: 180px; } +#vendor_profile div.highest-selling-product-container ul.profile-products-grid { margin: 0 auto; width: 128px; } +#vendor_profile div.highest-selling-product-container ul.profile-products-grid li.item { float: left; margin: 0 4px 14px; width: 120px; position: relative; } +#vendor_profile div.highest-selling-product-container ul.profile-products-grid li.item a.product-image { width: 100%; } +#vendor_profile div.highest-selling-product-container ul.profile-products-grid li.item a.product-image img { width: 100%; } +#vendor_profile div.highest-selling-product-container ul.profile-products-grid li.item h2.product-name { text-align: center; margin: 5px 0 0; } +#vendor_profile div.highest-selling-product-container ul.profile-products-grid li.item div.price-box { text-align: center; margin: 5px 0 0; } +#vendor_profile div.highest-selling-product-container ul.profile-products-grid li.item div.price-box .price { font-size: 14px; } +#vendor_profile div.highest-selling-product-container ul.profile-products-grid li.item div.actions { text-align: center; margin: 5px 0 0; } +#vendor_profile div.highest-selling-product-container ul.profile-products-grid li.item div.bestselling { background: url('images/best_selling.png') no-repeat; height: 60px; width: 60px; background-size: 60px 60px; position: absolute; top: 0; left: 0; margin-top: -30px; margin-left: -30px; } + +#vendor_profile div.product-grid-container { float: left; } +#vendor_profile div.product-grid-container ul.profile-products-grid { width: 700px; } +#vendor_profile div.product-grid-container ul.full { width: 900px; } +#vendor_profile div.product-grid-container ul.profile-products-grid li.item { float: left; margin: 0 4px 14px; width: 120px; } +#vendor_profile div.product-grid-container ul.profile-products-grid li.item a.product-image { width: 100%; } +#vendor_profile div.product-grid-container ul.profile-products-grid li.item a.product-image img { width: 100%; } +#vendor_profile div.product-grid-container ul.profile-products-grid li.item h2.product-name { text-align: center; margin: 5px 0 0; } +#vendor_profile div.product-grid-container ul.profile-products-grid li.item div.price-box { text-align: center; margin: 5px 0 0; } +#vendor_profile div.product-grid-container ul.profile-products-grid li.item div.price-box .price { font-size: 14px; } +#vendor_profile div.product-grid-container ul.profile-products-grid li.item div.actions { text-align: center; margin: 5px 0 0; } + +.account_profile_wrapper { padding: 10px; background: #FFFFFF; opacity: 0.9; filter: alpha(opacity=90); box-shadow: 0px 0px 5px 2px rgba(119, 119, 119, 0.5); -moz-box-shadow: 0px 0px 5px 2px rgba(119, 119, 119, 0.5); -webkit-box-shadow: 0px 0px 5px 2px rgba(119, 119, 119, 0.5); margin-bottom: 20px; } +.account_profile_wrapper #user_detail { float: left; padding: 3px 0; width: 460px; } + +.feedback-row { display: none; } +.feedback-collateral { padding: 5px 0; } +.feedback-collateral h2 { font-weight: bold; font-size: 15px; color: #e26703; margin: 0 0 15px; } +.feedback-collateral p { margin: 0 0 5px; } +.feedback-review-table-container { width: 500px; margin-top: 15px; } + +.feedback-buttons-set { margin-top: 20px; } +.rating-graphics-container { position: relative; float: left; width: 90px; height: 16px; margin-right: 10px; margin-bottom: 6px; } +.rating-blank { position: absolute; background: url('images/rating_blank.png') no-repeat; width: 100%; height: 100%; background-size: 90px 16px; top: 0; left: 0; } +.rating-filled { position: absolute; background: url('images/rating_filled.png') no-repeat; width: 100%; height: 100%; background-size: 90px 16px; top: 0; left: 0; z-index: 10; } + +.rating-container .rating-totals { float: left; font-size: 12px; text-align: center; font-weight: bold; width: 50px; margin-right: 10px; } +.rating-container .rating-name { float: left; font-size: 12px; } +.review-container { margin-top: 15px; color: black; } +.review-container .black-label { color: black; } + +h3.all-product-header { padding-bottom: 5px; } + +.review_overview { margin-top: 10px; } +.review_container { float:left; height: 50px; width: 70px; margin-right: 20px; } +.review_link { background-size: 30px 30px; background-repeat: no-repeat; display: block; height: 50px; width: 70px; position: relative; text-decoration: none; color: #000000; } +.positive_review_link { background-image: url('images/positive.png'); } +.neutral_review_link { background-image: url('images/neutral.png'); } +.negative_review_link { background-image: url('images/negative.png'); } +.review_label { position: absolute; top: 32px; left: 2px; } +.review_count { position: absolute; top: 8px; left: 36px; font-weight: bold; } + + +#customer-reviews { margin: 35px 0 25px; } +#review-filter { height:30px; width:auto; background:#DEE5E8; font-weight:bold; border-top:1px solid #CCCCCC; } +#review-filter li { float:left; margin-right:40px; padding:5px 0px 0px 0px; } +#review-filter li:first-child { margin-left:10px; color:#000; } + +#review-data-header { height:30px; width:auto; background:#DEE5E8; font-weight:bold; border-top:1px solid #CCCCCC; border-bottom:1px solid #CCCCCC; color:#000; } +#review-data-header li { float:left; padding-top:6px; } +#review-data-header li:first-child { margin-left:56px; width:490px; color:#000; margin-right: 10px; } +#review-data-header li.review-price { width:200px; margin-right: 10px; } +#review-data-header li.review-date { width:125px; } + +div.review-data-row { border-bottom:1px solid #CCCCCC; } +div.review-data-row div.type-image-column { height:30px; width:30px; float:left; background-size: 30px 30px; background-repeat: no-repeat; margin: 8px 18px 8px 8px; } +div.review-data-row div.positive-type-image { background-image: url('images/positive.png'); } +div.review-data-row div.neutral-type-image { background-image: url('images/neutral.png'); } +div.review-data-row div.negative-type-image { background-image: url('images/negative.png'); } + +div.review-data-row div.review-column { width:490px; float:left; margin-right: 10px; } +div.review-data-row div.price-column { width:200px; float:left; margin-right: 10px; } +div.review-data-row div.date-column { width:125px; float:left; } +div.review-data-row div.row1 { margin-top: 6px; } +div.review-data-row div.row2 { margin-top: 2px; margin-bottom: 5px; } +div.review-data-row div.no-review-count { margin: 6px; } + +.active { color: #000000; cursor:text; text-decoration: none; }