diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/AdvancedPricing.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/AdvancedPricing.php
index 00132c6ad89e8..f19f5abd0b423 100644
--- a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/AdvancedPricing.php
+++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/AdvancedPricing.php
@@ -149,6 +149,7 @@ public function modifyMeta(array $meta)
$this->specialPriceDataToInline();
$this->customizeTierPrice();
+ $this->customizePrice();
if (isset($this->meta['advanced-pricing'])) {
$this->addAdvancedPriceLink();
@@ -197,6 +198,29 @@ protected function preparePriceFields($fieldCode)
return $this;
}
+ /**
+ * Customize price field.
+ *
+ * @return $this
+ */
+ private function customizePrice(): AdvancedPricing
+ {
+ $pathFrom = $this->arrayManager->findPath('price', $this->meta, null, 'children');
+
+ if ($pathFrom) {
+ $this->meta = $this->arrayManager->merge(
+ $this->arrayManager->slicePath($pathFrom, 0, -2) . '/arguments/data/config',
+ $this->meta,
+ [
+ 'label' => false,
+ 'required' => false,
+ ]
+ );
+ }
+
+ return $this;
+ }
+
/**
* Customize tier price field
*
@@ -573,12 +597,11 @@ private function specialPriceDataToInline()
$this->arrayManager->slicePath($pathFrom, 0, -2) . '/arguments/data/config',
$this->meta,
[
- 'label' => __('Special Price From'),
+ 'label' => false,
+ 'required' => false,
'additionalClasses' => 'admin__control-grouped-date',
'breakLine' => false,
'component' => 'Magento_Ui/js/form/components/group',
- 'scopeLabel' =>
- $this->arrayManager->get($pathFrom . '/arguments/data/config/scopeLabel', $this->meta),
]
);
$this->meta = $this->arrayManager->merge(
@@ -586,8 +609,9 @@ private function specialPriceDataToInline()
$this->meta,
[
'label' => __('Special Price From'),
- 'scopeLabel' => null,
- 'additionalClasses' => 'admin__field-date'
+ 'scopeLabel' =>
+ $this->arrayManager->get($pathFrom . '/arguments/data/config/scopeLabel', $this->meta),
+ 'additionalClasses' => 'admin__field-date',
]
);
$this->meta = $this->arrayManager->merge(
diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Categories.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Categories.php
index c4ca5eca8e880..cd1f8e8e3379b 100644
--- a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Categories.php
+++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Categories.php
@@ -243,13 +243,14 @@ protected function customizeCategoriesField(array $meta)
'arguments' => [
'data' => [
'config' => [
- 'label' => __('Categories'),
+ 'label' => false,
+ 'required' => false,
'dataScope' => '',
'breakLine' => false,
'formElement' => 'container',
'componentType' => 'container',
'component' => 'Magento_Ui/js/form/components/group',
- 'scopeLabel' => __('[GLOBAL]'),
+ 'disabled' => $this->locator->getProduct()->isLockedAttribute($fieldCode),
],
],
],
diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Eav.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Eav.php
index acebe66f6f5a9..0f78ba6a3266a 100644
--- a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Eav.php
+++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Eav.php
@@ -861,7 +861,9 @@ public function setupAttributeContainerMeta(ProductAttributeInterface $attribute
'arguments/data/config',
$containerMeta,
[
- 'component' => 'Magento_Ui/js/form/components/group'
+ 'component' => 'Magento_Ui/js/form/components/group',
+ 'label' => false,
+ 'required' => false,
]
);
}
diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/General.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/General.php
index 7c42b881bad3e..ebc0425be0188 100644
--- a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/General.php
+++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/General.php
@@ -224,6 +224,7 @@ protected function customizeWeightField(array $meta)
'validate-zero-or-greater' => true
],
'additionalClasses' => 'admin__field-small',
+ 'sortOrder' => 0,
'addafter' => $this->locator->getStore()->getConfig('general/locale/weight_unit'),
'imports' => $disabled ? [] : [
'disabled' => '!${$.provider}:' . self::DATA_SCOPE_PRODUCT
@@ -242,6 +243,8 @@ protected function customizeWeightField(array $meta)
$containerPath . static::META_CONFIG_PATH,
$meta,
[
+ 'label' => false,
+ 'required' => false,
'component' => 'Magento_Ui/js/form/components/group',
]
);
@@ -269,6 +272,7 @@ protected function customizeWeightField(array $meta)
],
],
'value' => (int)$this->locator->getProduct()->getTypeInstance()->hasWeight(),
+ 'sortOrder' => 10,
'disabled' => $disabled,
]
);
@@ -317,7 +321,8 @@ protected function customizeNewDateRangeField(array $meta)
$fromContainerPath . self::META_CONFIG_PATH,
$meta,
[
- 'label' => __('Set Product as New From'),
+ 'label' => false,
+ 'required' => false,
'additionalClasses' => 'admin__control-grouped-date',
'breakLine' => false,
'component' => 'Magento_Ui/js/form/components/group',
diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/ScheduleDesignUpdate.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/ScheduleDesignUpdate.php
index b2f453e8d8ccb..3b01106619640 100644
--- a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/ScheduleDesignUpdate.php
+++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/ScheduleDesignUpdate.php
@@ -37,7 +37,8 @@ public function __construct(ArrayManager $arrayManager)
}
/**
- * {@inheritdoc}
+ * @inheritdoc
+ *
* @since 101.0.0
*/
public function modifyMeta(array $meta)
@@ -47,7 +48,8 @@ public function modifyMeta(array $meta)
}
/**
- * {@inheritdoc}
+ * @inheritdoc
+ *
* @since 101.0.0
*/
public function modifyData(array $data)
@@ -96,7 +98,8 @@ protected function customizeDateRangeField(array $meta)
$fromContainerPath . self::META_CONFIG_PATH,
$meta,
[
- 'label' => __('Schedule Update From'),
+ 'label' => false,
+ 'required' => false,
'additionalClasses' => 'admin__control-grouped-date',
'breakLine' => false,
'component' => 'Magento_Ui/js/form/components/group',
diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/TierPrice.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/TierPrice.php
index a529580e29239..9c5fffc5db9b9 100644
--- a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/TierPrice.php
+++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/TierPrice.php
@@ -115,7 +115,7 @@ private function getUpdatedTierPriceStructure(array $priceMeta)
'dataType' => Price::NAME,
'component' => 'Magento_Ui/js/form/components/group',
'label' => __('Price'),
- 'enableLabel' => true,
+ 'showLabel' => false,
'dataScope' => '',
'additionalClasses' => 'control-grouped',
'sortOrder' => isset($priceMeta['arguments']['data']['config']['sortOrder'])
diff --git a/app/code/Magento/Catalog/view/adminhtml/ui_component/category_form.xml b/app/code/Magento/Catalog/view/adminhtml/ui_component/category_form.xml
index 992093c4a6658..9d968ccb67fb4 100644
--- a/app/code/Magento/Catalog/view/adminhtml/ui_component/category_form.xml
+++ b/app/code/Magento/Catalog/view/adminhtml/ui_component/category_form.xml
@@ -528,10 +528,7 @@
- group
-
- admin__control-grouped-date
- - Schedule Update From
- - false
- false
- - [STORE VIEW]
@@ -541,6 +538,7 @@
string
+ [STORE VIEW]
diff --git a/app/code/Magento/CatalogInventory/Ui/DataProvider/Product/Form/Modifier/AdvancedInventory.php b/app/code/Magento/CatalogInventory/Ui/DataProvider/Product/Form/Modifier/AdvancedInventory.php
index 789befcfec8b7..1c069d77e6ce3 100644
--- a/app/code/Magento/CatalogInventory/Ui/DataProvider/Product/Form/Modifier/AdvancedInventory.php
+++ b/app/code/Magento/CatalogInventory/Ui/DataProvider/Product/Form/Modifier/AdvancedInventory.php
@@ -177,7 +177,7 @@ public function modifyMeta(array $meta)
}
/**
- * Prepare Meta
+ * Modify UI Quantity and Stock status attribute meta.
*
* @return void
*/
@@ -187,10 +187,6 @@ private function prepareMeta()
$pathField = $this->arrayManager->findPath($fieldCode, $this->meta, null, 'children');
if ($pathField) {
- $labelField = $this->arrayManager->get(
- $this->arrayManager->slicePath($pathField, 0, -2) . '/arguments/data/config/label',
- $this->meta
- );
$fieldsetPath = $this->arrayManager->slicePath($pathField, 0, -4);
$this->meta = $this->arrayManager->merge(
@@ -218,10 +214,9 @@ private function prepareMeta()
'formElement' => 'container',
'componentType' => 'container',
'component' => "Magento_Ui/js/form/components/group",
- 'label' => $labelField,
+ 'label' => false,
'breakLine' => false,
'dataScope' => $fieldCode,
- 'scopeLabel' => '[GLOBAL]',
'source' => 'product_details',
'sortOrder' => (int) $this->arrayManager->get(
$this->arrayManager->slicePath($pathField, 0, -2) . '/arguments/data/config/sortOrder',
diff --git a/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_form.xml b/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_form.xml
index b813aa5d356cb..656406fd63c1c 100644
--- a/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_form.xml
+++ b/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_form.xml
@@ -35,9 +35,7 @@
-
- container
- - Manage Stock
- stock_data
- - [GLOBAL]
@@ -117,9 +115,7 @@
-
- container
- - Out-of-Stock Threshold
- stock_data
- - [GLOBAL]
-
- ${$.provider}:data.product.stock_data.manage_stock
@@ -290,9 +286,7 @@
-
- container
- - Maximum Qty Allowed in Shopping Cart
- stock_data
- - [GLOBAL]
@@ -396,9 +390,7 @@
-
- container
- - Backorders
- stock_data
- - [GLOBAL]
-
- ${$.provider}:data.product.stock_data.manage_stock
@@ -465,9 +457,7 @@
-
- container
- - Notify for Quantity Below
- stock_data
- - [GLOBAL]
-
- ${$.provider}:data.product.stock_data.manage_stock
@@ -526,9 +516,7 @@
-
- container
- - Enable Qty Increments
- stock_data
- - [GLOBAL]
@@ -589,9 +577,7 @@
-
- container
- - Qty Increments
- stock_data
- - [GLOBAL]
-
- ${$.provider}:data.product.stock_data.enable_qty_increments
@@ -654,9 +640,7 @@
-
- container
- - Stock Status
- quantity_and_stock_status
- - [GLOBAL]
-
- ${$.provider}:data.product.stock_data.manage_stock
diff --git a/app/code/Magento/CatalogUrlRewrite/Ui/DataProvider/Product/Form/Modifier/ProductUrlRewrite.php b/app/code/Magento/CatalogUrlRewrite/Ui/DataProvider/Product/Form/Modifier/ProductUrlRewrite.php
index bcb5154e35501..10791eae5405f 100644
--- a/app/code/Magento/CatalogUrlRewrite/Ui/DataProvider/Product/Form/Modifier/ProductUrlRewrite.php
+++ b/app/code/Magento/CatalogUrlRewrite/Ui/DataProvider/Product/Form/Modifier/ProductUrlRewrite.php
@@ -53,7 +53,7 @@ public function __construct(
}
/**
- * {@inheritdoc}
+ * @inheritdoc
*/
public function modifyMeta(array $meta)
{
@@ -65,7 +65,7 @@ public function modifyMeta(array $meta)
}
/**
- * {@inheritdoc}
+ * @inheritdoc
*/
public function modifyData(array $data)
{
@@ -95,16 +95,21 @@ protected function addUrlRewriteCheckbox(array $meta)
ScopeInterface::SCOPE_STORE,
$this->locator->getProduct()->getStoreId()
);
-
- $meta = $this->arrayManager->merge($containerPath, $meta, [
- 'arguments' => [
- 'data' => [
- 'config' => [
- 'component' => 'Magento_Ui/js/form/components/group',
+ $meta = $this->arrayManager->merge(
+ $containerPath,
+ $meta,
+ [
+ 'arguments' => [
+ 'data' => [
+ 'config' => [
+ 'component' => 'Magento_Ui/js/form/components/group',
+ 'label' => false,
+ 'required' => false,
+ ],
],
],
- ],
- ]);
+ ]
+ );
$checkbox['arguments']['data']['config'] = [
'componentType' => Field::NAME,
diff --git a/app/code/Magento/Customer/view/base/ui_component/customer_form.xml b/app/code/Magento/Customer/view/base/ui_component/customer_form.xml
index 14e5abec58b08..7caaeab4f39d6 100644
--- a/app/code/Magento/Customer/view/base/ui_component/customer_form.xml
+++ b/app/code/Magento/Customer/view/base/ui_component/customer_form.xml
@@ -152,8 +152,6 @@
- group
-
-
- Group
- - true
- false
- true
@@ -166,6 +164,7 @@
+ true
number
diff --git a/app/code/Magento/GiftMessage/Ui/DataProvider/Product/Modifier/GiftMessage.php b/app/code/Magento/GiftMessage/Ui/DataProvider/Product/Modifier/GiftMessage.php
index e3d617eac1cd2..fe2479d778992 100644
--- a/app/code/Magento/GiftMessage/Ui/DataProvider/Product/Modifier/GiftMessage.php
+++ b/app/code/Magento/GiftMessage/Ui/DataProvider/Product/Modifier/GiftMessage.php
@@ -53,7 +53,7 @@ public function __construct(
}
/**
- * {@inheritdoc}
+ * @inheritdoc
*/
public function modifyData(array $data)
{
@@ -73,7 +73,7 @@ public function modifyData(array $data)
}
/**
- * {@inheritdoc}
+ * @inheritdoc
*/
public function modifyMeta(array $meta)
{
@@ -101,24 +101,28 @@ protected function customizeAllowGiftMessageField(array $meta)
'children'
);
$fieldPath = $this->arrayManager->findPath(static::FIELD_MESSAGE_AVAILABLE, $meta, null, 'children');
- $groupConfig = $this->arrayManager->get($containerPath, $meta);
$fieldConfig = $this->arrayManager->get($fieldPath, $meta);
- $meta = $this->arrayManager->merge($containerPath, $meta, [
- 'arguments' => [
- 'data' => [
- 'config' => [
- 'formElement' => 'container',
- 'componentType' => 'container',
- 'component' => 'Magento_Ui/js/form/components/group',
- 'label' => $groupConfig['arguments']['data']['config']['label'],
- 'breakLine' => false,
- 'sortOrder' => $fieldConfig['arguments']['data']['config']['sortOrder'],
- 'dataScope' => '',
+ $meta = $this->arrayManager->merge(
+ $containerPath,
+ $meta,
+ [
+ 'arguments' => [
+ 'data' => [
+ 'config' => [
+ 'formElement' => 'container',
+ 'componentType' => 'container',
+ 'component' => 'Magento_Ui/js/form/components/group',
+ 'label' => false,
+ 'required' => false,
+ 'breakLine' => false,
+ 'sortOrder' => $fieldConfig['arguments']['data']['config']['sortOrder'],
+ 'dataScope' => '',
+ ],
],
],
- ],
- ]);
+ ]
+ );
$meta = $this->arrayManager->merge(
$containerPath,
$meta,
diff --git a/app/code/Magento/Quote/Observer/SubmitObserver.php b/app/code/Magento/Quote/Observer/SubmitObserver.php
index 0d6613a691390..db0ba7fb77937 100644
--- a/app/code/Magento/Quote/Observer/SubmitObserver.php
+++ b/app/code/Magento/Quote/Observer/SubmitObserver.php
@@ -14,7 +14,7 @@
use Psr\Log\LoggerInterface;
/**
- * Class SubmitObserver
+ * Class responsive for sending order and invoice emails when it's created through storefront.
*/
class SubmitObserver implements ObserverInterface
{
@@ -49,7 +49,7 @@ public function __construct(
}
/**
- * Sends emails to customer.
+ * Send order and invoice email.
*
* @param Observer $observer
*
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php
index b4fa6fed6cdf5..f66ca37a47655 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php
@@ -16,6 +16,7 @@
use Magento\Sales\Model\Order\ShipmentFactory;
use Magento\Sales\Model\Order\Invoice;
use Magento\Sales\Model\Service\InvoiceService;
+use Magento\Sales\Helper\Data as SalesData;
/**
* Save invoice controller.
@@ -56,6 +57,11 @@ class Save extends \Magento\Backend\App\Action implements HttpPostActionInterfac
*/
private $invoiceService;
+ /**
+ * @var SalesData
+ */
+ private $salesData;
+
/**
* @param Action\Context $context
* @param Registry $registry
@@ -63,6 +69,7 @@ class Save extends \Magento\Backend\App\Action implements HttpPostActionInterfac
* @param ShipmentSender $shipmentSender
* @param ShipmentFactory $shipmentFactory
* @param InvoiceService $invoiceService
+ * @param SalesData $salesData
*/
public function __construct(
Action\Context $context,
@@ -70,7 +77,8 @@ public function __construct(
InvoiceSender $invoiceSender,
ShipmentSender $shipmentSender,
ShipmentFactory $shipmentFactory,
- InvoiceService $invoiceService
+ InvoiceService $invoiceService,
+ SalesData $salesData = null
) {
$this->registry = $registry;
$this->invoiceSender = $invoiceSender;
@@ -78,6 +86,7 @@ public function __construct(
$this->shipmentFactory = $shipmentFactory;
$this->invoiceService = $invoiceService;
parent::__construct($context);
+ $this->salesData = $salesData ?? $this->_objectManager->get(SalesData::class);
}
/**
@@ -204,7 +213,7 @@ public function execute()
// send invoice/shipment emails
try {
- if (!empty($data['send_email'])) {
+ if (!empty($data['send_email']) || $this->salesData->canSendNewInvoiceEmail()) {
$this->invoiceSender->send($invoice);
}
} catch (\Exception $e) {
@@ -213,7 +222,7 @@ public function execute()
}
if ($shipment) {
try {
- if (!empty($data['send_email'])) {
+ if (!empty($data['send_email']) || $this->salesData->canSendNewShipmentEmail()) {
$this->shipmentSender->send($shipment);
}
} catch (\Exception $e) {
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/forms/_fields.less b/app/design/adminhtml/Magento/backend/web/css/source/forms/_fields.less
index ddc6aa42c23eb..bfb515c700b33 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/forms/_fields.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/forms/_fields.less
@@ -550,7 +550,6 @@
& > .admin__field-label {
#mix-grid .column(@field-label-grid__column, @field-grid__columns);
cursor: pointer;
- background: @color-white;
left: 0;
position: absolute;
top: 0;
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/Invoice/SaveTest.php b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/Invoice/SaveTest.php
index 40540f3126899..2dc5f5adc86d2 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/Invoice/SaveTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/Invoice/SaveTest.php
@@ -28,7 +28,7 @@ class SaveTest extends AbstractInvoiceControllerTest
*/
public function testSendEmailOnInvoiceSave(): void
{
- $order = $this->prepareRequest(['invoice' => ['send_email' => true]]);
+ $order = $this->prepareRequest();
$this->dispatch('backend/sales/order_invoice/save');
$this->assertSessionMessages(