All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.liferay.commerce.internal.object.system.CommerceOrderItemSystemObjectDefinitionManager Maven / Gradle / Ivy

/**
 * SPDX-FileCopyrightText: (c) 2024 Liferay, Inc. https://liferay.com
 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
 */

package com.liferay.commerce.internal.object.system;

import com.liferay.commerce.model.CommerceOrderItem;
import com.liferay.commerce.model.CommerceOrderItemTable;
import com.liferay.commerce.service.CommerceOrderItemLocalService;
import com.liferay.headless.commerce.admin.order.dto.v1_0.OrderItem;
import com.liferay.headless.commerce.admin.order.resource.v1_0.OrderItemResource;
import com.liferay.object.constants.ObjectDefinitionConstants;
import com.liferay.object.field.builder.LongIntegerObjectFieldBuilder;
import com.liferay.object.field.builder.PrecisionDecimalObjectFieldBuilder;
import com.liferay.object.field.builder.TextObjectFieldBuilder;
import com.liferay.object.model.ObjectField;
import com.liferay.object.system.BaseSystemObjectDefinitionManager;
import com.liferay.object.system.JaxRsApplicationDescriptor;
import com.liferay.object.system.SystemObjectDefinitionManager;
import com.liferay.petra.sql.dsl.Column;
import com.liferay.petra.sql.dsl.Table;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.json.JSONUtil;
import com.liferay.portal.kernel.model.BaseModel;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.search.Sort;
import com.liferay.portal.kernel.search.filter.Filter;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.HashMapBuilder;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.vulcan.pagination.Page;
import com.liferay.portal.vulcan.pagination.Pagination;

import java.math.BigDecimal;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

/**
 * @author Crescenzo Rega
 */
@Component(service = SystemObjectDefinitionManager.class)
public class CommerceOrderItemSystemObjectDefinitionManager
	extends BaseSystemObjectDefinitionManager {

	@Override
	public long addBaseModel(User user, Map values)
		throws Exception {

		OrderItemResource orderItemResource = _buildOrderItemResource(
			false, user);

		OrderItem orderItem = orderItemResource.postOrderIdOrderItem(
			GetterUtil.getLong(values.get("orderId")), _toOrderItem(values));

		setExtendedProperties(
			OrderItem.class.getName(), orderItem, user, values);

		return orderItem.getId();
	}

	@Override
	public BaseModel deleteBaseModel(BaseModel baseModel)
		throws PortalException {

		return _commerceOrderItemLocalService.deleteCommerceOrderItem(
			(CommerceOrderItem)baseModel);
	}

	@Override
	public BaseModel fetchBaseModelByExternalReferenceCode(
		String externalReferenceCode, long companyId) {

		return _commerceOrderItemLocalService.
			fetchCommerceOrderItemByExternalReferenceCode(
				externalReferenceCode, companyId);
	}

	@Override
	public BaseModel getBaseModelByExternalReferenceCode(
			String externalReferenceCode, long companyId)
		throws PortalException {

		return _commerceOrderItemLocalService.
			getCommerceOrderItemByExternalReferenceCode(
				externalReferenceCode, companyId);
	}

	@Override
	public String getBaseModelExternalReferenceCode(long primaryKey)
		throws PortalException {

		CommerceOrderItem commerceOrderItem =
			_commerceOrderItemLocalService.getCommerceOrderItem(primaryKey);

		return commerceOrderItem.getExternalReferenceCode();
	}

	@Override
	public String getExternalReferenceCode() {
		return "L_COMMERCE_ORDER_ITEM";
	}

	@Override
	public JaxRsApplicationDescriptor getJaxRsApplicationDescriptor() {
		return new JaxRsApplicationDescriptor(
			"Liferay.Headless.Commerce.Admin.Order",
			"headless-commerce-admin-order", "orderItems", "v1.0");
	}

	@Override
	public Map getLabelKeys() {
		return HashMapBuilder.put(
			"label", "commerce-order-item"
		).put(
			"pluralLabel", "commerce-order-items"
		).build();
	}

	@Override
	public Class getModelClass() {
		return CommerceOrderItem.class;
	}

	@Override
	public List getObjectFields() {
		return Arrays.asList(
			new LongIntegerObjectFieldBuilder(
			).dbColumnName(
				"orderId"
			).labelMap(
				createLabelMap("order-id")
			).name(
				"orderId"
			).system(
				true
			).build(),
			new TextObjectFieldBuilder(
			).labelMap(
				createLabelMap("sku")
			).name(
				"sku"
			).required(
				true
			).system(
				true
			).build(),
			new TextObjectFieldBuilder(
			).labelMap(
				createLabelMap("name")
			).name(
				"name"
			).required(
				true
			).system(
				true
			).build(),
			new TextObjectFieldBuilder(
			).labelMap(
				createLabelMap("unit-of-measure")
			).name(
				"unitOfMeasureKey"
			).required(
				true
			).system(
				true
			).build(),
			new PrecisionDecimalObjectFieldBuilder(
			).labelMap(
				createLabelMap("unit-price")
			).name(
				"unitPrice"
			).required(
				true
			).system(
				true
			).build());
	}

	@Override
	public Page getPage(
			User user, String search, Filter filter, Pagination pagination,
			Sort[] sorts)
		throws Exception {

		OrderItemResource orderItemResource = _buildOrderItemResource(
			true, user);

		return orderItemResource.getOrderItemsPage(
			search, filter, pagination, sorts);
	}

	@Override
	public Column getPrimaryKeyColumn() {
		return CommerceOrderItemTable.INSTANCE.commerceOrderItemId;
	}

	@Override
	public String getScope() {
		return ObjectDefinitionConstants.SCOPE_COMPANY;
	}

	@Override
	public Table getTable() {
		return CommerceOrderItemTable.INSTANCE;
	}

	@Override
	public int getVersion() {
		return 4;
	}

	@Override
	public void updateBaseModel(
			long primaryKey, User user, Map values)
		throws Exception {

		OrderItemResource orderItemResource = _buildOrderItemResource(
			false, user);

		orderItemResource.patchOrderItem(primaryKey, _toOrderItem(values));

		setExtendedProperties(
			OrderItem.class.getName(), JSONUtil.put("id", primaryKey), user,
			values);
	}

	private OrderItemResource _buildOrderItemResource(
		boolean checkPermissions, User user) {

		OrderItemResource.Builder builder = _orderItemResourceFactory.create();

		return builder.checkPermissions(
			checkPermissions
		).preferredLocale(
			user.getLocale()
		).user(
			user
		).build();
	}

	private OrderItem _toOrderItem(Map values) {
		return new OrderItem() {
			{
				setName(() -> getLanguageIdMap("name", values));
				setOrderId(() -> GetterUtil.getLong(values.get("orderId")));
				setSku(() -> GetterUtil.getString(values.get("sku")));
				setUnitOfMeasure(
					() -> GetterUtil.getString(values.get("unitOfMeasureKey")));
				setUnitPrice(
					() -> {
						String unitPriceString = GetterUtil.getString(
							values.get("unitPrice"));

						if (Validator.isNull(unitPriceString)) {
							return null;
						}

						return new BigDecimal(unitPriceString);
					});
			}
		};
	}

	@Reference
	private CommerceOrderItemLocalService _commerceOrderItemLocalService;

	@Reference
	private OrderItemResource.Factory _orderItemResourceFactory;

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy