diff --git a/buyer_assign_group.php b/buyer_assign_group.php index 14e54a01ea20dfe58a60df983ad7dbc3738049a9..77d0b9b77a39ec7fa73419035e2286e3b82a2c56 100644 --- a/buyer_assign_group.php +++ b/buyer_assign_group.php @@ -106,7 +106,7 @@ class plgVmCustomBuyer_Assign_Group extends vmCustomPlugin { 'group_id' => 'int(11) UNSIGNED NULL DEFAULT 0', 'group_type' => 'int(1) UNSIGNED NULL DEFAULT 0', 'group_add' => 'bool DEFAULT 1', - 'modified' => 'bool DEFAULT 1', + 'modified' => 'bool DEFAULT 0', ); return $SQLfields; } @@ -189,7 +189,7 @@ class plgVmCustomBuyer_Assign_Group extends vmCustomPlugin { if (!isset($customs[$cid])) { $customsModel->setId($cid); $c = $customsModel->getData(); - $this->parseCustomParams($c); + $this->parseCustomParams($c, 'custom_params'); $pstates[$cid] = $c->purchased_status; } } @@ -221,7 +221,9 @@ class plgVmCustomBuyer_Assign_Group extends vmCustomPlugin { if ($modified) { $this->setModifiedFlag ($e, $modified); } + // Update the $users array so the next step in the loop has the correct groups if the user is added to another group $userModel->_data = null; + $userModel->setId(0); // <- This makes sure to invalidate the cache $userModel->setId($uid); $users[$uid] = $userModel->getUser(); $users[$uid]->shopper_groups = (array)$users[$uid]->shopper_groups; @@ -245,6 +247,7 @@ class plgVmCustomBuyer_Assign_Group extends vmCustomPlugin { } // Reload the user data, because shopper groups are NOT automatically updated in the data structure in memory! $userModel->_data = null; + $userModel->setId(0); // <- This makes sure to invalidate the cache $userModel->setId($uid); $users[$uid] = $userModel->getUser(); $users[$uid]->shopper_groups = (array)$users[$uid]->shopper_groups; @@ -256,16 +259,17 @@ class plgVmCustomBuyer_Assign_Group extends vmCustomPlugin { } } - function plgVmCouponUpdateOrderStatus($data, $old_order_status) { - return $this->plgVmOnUpdateOrder($data, $old_order_status); - } - + // VM2.x compat: function plgVmOnUpdateOrder($data, $old_order_status) { + return $this->plgVmOnUpdateOrderShipment($data, $old_order_status); + } + // VM3.x + function plgVmOnUpdateOrderShipment($data, $old_order_status) { return $this->updateOrderStatus($data->virtuemart_order_id, $data->order_status, $old_order_status); } function plgVmConfirmedOrder($cart, $order) { - // Each custom field will have its own value for auto-subscribe, so we need to handle all purchased products! + // Each custom field will have its own values, so we need to handle all purchased products! $vuid = $order['details']['BT']->virtuemart_user_id; $userModel = VmModel::getModel('user'); $user = $userModel->getCurrentUser(); @@ -279,7 +283,11 @@ class plgVmCustomBuyer_Assign_Group extends vmCustomPlugin { $customModel = VmModel::getModel('customfields'); // Collect all group additions/removals that need to be stored in the database; Will be used on order change foreach ($order['items'] as $item) { - $customs = $customModel->getproductCustomslist ($item->virtuemart_product_id); + if (method_exists($customModel, 'getCustomEmbeddedProductCustomFields')) { // V3.x + $customs = $customModel->getCustomEmbeddedProductCustomFields (array ($item->virtuemart_product_id)); + } else { + $customs = $customModel->getproductCustomslist ($item->virtuemart_product_id); // V2.x + } foreach ($customs as $field) { if ($field->custom_element != $this->_name) continue; diff --git a/fields/index.html b/fields/index.html new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/fields/vmorderstates.php b/fields/vmorderstates.php new file mode 100644 index 0000000000000000000000000000000000000000..1deb593c0d94531124b08d80ccf15bec0b32b14c --- /dev/null +++ b/fields/vmorderstates.php @@ -0,0 +1,84 @@ +<?php +defined ('_JEXEC') or die(); +/** + * + * @package VirtueMart + * @subpackage Plugins - Elements + * @author Valérie Isaksen + * @link http://www.virtuemart.net + * @copyright Copyright (c) 2004 - 2011 VirtueMart Team. All rights reserved. + * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php + * VirtueMart is free software. This version may have been modified pursuant + * to the GNU General Public License, and as distributed it includes or + * is derivative of works licensed under the GNU General Public License or + * other free or open source software licenses. + * @version $Id:$ + */ +// if (!class_exists('VmConfig')) require(JPATH_VM_ADMINISTRATOR.DS.'components'.DS.'com_virtuemart'.DS.'helpers'.DS.'config.php'); +// if(!class_exists('VmModel')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'vmmodel.php'); + +/* + * This class is used by VirtueMart Payment or Shipment Plugins + * which uses JParameter + * So It should be an extension of JElement + * Those plugins cannot be configured througth the Plugin Manager anyway. + */ +// class JElementVmOrderStates extends JElement { +// +// /** +// * Element name +// * +// * @access protected +// * @var string +// */ +// var $_name = 'OrderStates'; +// +// function fetchElement ($name, $value, &$node, $control_name) { +// $statusModel = VmModel::getModel('OrderStatus'); +// $fields = $statusModel->getOrderStatusNames(); +// $class = 'class="inputbox" multiple="multiple" size="6" '; +// +// return JHTML::_ ('select.genericlist', $fields, $control_name . '[' . $name . '][]', $class, 'order_status_code', 'order_status_name', $value, $control_name . $name, true); +// } +// } +// <?php +// defined ('_JEXEC') or die(); +/** + * + * @package VirtueMart + * @subpackage Plugins - Elements + * @author Valérie Isaksen + * @link http://www.virtuemart.net + * @copyright Copyright (c) 2004 - 2011 VirtueMart Team. All rights reserved. + * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php + * VirtueMart is free software. This version may have been modified pursuant + * to the GNU General Public License, and as distributed it includes or + * is derivative of works licensed under the GNU General Public License or + * other free or open source software licenses. + * @version $Id:$ + */ + +class JFormFieldVmOrderStates extends JFormField { + var $type = 'VmOrderStates'; + function getInput () { + + defined('DS') or define('DS', DIRECTORY_SEPARATOR); + if (!class_exists( 'VmConfig' )) require(JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'helpers'.DS.'config.php'); + + if (!class_exists ('VmModel')) { + require(VMPATH_ADMIN . DS . 'helpers' . DS . 'vmmodel.php'); + } + VmConfig::loadConfig (); + VmConfig::loadJLang('com_virtuemart'); + $key = ($this->element['key_field'] ? $this->element['key_field'] : 'value'); + $val = ($this->element['value_field'] ? $this->element['value_field'] : $this->name); + $model = VmModel::getModel ('Orderstatus'); + $orderStatus = $model->getOrderStatusList (); + foreach ($orderStatus as $orderState) { + $orderState->order_status_name = vmText::_ ($orderState->order_status_name); + } + return JHtml::_ ('select.genericlist', $orderStatus, $this->name, 'class="inputbox" multiple="true" size="6"', 'order_status_code', 'order_status_name', $this->value, $this +->id); + } + +} diff --git a/images/baroquon_Shopping_Cart.png b/images/baroquon_Shopping_Cart.png new file mode 100644 index 0000000000000000000000000000000000000000..b11b045bee890046734e3b8bccdeceee6a525142 Binary files /dev/null and b/images/baroquon_Shopping_Cart.png differ diff --git a/images/baroquon_Shopping_Cart.svg b/images/baroquon_Shopping_Cart.svg new file mode 100644 index 0000000000000000000000000000000000000000..38a7fe6d71d67db29a8a771a015337df08d3d671 --- /dev/null +++ b/images/baroquon_Shopping_Cart.svg @@ -0,0 +1,201 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="380" + height="290" + id="svg3813" + sodipodi:version="0.32" + inkscape:version="0.46" + version="1.0" + sodipodi:docname="shopping_cart.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs3815"> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3216" + id="radialGradient3402" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,1.0265279,53.571429,-12.46395)" + cx="300.63495" + cy="462.18982" + fx="300.63495" + fy="462.18982" + r="10.97111" /> + <linearGradient + inkscape:collect="always" + id="linearGradient3206"> + <stop + style="stop-color:#b3b3b3;stop-opacity:1;" + offset="0" + id="stop3208" /> + <stop + style="stop-color:#b3b3b3;stop-opacity:0;" + offset="1" + id="stop3210" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3206" + id="radialGradient3405" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,1.423301,0,-161.97783)" + cx="408.53793" + cy="375.87903" + fx="408.53793" + fy="375.87903" + r="8.046875" /> + <linearGradient + inkscape:collect="always" + id="linearGradient3216"> + <stop + style="stop-color:#b3b3b3;stop-opacity:1;" + offset="0" + id="stop3218" /> + <stop + style="stop-color:#b3b3b3;stop-opacity:0;" + offset="1" + id="stop3220" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3216" + id="radialGradient3408" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,1.0265279,0,-12.46395)" + cx="300.63495" + cy="462.18982" + fx="300.63495" + fy="462.18982" + r="10.97111" /> + <linearGradient + inkscape:collect="always" + id="linearGradient3186"> + <stop + style="stop-color:#cccccc;stop-opacity:1;" + offset="0" + id="stop3188" /> + <stop + style="stop-color:#cccccc;stop-opacity:0;" + offset="1" + id="stop3190" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3186" + id="radialGradient3412" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,0.5693009,0,177.43456)" + cx="270.58206" + cy="378.09262" + fx="270.58206" + fy="378.09262" + r="72.84153" /> + <linearGradient + inkscape:collect="always" + id="linearGradient3244"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3246" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3248" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3244" + id="linearGradient3415" + gradientUnits="userSpaceOnUse" + x1="277.7323" + y1="425.51294" + x2="427.34067" + y2="425.51294" /> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3821" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + gridtolerance="10000" + guidetolerance="10" + objecttolerance="10" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.35" + inkscape:cx="500.71429" + inkscape:cy="-360" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="641" + inkscape:window-height="710" + inkscape:window-x="208" + inkscape:window-y="147" /> + <metadata + id="metadata3818"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <g + id="g3488" + transform="matrix(2.224774,0,0,2.224774,-587.53503,-802.87942)" + inkscape:export-filename="/home/brandon/Desktop/list.png" + inkscape:export-xdpi="89.997635" + inkscape:export-ydpi="89.997635"> + <path + style="fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3415);stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + d="M 413.01639,368.49129 C 411.75829,368.48998 410.46298,369.17585 409.36115,371.24677 L 401.40399,390.87257 C 401.30871,390.86656 401.21966,390.84446 401.12282,390.84446 L 283.14307,390.84446 C 282.08274,390.89154 281.02676,390.83811 279.96583,390.90069 C 278.6876,391.28367 277.9485,392.63205 278.33503,393.90923 C 278.69637,395.33894 278.82077,396.67603 279.57219,397.98622 L 296.18945,452.8991 C 296.0874,454.81012 295.94267,456.21692 298.01707,456.21693 L 298.49506,456.21693 C 298.83061,456.29065 299.18112,456.26847 299.5354,456.18881 L 381.18773,455.3453 C 382.13888,455.3453 382.2275,455.17977 381.97501,454.83919 C 382.60855,454.63915 383.17089,454.20146 383.46522,453.5458 L 409.41739,395.73685 C 409.52183,395.50418 409.55825,395.24557 409.58609,395.0058 L 415.6594,381.48143 L 421.14226,387.27357 C 421.68872,388.4909 423.10065,389.02568 424.3195,388.48261 C 425.53835,387.93951 427.28404,381.88338 426.73758,380.66603 C 422.80088,377.57775 420.68318,372.11562 416.3061,369.72844 C 415.38363,369.13624 414.2302,368.49254 413.01639,368.49129 z M 290.22861,399.78572 L 396.96147,399.78572 L 392.01284,412.0167 C 391.43925,411.74953 390.80566,411.59494 390.12899,411.59494 L 293.3215,411.59494 L 290.22861,399.78572 z M 295.68334,420.50809 L 388.55443,420.50809 L 384.92731,429.44936 L 298.04518,429.44936 L 295.68334,420.50809 z M 300.37891,438.36251 L 381.18773,438.36251 C 381.22523,438.36251 381.28861,438.36342 381.32831,438.36251 L 377.84178,446.91014 C 377.79792,447.00785 377.80137,447.14887 377.78555,447.30378 L 302.74076,447.30378 L 300.37891,438.36251 z M 311.76638,457.51032 C 305.03318,457.51032 299.56351,463.11325 299.56351,470.02247 C 299.56351,476.93168 305.03319,482.53463 311.76638,482.53462 C 318.49955,482.53462 323.94112,476.93168 323.94112,470.02247 C 323.94112,463.11326 318.49956,457.51033 311.76638,457.51032 z M 365.32963,457.51032 C 358.59646,457.51032 353.12676,463.11325 353.12677,470.02247 C 353.12677,476.93168 358.59645,482.53463 365.32963,482.53462 C 372.06282,482.53462 377.5325,476.93168 377.53249,470.02247 C 377.53249,463.11326 372.06281,457.51033 365.32963,457.51032 z" + id="rect3280" + sodipodi:nodetypes="cccccccccccccccccccsccccccccccccccccccccccsssccsssc" /> + <path + style="fill:url(#radialGradient3412);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + d="M 413.03125,370.5 C 411.77315,370.49868 410.47683,373.17908 409.375,375.25 L 408.3125,378.1875 C 410.61719,378.70158 412.86029,379.34607 415.03125,380.125 L 415.15625,379.875 L 415.5625,380.34375 C 418.92891,381.59244 422.12069,383.14437 425.09375,385.03125 C 425.71232,383.46486 426.13509,381.56238 425.8125,380.84375 L 419.21875,374.40625 C 419.08864,373.79201 418.71166,373.22898 418.15625,372.875 C 417.55733,372.22031 416.9452,371.87131 416.3125,371.71875 C 415.39004,371.12654 414.24506,370.50125 413.03125,370.5 z M 344.96875,392.71875 L 283.15625,392.84375 C 282.96996,392.84376 282.77392,392.8843 282.59375,392.90625 C 280.62231,392.53124 281.02854,393.08588 280.34375,393.90625 C 280.70446,395.33832 280.89151,396.6539 281.5625,398 L 298.1875,450.90625 C 298.13112,451.96201 298.07605,452.84172 298.375,453.4375 C 299.35403,450.22872 300.49819,447.02444 301.84375,443.84375 L 300.375,438.375 L 304.34375,438.375 C 305.82634,435.36561 307.45324,432.3644 309.25,429.4375 L 298.03125,429.4375 L 295.6875,420.5 L 315.375,420.5 C 317.67378,417.44544 320.14181,414.4639 322.78125,411.59375 L 293.3125,411.59375 L 290.21875,399.78125 L 335.34375,399.78125 C 337.28188,398.20835 339.28782,396.67991 341.34375,395.21875 C 342.55557,394.3575 343.74613,393.51919 344.96875,392.71875 z" + id="path2409" + sodipodi:nodetypes="ccccccccccccccccccccccccccccccsc" /> + <path + style="opacity:0.5;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + d="M 416.16323,378.67089 C 413.56836,378.8104 411.89271,381.84582 409.94765,384.53431 C 406.5873,389.17902 393.07528,426.66072 385.93242,430.94643 C 379.7842,434.63536 385.16665,433.33082 374.74492,438.35268 L 380.68242,438.35268 C 380.71992,438.35268 380.79897,438.35359 380.83867,438.35268 L 377.33867,446.91518 C 377.29481,447.01292 377.29199,447.13527 377.27617,447.29018 L 352.74492,447.29018 C 339.85069,451.40684 328.7717,453.07143 324.15117,453.07143 C 322.59828,453.07142 320.17321,453.44999 317.40117,454.00893 L 378.68242,453.35268 C 379.63357,453.35269 379.71616,453.19326 379.46367,452.85268 C 380.09721,452.65264 380.66934,452.19584 380.96367,451.54018 L 406.90117,395.72768 C 407.00561,395.49502 407.37333,395.15495 407.40117,394.91518 L 415.59819,380.26274 L 421.2519,386.25893 C 421.79835,387.47626 422.6268,388.40146 423.84565,387.85839 C 424.7011,387.47722 425.4913,384.9974 425.8125,383.17026 C 425.76735,383.01328 425.79578,382.90192 425.875,382.79526 C 425.91901,382.45857 426.3008,382.21175 426.28505,381.95214 C 425.81324,381.58177 423.78867,380.46607 421.27617,379.50893 C 418.46367,378.4375 417.72015,378.58718 416.16323,378.67089 z" + id="path2411" + sodipodi:nodetypes="cssccccccsccccccccscccsc" /> + <path + style="fill:url(#radialGradient3408);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + d="M 311.625,458.59375 C 305.56446,458.59374 300.625,463.62478 300.625,469.84375 C 300.62499,474.73825 303.68408,478.88494 307.9375,480.4375 C 306.06909,478.41848 304.90625,475.68938 304.90625,472.6875 C 304.90625,466.46853 309.84571,461.43749 315.90625,461.4375 C 317.19282,461.4375 318.41645,461.6762 319.5625,462.09375 C 317.56694,459.93281 314.75779,458.59376 311.625,458.59375 z" + id="path3196" /> + <path + style="fill:url(#radialGradient3405);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + d="M 413.00446,371.20089 C 411.74636,371.19959 410.45004,373.87997 409.34821,375.95089 L 403.34821,392.45089 C 403.84132,392.93115 404.27373,393.49259 404.59821,394.10714 C 406.00381,384.07022 412.01611,376.3216 419.44196,375.32589 L 419.22321,375.10714 C 419.0931,374.4929 418.71612,373.96112 418.16071,373.60714 C 417.56178,372.95245 416.94966,372.60345 416.31696,372.45089 C 415.39449,371.8587 414.21827,371.20214 413.00446,371.20089 z" + id="path3198" /> + <path + id="path3229" + d="M 365.19643,458.59375 C 359.13589,458.59374 354.19643,463.62478 354.19643,469.84375 C 354.19642,474.73825 357.25551,478.88494 361.50893,480.4375 C 359.64052,478.41848 358.47768,475.68938 358.47768,472.6875 C 358.47768,466.46853 363.41714,461.43749 369.47768,461.4375 C 370.76425,461.4375 371.98788,461.6762 373.13393,462.09375 C 371.13837,459.93281 368.32922,458.59376 365.19643,458.59375 z" + style="fill:url(#radialGradient3402);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + </g> + </g> +</svg> diff --git a/images/user_group.png b/images/user_group.png new file mode 100644 index 0000000000000000000000000000000000000000..f39f06a84532ac4d5d2f4428c121c5fc3d8ce094 Binary files /dev/null and b/images/user_group.png differ diff --git a/images/vm_buyer_groups_logo.png b/images/vm_buyer_groups_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..db85283aa38cf2af850251b55bea169496a2b0fa Binary files /dev/null and b/images/vm_buyer_groups_logo.png differ diff --git a/releases/plg_opentools_vm2_buyer_assign_group_v1.2.zip b/releases/plg_opentools_vm2_buyer_assign_group_v1.2.zip new file mode 100644 index 0000000000000000000000000000000000000000..1caf393933f6cec70a6aa82da7e85b9575d0e684 Binary files /dev/null and b/releases/plg_opentools_vm2_buyer_assign_group_v1.2.zip differ