Skip to content

Commit

Permalink
Merge pull request #1013 from ever-co/feat#841/inventory
Browse files Browse the repository at this point in the history
Feat#841/inventory
  • Loading branch information
evereq committed Apr 15, 2020
2 parents ad54902 + 0feb612 commit cd52324
Show file tree
Hide file tree
Showing 47 changed files with 1,482 additions and 0 deletions.
18 changes: 18 additions & 0 deletions apps/api/src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ import { ExpenseCategoriesModule } from './expense-categories/expense-categories
import { UpworkModule } from './upwork/upwork.module';
import { HubstaffModule } from './hubstaff/hubstaff.module';
import { CandidateModule } from './candidate/candidate.module';
import { ProductCategoriesModule } from './product-category/product-category-module';
import { ProductTypesModule } from './product-type/product-type-module';
import { ProductModule } from './product/product.module';
import { IntegrationSettingModule } from './integration-setting/integration-setting.module';
import { IntegrationModule } from './integration/integration.module';
import { IntegrationMapModule } from './integration-map/integration-map.module';
Expand Down Expand Up @@ -182,6 +185,18 @@ import { IntegrationMapModule } from './integration-map/integration-map.module';
{
path: '/invoice-item',
module: InvoiceItemModule
},
{
path: '/products',
module: ProductModule
},
{
path: '/product-categories',
module: ProductCategoriesModule
},
{
path: '/product-types',
module: ProductTypesModule
}
]
}
Expand Down Expand Up @@ -241,6 +256,9 @@ import { IntegrationMapModule } from './integration-map/integration-map.module';
UpworkModule,
HubstaffModule,
ExpenseCategoriesModule,
ProductCategoriesModule,
ProductTypesModule,
ProductModule,
IntegrationSettingModule,
IntegrationModule,
IntegrationMapModule
Expand Down
14 changes: 14 additions & 0 deletions apps/api/src/app/core/core.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,13 @@ import { Screenshot } from '../timesheet/screenshot.entity';
import { TimeLog } from '../timesheet/time-log.entity';
import { ExpenseCategory } from '../expense-categories/expense-category.entity';
import { EquipmentSharing } from '../equipment-sharing/equipment-sharing.entity';
import { Product } from '../product/product.entity';
import { ProductOption } from '../product-option/product-option.entity';
import { ProductVariantSettings } from '../product-settings/product-settings.entity';
import { ProductType } from '../product-type/product-type.entity';
import { ProductVariant } from '../product-variant/product-variant.entity';
import { ProductVariantPrice } from '../product-variant-price/product-variant-price.entity';
import { ProductCategory } from '../product-category/product-category.entity';
import { CandidateSource } from '../candidate_source/candidate_source.entity';
import { IntegrationSetting } from '../integration-setting/integration-setting.entity';
import { Integration } from '../integration/integration.entity';
Expand Down Expand Up @@ -94,6 +101,13 @@ const entities = [
Activity,
Screenshot,
ExpenseCategory,
ProductVariantPrice,
ProductOption,
ProductVariantSettings,
ProductType,
ProductCategory,
ProductVariant,
Product,
CandidateSource,
IntegrationSetting,
Integration,
Expand Down
10 changes: 10 additions & 0 deletions apps/api/src/app/core/seeds/SeedDataService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,10 @@ import { createCandidateSources } from '../../candidate_source/candidate_source.
import { CandidateSource } from '../../candidate_source/candidate_source.entity';
import { Tag } from './../../tags/tag.entity';
import { Tenant } from './../../tenant/tenant.entity';
import { ProductCategory } from '../../product-category/product-category.entity';
import { createProductCategories } from '../../product-category/product-category.seed';
import { ProductType } from '../../product-type/product-type.entity';
import { createProductTypes } from '../../product-type/product-type.seed';

const allEntities = [
TimeOffPolicy,
Expand Down Expand Up @@ -110,6 +114,8 @@ const allEntities = [
OrganizationEmploymentType,
Equipment,
EmployeeLevel,
ProductCategory,
ProductType,
CandidateSource
];

Expand Down Expand Up @@ -293,6 +299,10 @@ export class SeedDataService {
employees: [...employees.defaultEmployees]
});

await createProductCategories(this.connection, defaultOrganization);

await createProductTypes(this.connection, defaultOrganization);

this.log(
chalk.green(
`✅ SEEDED ${env.production ? 'PRODUCTION' : ''} DATABASE`
Expand Down
12 changes: 12 additions & 0 deletions apps/api/src/app/product-category/product-category-module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ProductCategory } from './product-category.entity';
import { ProductCategoryService } from './product-category.service';
import { ProductCategoryController } from './product-category.controller';

@Module({
imports: [TypeOrmModule.forFeature([ProductCategory])],
controllers: [ProductCategoryController],
providers: [ProductCategoryService]
})
export class ProductCategoriesModule {}
37 changes: 37 additions & 0 deletions apps/api/src/app/product-category/product-category.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';
import { Controller, Get, HttpStatus, Query } from '@nestjs/common';
import { CrudController, IPagination } from '../core';
import { ProductCategory } from './product-category.entity';
import { ProductCategoryService } from './product-category.service';

@ApiTags('Product-Categories')
// @UseGuards(AuthGuard('jwt'))
@Controller()
export class ProductCategoryController extends CrudController<ProductCategory> {
constructor(
private readonly productCategoriesService: ProductCategoryService
) {
super(productCategoriesService);
}

@ApiOperation({
summary: 'Find all product categories.'
})
@ApiResponse({
status: HttpStatus.OK,
description: 'Found product categories.',
type: ProductCategory
})
@ApiResponse({
status: HttpStatus.NOT_FOUND,
description: 'Record not found'
})
@Get()
async findAllProductCategories(
@Query('findInput') findInput: string
): Promise<IPagination<ProductCategory>> {
return this.productCategoriesService.findAll({
where: findInput
});
}
}
26 changes: 26 additions & 0 deletions apps/api/src/app/product-category/product-category.entity.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { Entity, Column, OneToMany } from 'typeorm';
import { Base } from '../core/entities/base';
import { ProductCategory as IProductCategory } from '@gauzy/models';
import { ApiProperty } from '@nestjs/swagger';
import { IsString, IsNotEmpty } from 'class-validator';
import { Product } from '../product/product.entity';

@Entity('product_category')
export class ProductCategory extends Base implements IProductCategory {
@ApiProperty({ type: String })
@IsString()
@Column()
name: string;

@ApiProperty({ type: String })
@IsString()
@IsNotEmpty()
@Column()
organizationId: string;

@OneToMany(
(type) => Product,
(product) => product.category
)
products: Product[];
}
38 changes: 38 additions & 0 deletions apps/api/src/app/product-category/product-category.seed.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { Connection } from 'typeorm';
import { Organization } from '@gauzy/models';
import { ProductCategory } from './product-category.entity';

export const createProductCategories = async (
connection: Connection,
organization: Organization
): Promise<ProductCategory[]> => {
const productCategories = [];

const productCategory1 = new ProductCategory();
productCategory1.name = 'product category 1';
productCategory1.organizationId = organization.id;
productCategories.push(productCategory1);

const productCategory2 = new ProductCategory();
productCategory2.name = 'product category 2';
productCategory2.organizationId = organization.id;
productCategories.push(productCategory2);

const productCategory3 = new ProductCategory();
productCategory3.name = 'product category 3';
productCategory3.organizationId = organization.id;
productCategories.push(productCategory3);

insertProductCategory(connection, productCategory1);
insertProductCategory(connection, productCategory2);
insertProductCategory(connection, productCategory3);

return productCategories;
};

const insertProductCategory = async (
connection: Connection,
category: ProductCategory
): Promise<void> => {
await connection.manager.save(category);
};
15 changes: 15 additions & 0 deletions apps/api/src/app/product-category/product-category.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { CrudService } from '../core';
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { ProductCategory } from './product-category.entity';
import { Repository } from 'typeorm';

@Injectable()
export class ProductCategoryService extends CrudService<ProductCategory> {
constructor(
@InjectRepository(ProductCategory)
private readonly productCategoryRepository: Repository<ProductCategory>
) {
super(productCategoryRepository);
}
}
22 changes: 22 additions & 0 deletions apps/api/src/app/product-option/product-option.entity.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { Entity, Column } from 'typeorm';
import { Base } from '../core/entities/base';
import { ProductOption as IProductOption } from '@gauzy/models';
import { ApiProperty } from '@nestjs/swagger';
import { IsString } from 'class-validator';
import { Product } from '../product/product.entity';

@Entity('product_option')
export class ProductOption extends Base implements IProductOption {
@ApiProperty({ type: String })
@IsString()
@Column()
name: string;

@ApiProperty({ type: String })
@IsString()
@Column()
code: string;

// @ManyToOne(()=> Product, product => product.options)
product: Product;
}
40 changes: 40 additions & 0 deletions apps/api/src/app/product-settings/product-settings.entity.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { Entity, Column } from 'typeorm';
import { Base } from '../core/entities/base';
import { ProductVariantSettings as IProductVariantSettings } from '@gauzy/models';
import { ApiPropertyOptional } from '@nestjs/swagger';

@Entity('product_variant_settings')
export class ProductVariantSettings extends Base
implements IProductVariantSettings {
@ApiPropertyOptional({ type: Boolean })
@Column({ default: false })
isSubscription: boolean;

@ApiPropertyOptional({ type: Boolean })
@Column({ default: false })
isPurchaseAutomatically: boolean;

@ApiPropertyOptional({ type: Boolean })
@Column({ default: true })
canBeSold: boolean;

@ApiPropertyOptional({ type: Boolean })
@Column({ default: true })
canBePurchased: boolean;

@ApiPropertyOptional({ type: Boolean })
@Column({ default: false })
canBeCharged: boolean;

@ApiPropertyOptional({ type: Boolean })
@Column({ default: false })
canBeRented: boolean;

@ApiPropertyOptional({ type: Boolean })
@Column({ default: false })
isEquipment: boolean;

@ApiPropertyOptional({ type: Boolean })
@Column({ default: false })
trackInventory: boolean;
}
12 changes: 12 additions & 0 deletions apps/api/src/app/product-type/product-type-module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { TypeOrmModule } from '@nestjs/typeorm';
import { ProductType } from './product-type.entity';
import { Module } from '@nestjs/common';
import { ProductTypeController } from './product-type.controller';
import { ProductTypeService } from './product-type.service';

@Module({
imports: [TypeOrmModule.forFeature([ProductType])],
controllers: [ProductTypeController],
providers: [ProductTypeService]
})
export class ProductTypesModule {}
35 changes: 35 additions & 0 deletions apps/api/src/app/product-type/product-type.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import { ApiTags, ApiResponse, ApiOperation } from '@nestjs/swagger';
import { CrudController, IPagination } from '../core';
import { ProductType } from './product-type.entity';
import { Controller, HttpStatus, Get, Query } from '@nestjs/common';
import { ProductTypeService } from './product-type.service';

@ApiTags('Product-Types')
// @UseGuards(AuthGuard('jwt'))
@Controller()
export class ProductTypeController extends CrudController<ProductType> {
constructor(private readonly productTypesService: ProductTypeService) {
super(productTypesService);
}

@ApiOperation({
summary: 'Find all product types.'
})
@ApiResponse({
status: HttpStatus.OK,
description: 'Found product types.',
type: ProductType
})
@ApiResponse({
status: HttpStatus.NOT_FOUND,
description: 'Record not found'
})
@Get()
async findAllProductTypes(
@Query('findInput') findInput: string
): Promise<IPagination<ProductType>> {
return this.productTypesService.findAll({
where: findInput
});
}
}
26 changes: 26 additions & 0 deletions apps/api/src/app/product-type/product-type.entity.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { Entity, Column, OneToMany } from 'typeorm';
import { Base } from '../core/entities/base';
import { ProductType as IProductType } from '@gauzy/models';
import { ApiProperty } from '@nestjs/swagger';
import { IsString, IsNotEmpty } from 'class-validator';
import { Product } from '../product/product.entity';

@Entity('product_type')
export class ProductType extends Base implements IProductType {
@ApiProperty({ type: String })
@IsString()
@Column()
name: string;

@ApiProperty({ type: String })
@IsString()
@IsNotEmpty()
@Column()
organizationId: string;

@OneToMany(
(type) => Product,
(product) => product.type
)
products: Product[];
}

0 comments on commit cd52324

Please sign in to comment.