/** * Created by jimiz on 2017/4/1. */ let mongoose = require("mongoose"); let db = require("../db/project_db"); let subSchema = require("./bills_sub_schemas"); let Schema = mongoose.Schema; let deleteSchema = require('../../../public/models/delete_schema'); let async = require("async"); let counter = require("../../../public/counter/counter.js"); let consts = require('./project_consts'); let projectConsts = consts.projectConst; let commonConsts = consts.commonConst; let quantity_detial = require('../facade/quantity_detail_facade'); var rationAssItemSchema = mongoose.Schema({ name: String, assistID: Number, assistCode: String, stdValue: Number, actualValue:Number, stepValue: String, decimal: Number, carryBit: String, minValue: String, maxValue: String }, { _id: false }); // 定额、量价、工料机定额 合并存储 let rationSchema = new Schema({ // 公用属性部分 ID: Number, projectID: Number, billsItemID: Number, serialNo: Number, code: String, name: String, unit: String, quantity: String, contain:String,//含量 programID: Number, marketUnitFee: String, marketTotalFee: String, fees: [subSchema.feesSchema], deleteInfo: deleteSchema, type: Number, // 1 定额、2 量价、3 工料机定额 subType: Number, // 子类型:1人工、201材料、301机械、4主材、5设备 // 定额特有属性: libID: Number, maskName: String, caption: String, isFromDetail:{type: Number,default:0}, // 1 true 2 false adjustState: String, rationProjName: String, comments: String, // 说明 flags: [subSchema.flagsSchema], // 标记字段 rationAssList: [rationAssItemSchema], content: String, // 工作内容 ruleText: String, // 计算规则 //工料机特有属性 projectGLJID:Number, //项目工料机ID GLJID:Number,//工料机库ID original_code:String, //原始编码 specs:String,//规格型号 shortName:String,//缩写 customQuantity:String,//自定义消耗 adjCoe:Number, from:{type: String,default:'std'}//std, cpt 来自标准工料机库、补充工料机库 }); let ration = db.model("ration", rationSchema, "ration"); let baseModel = require('./base_model'); class rationModel extends baseModel { constructor () { super(ration); } getData (projectID, callback) { ration.find({'$or': [{projectID: projectID, deleteInfo: null}, {projectID: projectID, 'deleteInfo.deleted': {$in: [null, false]}}]}, '-_id', function(err, datas){ if (!err) { callback(0, projectConsts.RATION, datas); } else { callback(1, '', null); } }); }; save (user_id, datas, callback) { let functions = []; let data; function saveOne(doc) { return function (cb) { switch (doc.updateType) { case commonConsts.UT_UPDATE: ration.update({projectID: doc.updateData.projectID, ID: doc.updateData.ID, deleteInfo: null}, doc.updateData, cb); break; case commonConsts.UT_CREATE: ration.create(doc.updateData, cb); break; case commonConsts.UT_DELETE: doc.updateData.deleteInfo = {deleted: true, deleteDateTime: new Date(), deleteBy: user_id}; ration.update({projectID: doc.updateData.projectID, ID: doc.updateData.ID}, doc.updateData,{multi: true},cb); break; } } } for (let i = 0; i < datas.length; i++){ data = datas[i]; functions.push(saveOne(data)); quantity_detial.quantityEditChecking(data,'ration',functions); } async.parallel(functions, callback); }; getItemTemplate (callback) { let data = new ration; /* to do: 需要根据标准配置库填充fees和flags字段,是否需要更多的参数? */ callback(0, '', data); }; allocIDs (IDstep, callback) { counter.counterDAO.getIDAfterCount(counter.moduleName.ration, IDStep, function(err, highID){ let lowID = highID - IDStep + 1; callback(0, '', {lowID: lowID, highID: highID}); }); }; }; module.exports = new rationModel();