Skip to content

Commit

Permalink
add commission to order details
Browse files Browse the repository at this point in the history
  • Loading branch information
bahram1249 committed May 28, 2024
1 parent 60dfd96 commit 74c9b35
Show file tree
Hide file tree
Showing 6 changed files with 159 additions and 0 deletions.
4 changes: 4 additions & 0 deletions apps/e-commerce/src/user/payment/payment.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import {
import { InventoryModule } from '@rahino/ecommerce/inventory/inventory.module';
import { ECDiscount } from '@rahino/database/models/ecommerce-eav/ec-discount.entity';
import { ProductModule } from '@rahino/ecommerce/product/product.module';
import { ECInventoryPrice } from '@rahino/database/models/ecommerce-eav/ec-inventory-price.entity';
import { ECVendorCommission } from '@rahino/database/models/ecommerce-eav/ec-vendor-commision.entity';

@Module({
imports: [
Expand All @@ -34,6 +36,8 @@ import { ProductModule } from '@rahino/ecommerce/product/product.module';
ECOrderDetail,
ECStock,
ECDiscount,
ECInventoryPrice,
ECVendorCommission,
]),
PaymentServiceProviderModule,
SequelizeModule,
Expand Down
46 changes: 46 additions & 0 deletions apps/e-commerce/src/user/payment/payment.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import {
OrderShipmentwayEnum,
OrderStatusEnum,
PaymentTypeEnum,
VendorCommissionTypeEnum,
} from '@rahino/ecommerce/util/enum';
import { ECOrder } from '@rahino/database/models/ecommerce-eav/ec-order.entity';
import { ECOrderDetail } from '@rahino/database/models/ecommerce-eav/ec-order-detail.entity';
Expand All @@ -43,6 +44,8 @@ import { InjectQueue } from '@nestjs/bullmq';
import { ConfigService } from '@nestjs/config';
import { DecreaseInventoryService } from '@rahino/ecommerce/inventory/services';
import { ApplyDiscountService } from '@rahino/ecommerce/product/service';
import { ECInventoryPrice } from '@rahino/database/models/ecommerce-eav/ec-inventory-price.entity';
import { ECVendorCommission } from '@rahino/database/models/ecommerce-eav/ec-vendor-commision.entity';

@Injectable()
export class PaymentService {
Expand Down Expand Up @@ -75,6 +78,10 @@ export class PaymentService {
private readonly config: ConfigService,
private readonly decreaseInventoryService: DecreaseInventoryService,
private readonly applyDiscountService: ApplyDiscountService,
@InjectModel(ECInventoryPrice)
private readonly inventoryPriceRepository: typeof ECInventoryPrice,
@InjectModel(ECVendorCommission)
private readonly vendorCommissionRepository: typeof ECVendorCommission,
) {}

async stock(session: ECUserSession, body: StockPaymentDto, user: User) {
Expand Down Expand Up @@ -334,6 +341,43 @@ export class PaymentService {
const orderDetails: ECOrderDetail[] = [];
for (let index = 0; index < variationStock.stocks.length; index++) {
const stock = variationStock.stocks[index];
const inventoryPrice = await this.inventoryPriceRepository.findOne(
new QueryOptionsBuilder()
.filter({ id: stock.inventoryPriceId })
.transaction(transaction)
.build(),
);
const vendorCommission = await this.vendorCommissionRepository.findOne(
new QueryOptionsBuilder()
.filter({ vendorId: stock.vendorId })
.filter({ variationPriceId: inventoryPrice.variationPriceId })
.filter(
Sequelize.where(
Sequelize.fn(
'isnull',
Sequelize.col('ECVendorCommission.isDeleted'),
0,
),
{
[Op.eq]: 0,
},
),
)
.transaction(transaction)
.build(),
);
let commissionAmount: number;
if (
vendorCommission.commissionTypeId ==
VendorCommissionTypeEnum.byPercentage
) {
commissionAmount =
(stock.totalPrice * Number(vendorCommission.amount)) / 100;
} else if (
vendorCommission.commissionTypeId == VendorCommissionTypeEnum.byAmount
) {
commissionAmount = Number(vendorCommission.amount);
}
let orderDetail = await this.orderDetailRepository.create(
{
orderId: order.id,
Expand All @@ -349,6 +393,8 @@ export class PaymentService {
discountFee: stock.discountFee,
discountId: stock.discountId,
totalPrice: stock.totalPrice,
commissionAmount: commissionAmount,
vendorCommissionId: vendorCommission.id,
userId: user.id,
},
{
Expand Down
1 change: 1 addition & 0 deletions apps/e-commerce/src/util/enum/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ export * from './payment-type.enum';
export * from './payment-status.enum';
export * from './order-detail-status.enum';
export * from './order-status.enum';
export * from './vendor-commission-type.enum';
4 changes: 4 additions & 0 deletions apps/e-commerce/src/util/enum/vendor-commission-type.enum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export enum VendorCommissionTypeEnum {
byPercentage = 1,
byAmount = 2,
}
89 changes: 89 additions & 0 deletions apps/main/src/sql/core-v1.sql
Original file line number Diff line number Diff line change
Expand Up @@ -3221,6 +3221,28 @@ END

GO

-- ec-order-details-v4
IF NOT EXISTS (SELECT 1 FROM Migrations WHERE version = 'ec-order-details-v4'
)
AND EXISTS (
SELECT 1 FROM Settings
WHERE ([key] = 'SITE_NAME' AND [value] IN ('ecommerce'))
)
BEGIN


ALTER TABLE ECOrderDetails
ADD vendorCommissionId bigint null
CONSTRAINT FK_ECOrderDetails_VendorCommissionId
FOREIGN KEY REFERENCES ECVendorCommissions(id),
commissionAmount bigint null

INSERT INTO Migrations(version, createdAt, updatedAt)
SELECT 'ec-order-details-v4', GETDATE(), GETDATE()
END

GO

-- ec-payment-status
IF NOT EXISTS (SELECT 1 FROM Migrations WHERE version = 'ec-payment-status-v1'
)
Expand Down Expand Up @@ -12287,6 +12309,73 @@ END

GO


-- ecommerce/admin/variationprices
IF NOT EXISTS ((SELECT 1 FROM Migrations WHERE version = 'CORE-Permissions-Data-v43'
))
AND EXISTS (
SELECT 1 FROM Settings WHERE 1=1
AND ([key] = 'SITE_NAME' AND [value] IN ('ecommerce'))
)
BEGIN

DECLARE @roleId int = (SELECT TOP 1 id FROM Roles WHERE static_id = 1)
DECLARE @userId bigint = (SELECT TOP 1 id FROM Users WHERE static_id = 1)

DECLARE @GroupTemp TABLE (
gorupId int
);

DECLARE @groupId int = null;

DECLARE @entityName nvarchar(256) = N'VariationPrices'
DECLARE @groupName nvarchar(256) = N'ecommerce.admin.variationprices'


DECLARE @permissionSymbolGetAll nvarchar(512) = @groupName + '.getall';
DECLARE @permissionSymbolGetOne nvarchar(512) = @groupName + '.getone';



-- permission groups
INSERT INTO PermissionGroups(permissionGroupName, [visibility], createdAt, updatedAt)
OUTPUT inserted.id INTO @GroupTemp(gorupId)
SELECT @groupName, 1, GETDATE(), GETDATE();

SELECT @groupId = gorupId FROM @GroupTemp


-- permissions


DECLARE @PermissionTemp TABLE (
permissionId int
);

INSERT INTO Permissions(permissionName ,permissionSymbol,permissionGroupId, createdAt, updatedAt)
OUTPUT inserted.id INTO @PermissionTemp(permissionId)
SELECT 'GETALL_' + @entityName, @permissionSymbolGetAll, @groupId, GETDATE(), GETDATE()

INSERT INTO Permissions(permissionName ,permissionSymbol,permissionGroupId, createdAt, updatedAt)
OUTPUT inserted.id INTO @PermissionTemp(permissionId)
SELECT 'GETONE_' + @entityName, @permissionSymbolGetOne, @groupId, GETDATE(), GETDATE()


-- CRUD THIS Enity FOR super-admin
INSERT INTO RolePermissions(roleId, permissionId, createdAt, updatedAt)
SELECT @roleId, permissionId, GETDATE(), GETDATE()
FROM @PermissionTemp

DELETE FROM @PermissionTemp


INSERT INTO Migrations(version, createdAt, updatedAt)
SELECT 'CORE-Permissions-Data-v43', GETDATE(), GETDATE()
END

GO


-- period types
IF NOT EXISTS (SELECT 1 FROM Migrations WHERE version = 'PCMPeriodTypes-Data-v1'
)
Expand Down
15 changes: 15 additions & 0 deletions libs/database/src/models/ecommerce-eav/ec-order-detail.entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { ECInventoryPrice } from './ec-inventory-price.entity';
import { ECStock } from './ec-stocks.entity';
import { ECDiscount } from './ec-discount.entity';
import { User } from '../core/user.entity';
import { ECVendorCommission } from './ec-vendor-commision.entity';

@Table({ tableName: 'ECOrderDetails' })
export class ECOrderDetail extends Model {
Expand Down Expand Up @@ -147,4 +148,18 @@ export class ECOrderDetail extends Model {
allowNull: true,
})
isDeleted?: boolean;

@Column({
type: DataType.BIGINT,
allowNull: true,
})
@ForeignKey(() => ECVendorCommission)
vendorCommissionId?: bigint;
@BelongsTo(() => ECVendorCommission, {
as: 'vendorCommission',
foreignKey: 'vendorCommissionId',
})
vendorCommission?: ECVendorCommission;

commissionAmount?: bigint;
}

0 comments on commit 74c9b35

Please sign in to comment.