first version of sample.component finished
This commit is contained in:
		
							
								
								
									
										7
									
								
								src/app/models/custom-fields.model.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/app/models/custom-fields.model.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
import { CustomFieldsModel } from './custom-fields.model';
 | 
			
		||||
 | 
			
		||||
describe('CustomFieldsModel', () => {
 | 
			
		||||
  it('should create an instance', () => {
 | 
			
		||||
    expect(new CustomFieldsModel()).toBeTruthy();
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										13
									
								
								src/app/models/custom-fields.model.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/app/models/custom-fields.model.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
import {Deserializable} from './deserializable.model';
 | 
			
		||||
 | 
			
		||||
// TODO: put all deserialize methods in one place
 | 
			
		||||
 | 
			
		||||
export class CustomFieldsModel implements Deserializable{
 | 
			
		||||
  name = '';
 | 
			
		||||
  qty = 0;
 | 
			
		||||
 | 
			
		||||
  deserialize(input: any): this {
 | 
			
		||||
    Object.assign(this, input);
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								src/app/models/deserializable.model.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/app/models/deserializable.model.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
// import { DeserializableModel } from './deserializable.model';
 | 
			
		||||
//
 | 
			
		||||
// describe('DeserializableModel', () => {
 | 
			
		||||
//
 | 
			
		||||
// });
 | 
			
		||||
							
								
								
									
										3
									
								
								src/app/models/deserializable.model.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/app/models/deserializable.model.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
export interface Deserializable {
 | 
			
		||||
  deserialize(input: any): this;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								src/app/models/id.model.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/app/models/id.model.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
import { IdModel } from './id.model';
 | 
			
		||||
 | 
			
		||||
describe('IdModel', () => {
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										1
									
								
								src/app/models/id.model.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/app/models/id.model.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
export type IdModel = string | null;
 | 
			
		||||
							
								
								
									
										7
									
								
								src/app/models/material.model.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/app/models/material.model.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
import { MaterialModel } from './material.model';
 | 
			
		||||
 | 
			
		||||
describe('MaterialModel', () => {
 | 
			
		||||
  it('should create an instance', () => {
 | 
			
		||||
    expect(new MaterialModel()).toBeTruthy();
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										33
									
								
								src/app/models/material.model.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/app/models/material.model.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
			
		||||
import _ from 'lodash';
 | 
			
		||||
import {Deserializable} from './deserializable.model';
 | 
			
		||||
import {IdModel} from './id.model';
 | 
			
		||||
import {SendFormat} from './sendformat.model';
 | 
			
		||||
 | 
			
		||||
export class MaterialModel implements Deserializable, SendFormat {
 | 
			
		||||
  _id: IdModel = null;
 | 
			
		||||
  name = '';
 | 
			
		||||
  supplier = '';
 | 
			
		||||
  group = '';
 | 
			
		||||
  mineral = 0;
 | 
			
		||||
  glass_fiber = 0;
 | 
			
		||||
  carbon_fiber = 0;
 | 
			
		||||
  private numberTemplate = {color: '', number: ''};
 | 
			
		||||
  numbers: {color: string, number: string}[] = [_.cloneDeep(this.numberTemplate)];
 | 
			
		||||
 | 
			
		||||
  deserialize(input: any): this {
 | 
			
		||||
    Object.assign(this, input);
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  sendFormat() {
 | 
			
		||||
    return _.pick(this, ['name', 'supplier', 'group', 'mineral', 'glass_fiber', 'carbon_fiber', 'numbers']);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  addNumber() {
 | 
			
		||||
    this.numbers.push(_.cloneDeep(this.numberTemplate));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  popNumber() {
 | 
			
		||||
    this.numbers.pop();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										7
									
								
								src/app/models/measurement.model.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/app/models/measurement.model.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
import { MeasurementModel } from './measurement.model';
 | 
			
		||||
 | 
			
		||||
describe('MeasurementModel', () => {
 | 
			
		||||
  it('should create an instance', () => {
 | 
			
		||||
    expect(new MeasurementModel()).toBeTruthy();
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										29
									
								
								src/app/models/measurement.model.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/app/models/measurement.model.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
import _ from 'lodash';
 | 
			
		||||
import {IdModel} from './id.model';
 | 
			
		||||
import {SendFormat} from './sendformat.model';
 | 
			
		||||
import {Deserializable} from './deserializable.model';
 | 
			
		||||
 | 
			
		||||
export class MeasurementModel implements Deserializable, SendFormat{
 | 
			
		||||
  _id: IdModel = null;
 | 
			
		||||
  sample_id: IdModel = null;
 | 
			
		||||
  measurement_template: IdModel;
 | 
			
		||||
  values: {[prop: string]: any} = {};
 | 
			
		||||
 | 
			
		||||
  constructor(measurementTemplate: IdModel = null) {
 | 
			
		||||
    this.measurement_template = measurementTemplate;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  deserialize(input: any): this {
 | 
			
		||||
    Object.assign(this, input);
 | 
			
		||||
    Object.keys(this.values).forEach(key => {
 | 
			
		||||
      if (this.values[key] === null) {
 | 
			
		||||
        this.values[key] = '';
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  sendFormat(omit = []) {
 | 
			
		||||
    return _.omit(_.pick(this, ['sample_id', 'measurement_template', 'values']), omit);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										7
									
								
								src/app/models/sample.model.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/app/models/sample.model.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
import { SampleModel } from './sample.model';
 | 
			
		||||
 | 
			
		||||
describe('SampleModel', () => {
 | 
			
		||||
  it('should create an instance', () => {
 | 
			
		||||
    expect(new SampleModel()).toBeTruthy();
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										37
									
								
								src/app/models/sample.model.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/app/models/sample.model.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
import _ from 'lodash';
 | 
			
		||||
import {Deserializable} from './deserializable.model';
 | 
			
		||||
import {IdModel} from './id.model';
 | 
			
		||||
import {SendFormat} from './sendformat.model';
 | 
			
		||||
import {MaterialModel} from './material.model';
 | 
			
		||||
import {MeasurementModel} from './measurement.model';
 | 
			
		||||
 | 
			
		||||
export class SampleModel implements Deserializable, SendFormat {
 | 
			
		||||
  _id: IdModel = null;
 | 
			
		||||
  color = '';
 | 
			
		||||
  number = '';
 | 
			
		||||
  type = '';
 | 
			
		||||
  batch = '';
 | 
			
		||||
  condition: {condition_template: string, [prop: string]: string} | {} = {};
 | 
			
		||||
  material_id: IdModel = null;
 | 
			
		||||
  material: MaterialModel;
 | 
			
		||||
  measurements: MeasurementModel[];
 | 
			
		||||
  note_id: IdModel = null;
 | 
			
		||||
  user_id: IdModel = null;
 | 
			
		||||
  notes: {comment: string, sample_references: {sample_id: IdModel, relation: string}[], custom_fields: {[prop: string]: string}} = {comment: '', sample_references: [], custom_fields: {}};
 | 
			
		||||
 | 
			
		||||
  deserialize(input: any): this {
 | 
			
		||||
    Object.assign(this, input);
 | 
			
		||||
    if (input.hasOwnProperty('material')) {
 | 
			
		||||
      this.material = new MaterialModel().deserialize(input.material);
 | 
			
		||||
      this.material_id = input.material._id;
 | 
			
		||||
    }
 | 
			
		||||
    if (input.hasOwnProperty('measurements')) {
 | 
			
		||||
      this.measurements = input.measurements.map(e => new MeasurementModel().deserialize(e));
 | 
			
		||||
    }
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  sendFormat() {
 | 
			
		||||
    return _.pick(this, ['color', 'type', 'batch', 'condition', 'material_id', 'notes']);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								src/app/models/sendformat.model.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/app/models/sendformat.model.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
// import { SendformatModel } from './sendformat.model';
 | 
			
		||||
//
 | 
			
		||||
// describe('SendformatModel', () => {
 | 
			
		||||
//
 | 
			
		||||
// });
 | 
			
		||||
							
								
								
									
										3
									
								
								src/app/models/sendformat.model.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/app/models/sendformat.model.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
export interface SendFormat {
 | 
			
		||||
  sendFormat(omit?: string[]): {[prop: string]: any};
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										7
									
								
								src/app/models/template.model.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/app/models/template.model.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
import { TemplateModel } from './template.model';
 | 
			
		||||
 | 
			
		||||
describe('TemplateModel', () => {
 | 
			
		||||
  it('should create an instance', () => {
 | 
			
		||||
    expect(new TemplateModel()).toBeTruthy();
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										14
									
								
								src/app/models/template.model.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/app/models/template.model.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
import {Deserializable} from './deserializable.model';
 | 
			
		||||
import {IdModel} from './id.model';
 | 
			
		||||
 | 
			
		||||
export class TemplateModel implements Deserializable{
 | 
			
		||||
  _id: IdModel = null;
 | 
			
		||||
  name = '';
 | 
			
		||||
  version = 1;
 | 
			
		||||
  parameters: {name: string, range: {[prop: string]: any}}[] = [];
 | 
			
		||||
 | 
			
		||||
  deserialize(input: any): this {
 | 
			
		||||
    Object.assign(this, input);
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user