Dear ${object.patient_id.name}
\n" +"The following appointment has been created successfully
\n" +" \n" +"\n" +"Doctor....: ${object.physician_id.name}
\n" +"Date.....: ${ctx.get('appointment_date') or object.appointment_date[:10]}
Time......: ${ctx.get('appointment_time') or object.appointment_date[11:]}
\n" +"Clinic...: ${object.institution_id.name}
\n" +"Phone..: ${object.institution_id.phone}
\n" +"Address.: ${object.institution_id.street} ${object.institution_id.street2}
\n" +"Dear ${object.patient_id.name}
\n" +"The following appointment has been created successfully
\n" +" \n" +"\n" +"Doctor....: ${object.physician_id.name}
\n" +"Date.....: ${ctx.get('appointment_date') or object.appointment_date[:10]}
Time......: ${ctx.get('appointment_time') or object.appointment_date[11:]}
\n" +"Clinic...: ${object.institution_id.name}
\n" +"Phone..: ${object.institution_id.phone}
\n" +"Address.: ${object.institution_id.street} ${object.institution_id.street2}
\n" +"Your appointment with Dr. ${object.physician_id.lastname} on ${ctx.get('appointment_date') or object.appointment_date[:10]} ${ctx.get('appointment_time') or object.appointment_date[11:]} has been confirmed.
\n" +" " +msgstr "" +"\n" +"Your appointment with Dr. ${object.physician_id.lastname} on ${ctx.get('appointment_date') or object.appointment_date[:10]} ${ctx.get('appointment_time') or object.appointment_date[11:]} has been confirmed.
\n" +" " + +#. module: medical_appointment +#: model:ir.ui.menu,name:medical_appointment.medical_appointment +msgid " Appointments" +msgstr "Citas" + +#. module: medical_appointment +#: model:mail.template,subject:medical_appointment.sms_template_appointment_confirmation +msgid "${object.institution_id.name} - Confirmación de Cita" +msgstr "${object.institution_id.name} - Confirmación de Cita" + +#. module: medical_appointment +#: model:mail.template,subject:medical_appointment.email_template_appointment_confirmation +msgid "${object.institution_id.name} <${(object.institution_id.email or user.email)|safe}> - Appointment Confirmation" +msgstr "${object.institution_id.name} <${(object.institution_id.email or user.email)|safe}> - Appointment Confirmation" + +#. module: medical_appointment +#: model:ir.ui.view,arch_db:medical_appointment.medical_appointment_view_kanban +msgid "" +"\n" +" Patient:\n" +" " +msgstr "" +"\n" +" Patient:\n" +" " + +#. module: medical_appointment +#: model:ir.ui.view,arch_db:medical_appointment.medical_appointment_view_kanban +msgid "" +"\n" +" Physician:\n" +" " +msgstr "" +"\n" +" Physician:\n" +" " + +#. module: medical_appointment +#: model:ir.ui.view,arch_db:medical_appointment.medical_appointment_view_kanban +msgid "Duration:" +msgstr "Duration:" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_alias +msgid "Alias" +msgstr "Alias" + +#. module: medical_appointment +#: model:ir.model.fields,help:medical_appointment.field_medical_appointment_alias +msgid "Alias for appointment" +msgstr "Alias para la cita" + +#. module: medical_appointment +#: selection:medical.appointment,appointment_type:0 +msgid "Ambulatory" +msgstr "Ambulatorio" + +#. module: medical_appointment +#: model:ir.ui.menu,name:medical_appointment.medical_appointment_root +#: model:ir.ui.view,arch_db:medical_appointment.medical_appointment_view_form +msgid "Appointment" +msgstr "Cita" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_name +#: model:ir.ui.view,arch_db:medical_appointment.medical_appointment_view_search +msgid "Appointment ID" +msgstr "Cita ID" + +#. module: medical_appointment +#: model:ir.actions.act_window,name:medical_appointment.medical_appointment_action +#: model:ir.model.fields,field_description:medical_appointment.field_medical_patient_appointment_ids +#: model:ir.model.fields,field_description:medical_appointment.field_medical_patient_count_appointment_ids +#: model:ir.ui.view,arch_db:medical_appointment.medical_patient_view_form +msgid "Appointments" +msgstr "Citas" + +#. module: medical_appointment +#: model:medical.appointment.stage,name:medical_appointment.stage_appointment_cancelled +msgid "Cancelled" +msgstr "Cancelado" + +#. module: medical_appointment +#: model:ir.model.fields,help:medical_appointment.field_medical_appointment_force_schedule +msgid "Check this to ignore any double bookings and schedule anyways" +msgstr "Marque esto para ignorar cualquier reserva doble y programar de todos modos" + +#. module: medical_appointment +#: model:medical.appointment.stage,name:medical_appointment.stage_appointment_confirm +msgid "Confirm" +msgstr "Confirmar" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_consultation_id +#: model:ir.ui.view,arch_db:medical_appointment.medical_appointment_view_search +msgid "Consultation Services" +msgstr "Servicios de Consulta" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_create_uid +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_stage_create_uid +msgid "Created by" +msgstr "Creado por:" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_create_date +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_stage_create_date +msgid "Created on" +msgstr "Creado" + +#. module: medical_appointment +#: model:ir.model.fields,help:medical_appointment.field_medical_appointment_stage_id +msgid "Current appointment stage" +msgstr "Etapa de la cita actual" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_appointment_date +#: model:ir.ui.view,arch_db:medical_appointment.medical_appointment_view_search +msgid "Date and Time" +msgstr "Fecha y hora" + +#. module: medical_appointment +#: model:ir.model.fields,help:medical_appointment.field_medical_appointment_appointment_date +msgid "Date and Time of Scheduled Appointment" +msgstr "Fecha y hora de la cita programada" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_stage_is_default +msgid "Default?" +msgstr "Defecto?" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_display_name +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_stage_display_name +msgid "Display Name" +msgstr "Nombre a Mostrar" + +#. module: medical_appointment +#: model:medical.appointment.stage,name:medical_appointment.stage_appointment_done +msgid "Done" +msgstr "Realizado" + +#. module: medical_appointment +#: model:medical.appointment.stage,name:medical_appointment.stage_appointment_new +msgid "Draft" +msgstr "Borrador" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_duration +msgid "Duration" +msgstr "Duración" + +#. module: medical_appointment +#: model:ir.model.fields,help:medical_appointment.field_medical_appointment_duration +msgid "Duration of appointment" +msgstr "Duración de cita" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_appointment_end_date +msgid "End Date and Time" +msgstr "Fin de Fecha y hora" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_stage_fold +msgid "Folded in KanBan view" +msgstr "Plegado en la vista KanBan" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_force_schedule +msgid "Force schedule" +msgstr "Forzar programación" + +#. module: medical_appointment +#: model:ir.ui.view,arch_db:medical_appointment.medical_appointment_view_search +msgid "Group By..." +msgstr "Agrupar por..." + +#. module: medical_appointment +#: model:ir.ui.view,arch_db:medical_appointment.medical_appointment_view_search +msgid "Health Center" +msgstr "Centros Médicos" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_id +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_stage_id_4624 +msgid "ID" +msgstr "ID" + +#. module: medical_appointment +#: model:ir.model.fields,help:medical_appointment.field_medical_appointment_stage_is_default +msgid "If checked, this stage will be selected when creating new appointments." +msgstr "Si está marcada, esta etapa se seleccionará al crear nuevas citas." + +#. module: medical_appointment +#: model:medical.appointment.stage,name:medical_appointment.stage_appointment_in_consultation +msgid "In Consultation" +msgstr "En Consulta" + +#. module: medical_appointment +#: selection:medical.appointment,appointment_type:0 +msgid "Inpatient" +msgstr "Paciente interno" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment___last_update +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_stage___last_update +msgid "Last Modified on" +msgstr "Fecha de modificación" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_stage_write_uid +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_write_uid +msgid "Last Updated by" +msgstr "Ultima Actualización por" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_stage_write_date +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_write_date +msgid "Last Updated on" +msgstr "Actualizado en" + +#. module: medical_appointment +#: model:ir.ui.view,arch_db:medical_appointment.medical_appointment_view_form +msgid "Main" +msgstr "Main" + +#. module: medical_appointment +#: model:ir.ui.view,arch_db:medical_appointment.medical_appointment_view_form +#: model:ir.ui.view,arch_db:medical_appointment.medical_appointment_view_search +msgid "Medical Appointment" +msgstr "Cita" + +#. module: medical_appointment +#: model:ir.model,name:medical_appointment.model_medical_appointment +#: model:ir.ui.view,arch_db:medical_appointment.medical_appointment_view_calendar +#: model:ir.ui.view,arch_db:medical_appointment.medical_appointment_view_tree +msgid "Medical Appointments" +msgstr "Citas" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_institution_id +msgid "Medical Center" +msgstr "Centro Médico" + +#. module: medical_appointment +#: selection:medical.appointment,urgency:0 +msgid "Medical Emergency" +msgstr "Emergencia médica" + +#. module: medical_appointment +#: model:ir.model,name:medical_appointment.model_medical_patient +msgid "Medical Patient" +msgstr "Paciente" + +#. module: medical_appointment +#: model:ir.model.fields,help:medical_appointment.field_medical_appointment_specialty_id +msgid "Medical Specialty / Sector" +msgstr "Médico Especialista" + +#. module: medical_appointment +#: model:ir.model.fields,help:medical_appointment.field_medical_appointment_institution_id +msgid "Medical center that appointment is located at" +msgstr "Centro médico donde se encuentra la cita" + +#. module: medical_appointment +#: code:addons/medical_appointment/models/medical_appointment.py:37 +#, python-format +msgid "New" +msgstr "New" + +#. module: medical_appointment +#: code:addons/medical_appointment/models/medical_appointment.py:298 +#, python-format +msgid "No default stage defined for review" +msgstr "No se definió etapa predeterminada para la revisión" + +#. module: medical_appointment +#: selection:medical.appointment,urgency:0 +msgid "Normal" +msgstr "Normal" + +#. module: medical_appointment +#: model:ir.ui.view,arch_db:medical_appointment.medical_appointment_view_form +msgid "Notes and Messages" +msgstr "Notas y Mensajes" + +#. module: medical_appointment +#: selection:medical.appointment,appointment_type:0 +msgid "Outpatient" +msgstr "Paciente externo" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_patient_id +#: model:ir.ui.view,arch_db:medical_appointment.medical_appointment_view_search +msgid "Patient" +msgstr "Paciente" + +#. module: medical_appointment +#: model:ir.model.fields,help:medical_appointment.field_medical_appointment_patient_id +msgid "Patient Name" +msgstr "Paciente" + +#. module: medical_appointment +#: model:medical.appointment.stage,name:medical_appointment.stage_appointment_in_review +msgid "Pending Review" +msgstr "Revisión pendiente" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_physician_id +#: model:ir.ui.view,arch_db:medical_appointment.medical_appointment_view_search +msgid "Physician" +msgstr "Médico" + +#. module: medical_appointment +#: code:addons/medical_appointment/models/medical_appointment.py:198 +#, python-format +msgid "Physician is in an appointment during the selected time. Select `Force Schedule` if you would like to schedule anyways." +msgstr "El médico está en una cita durante el tiempo seleccionado. Seleccione Forzar Calendario si desea programar de todos modos." + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_stage_requirements +msgid "Requirements" +msgstr "Requisitos" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_user_id +msgid "Responsible" +msgstr "Responsable" + +#. module: medical_appointment +#: model:ir.model.fields,help:medical_appointment.field_medical_appointment_physician_id +msgid "Scheduled Physician" +msgstr "Médico programado" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_stage_sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_specialty_id +#: model:ir.ui.view,arch_db:medical_appointment.medical_appointment_view_search +msgid "Specialty" +msgstr "Especialidad" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_stage_id +msgid "Stage" +msgstr "Etapa" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_stage_name +msgid "Stage Name" +msgstr "Nombre de etapa" + +#. module: medical_appointment +#: model:ir.model,name:medical_appointment.model_medical_appointment_stage +msgid "Stage of Appointment" +msgstr "Etapa de cita" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_date_end +msgid "Stop Displaying On" +msgstr "Dejar de mostrar" + +#. module: medical_appointment +#: model:ir.model.fields,help:medical_appointment.field_medical_appointment_stage_fold +msgid "This stage is folded in the KanBan view when there are no records in that stage to display." +msgstr "Esta etapa se pliega en la vista KanBan cuando no hay registros en esa etapa para mostrar." + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_appointment_type +msgid "Type" +msgstr "Tipo" + +#. module: medical_appointment +#: model:ir.model.fields,help:medical_appointment.field_medical_appointment_appointment_type +msgid "Type of appointment" +msgstr "Tipo de cita" + +#. module: medical_appointment +#: model:medical.appointment.stage,name:medical_appointment.stage_unavailable +msgid "Unavailable" +msgstr "Indisponible" + +#. module: medical_appointment +#: model:ir.model.fields,field_description:medical_appointment.field_medical_appointment_urgency +msgid "Urgency Level" +msgstr "Nivel de Urgencia" + +#. module: medical_appointment +#: model:ir.model.fields,help:medical_appointment.field_medical_appointment_urgency +msgid "Urgency level of this appointment" +msgstr "NIvel de urgencia de esta cita" + +#. module: medical_appointment +#: selection:medical.appointment,urgency:0 +msgid "Urgent" +msgstr "Urgente" + +#. module: medical_appointment +#: model:ir.model.fields,help:medical_appointment.field_medical_appointment_stage_sequence +msgid "Used to order stages. Lower is better." +msgstr "Usado para ordenar etapas. Más bajo es mejor." + +#. module: medical_appointment +#: model:ir.model.fields,help:medical_appointment.field_medical_appointment_user_id +msgid "User that created appointment" +msgstr "Usuario que creó una cita" + +#. module: medical_appointment +#: model:medical.appointment.stage,name:medical_appointment.stage_appointment_waiting +msgid "Waiting" +msgstr "Esperando" + +#. module: medical_appointment +#: model:ir.model.fields,help:medical_appointment.field_medical_appointment_date_end +msgid "When to stop displaying appointment" +msgstr "Cuándo dejar de mostrar la cita" diff --git a/medical_appointment/models/__init__.py b/medical_appointment/models/__init__.py index 0d2349b94..49362529b 100644 --- a/medical_appointment/models/__init__.py +++ b/medical_appointment/models/__init__.py @@ -4,3 +4,4 @@ from . import medical_appointment from . import medical_appointment_stage +from . import medical_patient \ No newline at end of file diff --git a/medical_appointment/models/medical_appointment.py b/medical_appointment/models/medical_appointment.py index 1f486527b..045a0d489 100644 --- a/medical_appointment/models/medical_appointment.py +++ b/medical_appointment/models/medical_appointment.py @@ -5,13 +5,13 @@ from odoo import fields, models, exceptions, api, _ from odoo.addons import decimal_precision as dp -from datetime import timedelta +from datetime import date, datetime, timedelta class MedicalAppointment(models.Model): _name = 'medical.appointment' _description = 'Medical Appointments' - _inherit = 'mail.thread' + _inherit = ['mail.thread', 'ir.needaction_mixin'] STATES = { 'draft': [('readonly', False)] @@ -34,8 +34,9 @@ class MedicalAppointment(models.Model): ) name = fields.Char( string='Appointment ID', - default='/', - readonly=True, + required=True, + # readonly=True, + default=lambda self: _('New') ) force_schedule = fields.Boolean( help='Check this to ignore any double bookings and schedule anyways', @@ -91,11 +92,16 @@ class MedicalAppointment(models.Model): comodel_name='res.partner', domain="[('type', '=', 'medical.center')]", ) - consultation_ids = fields.Many2one( + # consultation_ids = fields.Many2one( + # string='Consultation Services', + # help='Services that appointment is being scheduled for', + # comodel_name='medical.physician.service', + # domain="[('physician_id', '=', physician_id)]", + # ) + consultation_id = fields.Many2one( string='Consultation Services', - help='Services that appointment is being scheduled for', - comodel_name='medical.physician.service', - domain="[('physician_id', '=', physician_id)]", + comodel_name='product.product', + domain="[('type', '=', 'service')]" ) urgency = fields.Selection([ ('a', 'Normal'), @@ -298,3 +304,39 @@ def _set_clashes_state_to_review(self, physician_ids, institution_ids, current_appointment_ids.write({ 'stage_id': review_stage_id_int, }) + + @api.model + def create(self, values, check=True): + """ + Create a new record for a model ModelName + @param values: provides a data for new record + + @return: returns a id of new record + """ + if values.get('name', 'New') == 'New': + values['name'] = self.env['ir.sequence'].next_by_code('medical.appointment') or 'New' + + result = super(MedicalAppointment, self).create(values) + + return result + + @api.multi + def copy(self, default=None): + ''' + @param self: object pointer + @param default: dict of default values to be set + ''' + default = dict(default or {}) + default.update( + name=('New'), + appointment_date=(datetime.now()), + ) + return super(MedicalAppointment, self).copy(default=default) + + @api.model + def _needaction_count(self, domain=None): + """ + Show a count of draft state folio on the menu badge. + @param self: object pointer + """ + return self.search_count([('stage_id.name', 'in', ['Draft', 'Borrador'])]) diff --git a/medical_appointment/models/medical_patient.py b/medical_appointment/models/medical_patient.py new file mode 100644 index 000000000..334870cc1 --- /dev/null +++ b/medical_appointment/models/medical_patient.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Mauro Estrella +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import _, api, fields, models + + +class MedicalPatient(models.Model): + _inherit = 'medical.patient' + + + appointment_ids = fields.One2many( + string='Appointments', + comodel_name='medical.appointment', + inverse_name='patient_id', + ) + count_appointment_ids = fields.Integer( + compute='_compute_count_appointment_ids', + string='Appointments', + ) + @api.multi + def _compute_count_appointment_ids(self): + for rec_id in self: + rec_id.count_appointment_ids = len(rec_id.appointment_ids) diff --git a/medical_appointment/security/ir.model.access.csv b/medical_appointment/security/ir.model.access.csv index 8f303e4cb..e668b4242 100644 --- a/medical_appointment/security/ir.model.access.csv +++ b/medical_appointment/security/ir.model.access.csv @@ -1,5 +1,5 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -center_manager_medical_appointment,center_manager_medical_appointment,model_medical_appointment,medical.group_medical_center_manager,1,0,0,0 +center_manager_medical_appointment,center_manager_medical_appointment,model_medical_appointment,medical.group_medical_center_manager,1,1,1,1 user_medical_appointment,user_medical_appointment,model_medical_appointment,medical.group_medical_user,1,1,1,0 -configurator_medical_appointment_stage,configurator_medical_appointment_stage,model_medical_appointment_stage,medical.group_medical_configurator,1,0,0,0 -user_medical_appointment_stage,user_medical_appointment_stage,model_medical_appointment_stage,medical.group_medical_user,1,0,0,0 \ No newline at end of file +configurator_medical_appointment_stage,configurator_medical_appointment_stage,model_medical_appointment_stage,medical.group_medical_configurator,1,1,1,1 +user_medical_appointment_stage,user_medical_appointment_stage,model_medical_appointment_stage,medical.group_medical_user,1,1,1,0 \ No newline at end of file diff --git a/medical_appointment/security/medical_security.xml b/medical_appointment/security/medical_security.xml index b20f1adea..6ed03f02c 100644 --- a/medical_appointment/security/medical_security.xml +++ b/medical_appointment/security/medical_security.xml @@ -6,7 +6,7 @@ @license GPL-3 --> -