88f5093d2c32c53e1b44bca339ebd9c717334f81
[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   }, {
47     tableName: 'cm_contacts',
48     associate: function(models) {
49       Contact.belongsTo(models.Company);
50       Contact.belongsTo(models.User);
51       Contact.belongsTo(models.List);
52       Contact.addScope('list', {
53         include: [models.List]
54       });
55       Contact.addScope('company', {
56         include: [models.Company]
57       });
58       Contact.addScope('user', {
59         include: [models.User]
60       });
61       Contact.addScope('company_list_filter', function(query) {
62         var scope = {
63           where: {}
64         };
65         if (query.CompanyId) {
66           scope.where.CompanyId = query.CompanyId;
67         }
68         if (query.ListId) {
69           scope.where.ListId = query.ListId;
70         }
71         return scope;
72       });
73     }
74   });
75
76   return Contact;
77 };