Skip to content

Commit

Permalink
perf:(products) products uom related to uomCode (#4502)
Browse files Browse the repository at this point in the history
BREAKING CHANGE: must run plugin-product-api/src/command/migrateUom.js
  • Loading branch information
munkhsaikhan committed Jun 20, 2023
1 parent a36aa5e commit 08c37ad
Show file tree
Hide file tree
Showing 59 changed files with 457 additions and 967 deletions.
Expand Up @@ -27,7 +27,6 @@ import {
KEY_LABELS,
LANGUAGES,
LOG_RETENTION_DURATION,
MEASUREMENTS,
SERVICE_TYPES
} from '@erxes/ui-settings/src/general/constants';
import { IConfigsMap } from '@erxes/ui-settings/src/general/types';
Expand Down Expand Up @@ -274,15 +273,6 @@ class GeneralSettings extends React.Component<Props, State> {
/>
</FormGroup>

<FormGroup>
<ControlLabel>Unit of measurement</ControlLabel>
<Select
options={MEASUREMENTS}
value={configsMap.dealUOM}
onChange={this.onChangeMultiCombo.bind(this, 'dealUOM')}
multi={true}
/>
</FormGroup>
<FormGroup>
<ControlLabel>
{__('Team members who can access every branches')}
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/data/resolvers/mutations/configs.ts
Expand Up @@ -45,7 +45,7 @@ const configMutations = {
}

if (
['dealUOM', 'dealCurrency'].includes(code) &&
['dealCurrency'].includes(code) &&
(prevConfig.value || '').toString() !==
(updatedConfig.value || '').toString()
) {
Expand Down
Expand Up @@ -9,37 +9,60 @@ import {
sendProductsMessage
} from '../../../messageBroker';

export const generateProducts = async (subdomain: string, productsData) => {
export const generateProducts = async (
subdomain: string,
productsData?: any[]
) => {
const products: any = [];

if (!productsData || !productsData.length) {
return products;
}

const productIds = productsData
.filter(pd => pd.productId)
.map(pd => pd.productId);

const allProducts = await sendProductsMessage({
subdomain,
action: 'find',
data: { query: { _id: { $in: productIds } }, limit: productsData.length },
isRPC: true,
defaultValue: []
});

for (const data of productsData || []) {
if (!data.productId) {
continue;
}
const product = allProducts.find(p => p._id === data.productId);

const product =
(await sendProductsMessage({
subdomain,
action: 'findOne',
data: { _id: data.productId },
isRPC: true
})) || {};
if (!product) {
continue;
}

const { customFieldsData } = product;

const customFields: any[] = [];

const fieldIds: string[] = [];
for (const customFieldData of customFieldsData || []) {
const field = await sendFormsMessage({
subdomain,
action: 'fields.findOne',
data: {
query: {
_id: customFieldData.field
}
},
isRPC: true
});
fieldIds.push(customFieldData.field);
}

const fields = await sendFormsMessage({
subdomain,
action: 'fields.find',
data: {
query: {
_id: { $in: fieldIds }
}
},
isRPC: true
});

for (const customFieldData of customFieldsData || []) {
const field = fields.find(f => f._id === customFieldData.field);

if (field) {
customFields[customFieldData.field] = {
Expand Down
Expand Up @@ -9,36 +9,60 @@ import {
sendProductsMessage
} from '../../../messageBroker';

export const generateProducts = async (subdomain: string, productsData) => {
export const generateProducts = async (
subdomain: string,
productsData?: any[]
) => {
const products: any = [];

if (!productsData || !productsData.length) {
return products;
}

const productIds = productsData
.filter(pd => pd.productId)
.map(pd => pd.productId);

const allProducts = await sendProductsMessage({
subdomain,
action: 'find',
data: { query: { _id: { $in: productIds } }, limit: productsData.length },
isRPC: true,
defaultValue: []
});

for (const data of productsData || []) {
if (!data.productId) {
continue;
}
const product =
(await sendProductsMessage({
subdomain,
action: 'findOne',
data: { _id: data.productId },
isRPC: true
})) || {};
const product = allProducts.find(p => p._id === data.productId);

if (!product) {
continue;
}

const { customFieldsData } = product;

const customFields: any[] = [];

const fieldIds: string[] = [];
for (const customFieldData of customFieldsData || []) {
const field = await sendFormsMessage({
subdomain,
action: 'fields.findOne',
data: {
query: {
_id: customFieldData.field
}
},
isRPC: true
});
fieldIds.push(customFieldData.field);
}

const fields = await sendFormsMessage({
subdomain,
action: 'fields.find',
data: {
query: {
_id: { $in: fieldIds }
}
},
isRPC: true
});

for (const customFieldData of customFieldsData || []) {
const field = fields.find(f => f._id === customFieldData.field);

if (field) {
customFields[customFieldData.field] = {
Expand Down
37 changes: 0 additions & 37 deletions packages/plugin-cards-api/src/graphql/resolvers/mutations/deals.ts
Expand Up @@ -114,43 +114,6 @@ const dealMutations = {
doc: IItemDragCommonFields,
{ user, models, subdomain }: IContext
) {
const deal = await models.Deals.getDeal(doc.itemId);

if (deal.productsData) {
const productsData = deal.productsData;

const stage = await models.Stages.getStage(doc.destinationStageId);
const prevStage = await models.Stages.getStage(doc.sourceStageId);

const productIds = productsData.map(p => p.productId);

if (stage.probability === 'Won' || prevStage.probability === 'Won') {
const products = await sendProductsMessage({
subdomain,
action: 'find',
data: {
query: {
_id: { $in: productIds },
supply: { $ne: 'unlimited' }
}
},
isRPC: true,
defaultValue: []
});

const multiplier = stage.probability === 'Won' ? -1 : 1;

await sendProductsMessage({
subdomain,
action: 'update',
data: {
selector: { _id: { $in: products.map(p => p._id) } },
modifier: { $inc: { productCount: multiplier } }
}
});
}
}

return itemsChange(
models,
subdomain,
Expand Down
Expand Up @@ -228,42 +228,6 @@ const purchaseMutations = {
doc: IItemDragCommonFields,
{ user, models, subdomain }: IContext
) {
const purchase = await models.Purchases.getPurchase(doc.itemId);

if (purchase.productsData) {
const productsData = purchase.productsData;
const stage = await models.Stages.getStage(doc.destinationStageId);
const prevStage = await models.Stages.getStage(doc.sourceStageId);

const productIds = productsData.map(p => p.productId);

if (stage.probability === 'Won' || prevStage.probability === 'Won') {
const products = await sendProductsMessage({
subdomain,
action: 'find',
data: {
query: {
_id: { $in: productIds },
supply: { $ne: 'unlimited' }
}
},
isRPC: true,
defaultValue: []
});

const multiplier = stage.probability === 'Won' ? -1 : 1;

await sendProductsMessage({
subdomain,
action: 'update',
data: {
selector: { _id: { $in: products.map(p => p._id) } },
modifier: { $inc: { productCount: multiplier } }
}
});
}
}

return itemsChange(
models,
subdomain,
Expand Down
31 changes: 0 additions & 31 deletions packages/plugin-cards-api/src/models/definitions/constants.ts
@@ -1,34 +1,3 @@
export const PRODUCT_TYPES = {
PRODUCT: 'product',
SERVICE: 'service',
ALL: ['product', 'service']
};

export const PRODUCT_STATUSES = {
ACTIVE: 'active',
DELETED: 'deleted',
ALL: ['active', 'deleted']
};

export const PRODUCT_TEMPLATE_STATUSES = {
ACTIVE: 'active',
ARCHIVED: 'archived',
ALL: ['active', 'archived']
};
export const PRODUCT_CATEGORY_STATUSES = {
ACTIVE: 'active',
DISABLED: 'disabled',
ARCHIVED: 'archived',
ALL: ['active', 'disabled', 'archived']
};

export const PRODUCT_SUPPLY = {
UNIQUE: 'unique',
LIMITED: 'limited',
UNLIMITED: 'unlimited',
ALL: ['unique', 'limited', 'unlimited']
};

export const VISIBLITIES = {
PUBLIC: 'public',
PRIVATE: 'private',
Expand Down

0 comments on commit 08c37ad

Please sign in to comment.