c5587a21eda2240e486d147156128ff9fb71bc8c
[motion.git] / server / models / cm_contact.js
1 /**
2  * Contact Model
3  */
4
5 module.exports = function(sequelize, DataTypes) {
6
7   var Contact = sequelize.define('Contact', {
8     firstName: {
9       type: DataTypes.STRING,
10       validate: {
11         notEmpty: true
12       }
13     },
14     lastName: DataTypes.STRING,
15     tags: {
16       type: DataTypes.STRING,
17       get: function() {
18         var tags;
19         if (this.getDataValue('tags')) {
20           tags = this.getDataValue('tags').split(';');
21           if (tags.length > 1) {
22             tags.pop();
23           } else {
24             tags = []; //if the length is 1 the value is still in the format of the old tags, with comma separator. So I return an empty array since the old format is obsolete and invalid
25           }
26         } else {
27           tags = [];
28         }
29         return tags;
30       },
31       set: function(val) {
32         this.setDataValue('tags', val && val.length ? val.join(';') + ';' : null);
33       }
34     },
35     street: DataTypes.STRING,
36     postalCode: DataTypes.STRING,
37     city: DataTypes.STRING,
38     country: DataTypes.STRING,
39     dateOfBirth: DataTypes.STRING,
40     description: DataTypes.TEXT,
41     phone: DataTypes.STRING,
42     mobile: DataTypes.STRING,
43     fax: DataTypes.STRING,
44     email: DataTypes.STRING,
45     url: DataTypes.STRING,
46     planningtime: DataTypes.DATE
47   }, {
48     tableName: 'cm_contacts',
49     associate: function(models) {
50       Contact.belongsTo(models.Company);
51       Contact.belongsTo(models.User);
52       Contact.belongsTo(models.List);
53       Contact.addScope('list', {
54         include: [models.List]
55       });
56       Contact.addScope('company', {
57         include: [models.Company]
58       });
59       Contact.addScope('user', {
60         include: [models.User]
61       });
62       Contact.addScope('company_list_filter', function(query) {
63         var scope = {
64           where: {}
65         };
66         if (query.CompanyId) {
67           scope.where.CompanyId = query.CompanyId;
68         }
69         if (query.ListId) {
70           scope.where.ListId = query.ListId;
71         }
72         return scope;
73       });
74     }
75   });
76
77   return Contact;
78 };