Skip to content

Commit 28aba8b

Browse files
committed
wip
1 parent e4db363 commit 28aba8b

29 files changed

+321
-97
lines changed

gmail/.prettierrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
"semi": true,
33
"trailingComma": "all",
44
"singleQuote": false,
5-
"printWidth": 120,
5+
"printWidth": 100,
66
"tabWidth": 4
77
}

gmail/src/main.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ function onGmailMessageOpen(event) {
2323
let state = null;
2424
if (currentEmail.contacts.length > 1) {
2525
// More than one contact, we will need to choose the right one
26-
const [searchedPartners, error] = Partner.searchPartner(currentEmail.contacts.map((c) => c.email));
26+
const [searchedPartners, error] = Partner.searchPartner(
27+
currentEmail.contacts.map((c) => c.email),
28+
);
2729
if (error.code) {
2830
return buildLoginMainView();
2931
}
@@ -38,15 +40,21 @@ function onGmailMessageOpen(event) {
3840

3941
state = new State(null, false, currentEmail, [], searchedPartners, null, false);
4042
} else {
41-
const [partner, odooUserCompanies, canCreatePartner, canCreateProject, error] = Partner.getPartner(
42-
currentEmail.contacts[0].name,
43-
currentEmail.contacts[0].email,
44-
);
43+
const [partner, odooUserCompanies, canCreatePartner, canCreateProject, error] =
44+
Partner.getPartner(currentEmail.contacts[0].name, currentEmail.contacts[0].email);
4545
if (error.code) {
4646
return buildLoginMainView();
4747
}
4848

49-
state = new State(partner, canCreatePartner, currentEmail, odooUserCompanies, null, null, canCreateProject);
49+
state = new State(
50+
partner,
51+
canCreatePartner,
52+
currentEmail,
53+
odooUserCompanies,
54+
null,
55+
null,
56+
canCreateProject,
57+
);
5058
}
5159

5260
return [buildView(state)];

gmail/src/models/activity.ts

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ export class Activity {
1111
summary: string;
1212
dateDeadlineStr: string;
1313
dateDeadlineTimestamp: number;
14+
resId: string;
15+
resModel: string;
1416
resName: string;
1517

1618
/**
@@ -22,6 +24,8 @@ export class Activity {
2224
activity.summary = values.summary;
2325
activity.dateDeadlineStr = values.dateDeadlineStr;
2426
activity.dateDeadlineTimestamp = values.dateDeadlineTimestamp;
27+
activity.resId = values.resId;
28+
activity.resModel = values.resModel;
2529
activity.resName = values.resName;
2630
return activity;
2731
}
@@ -35,12 +39,16 @@ export class Activity {
3539
activity.summary = values.summary;
3640
activity.dateDeadlineStr = values.date_deadline_str;
3741
activity.dateDeadlineTimestamp = values.date_deadline_timestamp;
42+
activity.resId = values.res_id;
43+
activity.resModel = values.res_model;
3844
activity.resName = values.res_name;
3945
return activity;
4046
}
4147

4248
static getActivities(): [string, Activity[]][] | null {
43-
const url = PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") + URLS.GET_ACTIVITIES;
49+
const url =
50+
PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") +
51+
URLS.GET_ACTIVITIES;
4452
const odooAccessToken = getAccessToken();
4553
if (!odooAccessToken || !odooAccessToken) {
4654
return null;
@@ -51,26 +59,41 @@ export class Activity {
5159
return null;
5260
}
5361

54-
return response.map((values: any) => [values[0], values[1].map((v) => Activity.fromOdooResponse(v))]);
62+
return response.map((values: any) => [
63+
values[0],
64+
values[1].map((v) => Activity.fromOdooResponse(v)),
65+
]);
5566
}
5667

5768
/**
5869
* Make a RPC call to the Odoo database to mark as done the activity.
5970
*/
6071
markDone(): boolean {
61-
const url = PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") + URLS.DONE_ACTIVITY;
72+
const url =
73+
PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") +
74+
URLS.DONE_ACTIVITY;
6275
const accessToken = getAccessToken();
63-
const response = postJsonRpc(url, { activity_id: this.id }, { Authorization: "Bearer " + accessToken });
76+
const response = postJsonRpc(
77+
url,
78+
{ activity_id: this.id },
79+
{ Authorization: "Bearer " + accessToken },
80+
);
6481
return response?.ok || false;
6582
}
6683

6784
/**
6885
* Make a RPC call to the Odoo database to cancel the activity.
6986
*/
7087
markCancel(): boolean {
71-
const url = PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") + URLS.CANCEL_ACTIVITY;
88+
const url =
89+
PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") +
90+
URLS.CANCEL_ACTIVITY;
7291
const accessToken = getAccessToken();
73-
const response = postJsonRpc(url, { activity_id: this.id }, { Authorization: "Bearer " + accessToken });
92+
const response = postJsonRpc(
93+
url,
94+
{ activity_id: this.id },
95+
{ Authorization: "Bearer " + accessToken },
96+
);
7497
return response?.ok || false;
7598
}
7699

@@ -79,16 +102,25 @@ export class Activity {
79102
* Return the new state of the activities.
80103
*/
81104
edit(summary: string, dateDeadlineTimestamp: number): [string, Activity[]][] | null {
82-
const url = PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") + URLS.EDIT_ACTIVITY;
105+
const url =
106+
PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") +
107+
URLS.EDIT_ACTIVITY;
83108
const accessToken = getAccessToken();
84109
const response = postJsonRpc(
85110
url,
86-
{ activity_id: this.id, summary, date_deadline_timestamp: Math.floor(dateDeadlineTimestamp / 1000) },
111+
{
112+
activity_id: this.id,
113+
summary,
114+
date_deadline_timestamp: Math.floor(dateDeadlineTimestamp / 1000),
115+
},
87116
{ Authorization: "Bearer " + accessToken },
88117
);
89118
if (!response) {
90119
return null;
91120
}
92-
return response.map((values: any) => [values[0], values[1].map((v) => Activity.fromOdooResponse(v))]);
121+
return response.map((values: any) => [
122+
values[0],
123+
values[1].map((v) => Activity.fromOdooResponse(v)),
124+
]);
93125
}
94126
}

gmail/src/models/email.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,10 @@ export class Email {
103103
email.date = values.date;
104104
email.emailFrom = values.emailFrom;
105105
email.contacts = values.contacts.map((c) => EmailContact.fromJson(c));
106-
email._attachmentsParsed = [values._attachmentsParsed[0], ErrorMessage.fromJson(values._attachmentsParsed[1])];
106+
email._attachmentsParsed = [
107+
values._attachmentsParsed[0],
108+
ErrorMessage.fromJson(values._attachmentsParsed[1]),
109+
];
107110
return email;
108111
}
109112

gmail/src/models/lead.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,13 @@ export class Lead {
2121
* Make a RPC call to the Odoo database to create a lead
2222
* and return the ID of the newly created record.
2323
*/
24-
static createLead(partner: Partner, emailBody: string, emailSubject: string): [Lead, Partner] | null {
25-
const url = PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") + URLS.CREATE_LEAD;
24+
static createLead(
25+
partner: Partner,
26+
emailBody: string,
27+
emailSubject: string,
28+
): [Lead, Partner] | null {
29+
const url =
30+
PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") + URLS.CREATE_LEAD;
2631
const accessToken = getAccessToken();
2732
const response = postJsonRpc(
2833
url,
@@ -82,12 +87,15 @@ export class Lead {
8287

8388
static _revenuesDescription(values) {
8489
if (values.recurringRevenue) {
85-
return _t("%(expected_revenue)s + %(recurring_revenue)s %(recurring_plan)s at %(probability)s%", {
86-
expected_revenue: values.expectedRevenue,
87-
probability: values.probability,
88-
recurring_revenue: values.recurringRevenue,
89-
recurring_plan: values.recurringPlan,
90-
});
90+
return _t(
91+
"%(expected_revenue)s + %(recurring_revenue)s %(recurring_plan)s at %(probability)s%",
92+
{
93+
expected_revenue: values.expectedRevenue,
94+
probability: values.probability,
95+
recurring_revenue: values.recurringRevenue,
96+
recurring_plan: values.recurringPlan,
97+
},
98+
);
9199
}
92100
return _t("%(expected_revenue)s at %(probability)s%", {
93101
expected_revenue: values.expectedRevenue,

gmail/src/models/partner.ts

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,17 @@ export class Partner {
6363

6464
partner.isWriteable = values.isWriteable;
6565

66-
partner.leads = values.leads ? values.leads.map((leadValues: any) => Lead.fromJson(leadValues)) : null;
66+
partner.leads = values.leads
67+
? values.leads.map((leadValues: any) => Lead.fromJson(leadValues))
68+
: null;
6769

6870
partner.tickets = values.tickets
6971
? values.tickets.map((ticketValues: any) => Ticket.fromJson(ticketValues))
7072
: null;
7173

72-
partner.tasks = values.tasks ? values.tasks.map((taskValues: any) => Task.fromJson(taskValues)) : null;
74+
partner.tasks = values.tasks
75+
? values.tasks.map((taskValues: any) => Task.fromJson(taskValues))
76+
: null;
7377

7478
return partner;
7579
}
@@ -98,15 +102,27 @@ export class Partner {
98102
/**
99103
* Create a "res.partner" with the given values in the Odoo database.
100104
*/
101-
static savePartner(partnerValues: any): Partner {
102-
const url = PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") + URLS.PARTNER_CREATE;
105+
static savePartner(partner: Partner): Partner | null {
106+
const url =
107+
PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") +
108+
URLS.PARTNER_CREATE;
103109
const odooAccessToken = getAccessToken();
104110

111+
const partnerValues = {
112+
name: partner.name,
113+
email: partner.email,
114+
};
115+
105116
const response = postJsonRpc(url, partnerValues, {
106117
Authorization: "Bearer " + odooAccessToken,
107118
});
108119

109-
return response?.id ? Partner.fromOdooResponse(response) : null;
120+
if (!response?.id) {
121+
return null;
122+
}
123+
partner.id = response.id;
124+
partner.image = response.image;
125+
return partner;
110126
}
111127

112128
/**
@@ -133,7 +149,8 @@ export class Partner {
133149
return [partner, null, false, false, error];
134150
}
135151

136-
const url = PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") + URLS.GET_PARTNER;
152+
const url =
153+
PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") + URLS.GET_PARTNER;
137154

138155
const response = postJsonRpc(
139156
url,
@@ -161,19 +178,25 @@ export class Partner {
161178
// Parse leads
162179
if (response.leads) {
163180
partner.leadCount = response.lead_count;
164-
partner.leads = response.leads.map((leadValues: any) => Lead.fromOdooResponse(leadValues));
181+
partner.leads = response.leads.map((leadValues: any) =>
182+
Lead.fromOdooResponse(leadValues),
183+
);
165184
}
166185

167186
// Parse tickets
168187
if (response.tickets) {
169188
partner.ticketCount = response.ticket_count;
170-
partner.tickets = response.tickets.map((ticketValues: any) => Ticket.fromOdooResponse(ticketValues));
189+
partner.tickets = response.tickets.map((ticketValues: any) =>
190+
Ticket.fromOdooResponse(ticketValues),
191+
);
171192
}
172193

173194
// Parse tasks
174195
if (response.tasks) {
175196
partner.taskCount = response.task_count;
176-
partner.tasks = response.tasks.map((taskValues: any) => Task.fromOdooResponse(taskValues));
197+
partner.tasks = response.tasks.map((taskValues: any) =>
198+
Task.fromOdooResponse(taskValues),
199+
);
177200
}
178201
const canCreateProject = response.can_create_project !== false;
179202

@@ -188,15 +211,24 @@ export class Partner {
188211
* Perform a search on the Odoo database and return the list of matched partners.
189212
*/
190213
static searchPartner(query: string | string[]): [Partner[], ErrorMessage] {
191-
const url = PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") + URLS.SEARCH_PARTNER;
214+
const url =
215+
PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") +
216+
URLS.SEARCH_PARTNER;
192217
const odooAccessToken = getAccessToken();
193218

194-
const response = postJsonRpc(url, { query }, { Authorization: "Bearer " + odooAccessToken });
219+
const response = postJsonRpc(
220+
url,
221+
{ query },
222+
{ Authorization: "Bearer " + odooAccessToken },
223+
);
195224

196225
if (!response?.length) {
197226
return [[], new ErrorMessage("http_error_odoo")];
198227
}
199228

200-
return [response[0].map((values: any) => Partner.fromOdooResponse(values)), new ErrorMessage()];
229+
return [
230+
response[0].map((values: any) => Partner.fromOdooResponse(values)),
231+
new ErrorMessage(),
232+
];
201233
}
202234
}

gmail/src/models/project.ts

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,27 +43,42 @@ export class Project {
4343
* Make a RPC call to the Odoo database to search a project.
4444
*/
4545
static searchProject(query: string): [Project[], ErrorMessage] {
46-
const url = PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") + URLS.SEARCH_PROJECT;
46+
const url =
47+
PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") +
48+
URLS.SEARCH_PROJECT;
4749
const odooAccessToken = getAccessToken();
4850

49-
const response = postJsonRpc(url, { query }, { Authorization: "Bearer " + odooAccessToken });
51+
const response = postJsonRpc(
52+
url,
53+
{ query },
54+
{ Authorization: "Bearer " + odooAccessToken },
55+
);
5056

5157
if (!response?.length) {
5258
return [[], new ErrorMessage("http_error_odoo")];
5359
}
5460

55-
return [response[0].map((values: any) => Project.fromOdooResponse(values)), new ErrorMessage()];
61+
return [
62+
response[0].map((values: any) => Project.fromOdooResponse(values)),
63+
new ErrorMessage(),
64+
];
5665
}
5766

5867
/**
5968
* Make a RPC call to the Odoo database to create a project
6069
* and return the newly created record.
6170
*/
6271
static createProject(name: string): Project {
63-
const url = PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") + URLS.CREATE_PROJECT;
72+
const url =
73+
PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") +
74+
URLS.CREATE_PROJECT;
6475
const odooAccessToken = getAccessToken();
6576

66-
const response = postJsonRpc(url, { name: name }, { Authorization: "Bearer " + odooAccessToken });
77+
const response = postJsonRpc(
78+
url,
79+
{ name: name },
80+
{ Authorization: "Bearer " + odooAccessToken },
81+
);
6782

6883
const projectId = response ? response.id || null : null;
6984
if (!projectId) {

gmail/src/models/state.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,9 @@ export class State {
151151
*/
152152
static getLoggingState(messageId: string) {
153153
const cache = CacheService.getUserCache();
154-
const loggingStateStr = cache.get("ODOO_LOGGING_STATE_" + getOdooServerUrl() + "_" + messageId);
154+
const loggingStateStr = cache.get(
155+
"ODOO_LOGGING_STATE_" + getOdooServerUrl() + "_" + messageId,
156+
);
155157

156158
const defaultValues: Record<string, number[]> = {
157159
"res.partner": [],

gmail/src/models/task.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ export class Task {
4343
emailBody: string,
4444
emailSubject: string,
4545
): [Task, Partner] | null {
46-
const url = PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") + URLS.CREATE_TASK;
46+
const url =
47+
PropertiesService.getUserProperties().getProperty("ODOO_SERVER_URL") + URLS.CREATE_TASK;
4748
const odooAccessToken = getAccessToken();
4849
const response = postJsonRpc(
4950
url,

0 commit comments

Comments
 (0)