var PetsView = (function() {
var dao;
// Referencia a this que permite acceder a las funciones públicas desde las funciones de jQuery.
var self;
var formId = 'pets-form';
var listId = 'pets-list';
var formQuery = '#' + formId;
var listQuery = '#' + listId;
function PetsView(petsDao, formContainerId, listContainerId) {
dao = petsDao;
self = this;
insertPetsForm($('#' + formContainerId));
insertPetsList($('#' + listContainerId));
this.init = function() {
$('#' + formContainerId).before('
Mascotas
');
dao.listPets(function(pets) {
$.each(pets, function(key, pet) {
var daoPeople = new PeopleDAO();
daoPeople.getPeople(pet.idOwner,
function(person) {
appendToTable(pet, person);
},
showErrorMessage
);
});
});
// La acción por defecto de enviar formulario (submit) se sobreescribe
// para que el envío sea a través de AJAX
$(formQuery).submit(function(event) {
var pet = self.getPetInForm();
if (self.isEditing()) {
dao.modifyPet(pet,
function(pet) {
$('#pet-' + pet.id + ' td.namePet').text(pet.name);
$('#pet-' + pet.id + ' td.specie').text(pet.specie);
$('#pet-' + pet.id + ' td.idOwner').text(pet.idOwner);
self.resetForm();
},
showErrorMessage,
self.enableForm
);
} else {
dao.addPet(pet,
function(pet) {
appendToTable(pet);
self.resetForm();
},
showErrorMessage,
self.enableForm
);
}
return false;
});
$('#btnClearPet').click(this.resetForm);
};
this.initPetsPerson = function(id, person) {
$('#' + formContainerId).before('Mascotas de ' + person.name + '
');
dao.listPeoplePets(id,
function(pets) {
$.each(pets, function(key, pet) {
appendToTable(pet, person);
});
});
// La acción por defecto de enviar formulario (submit) se sobreescribe
// para que el envío sea a través de AJAX
$(formQuery).submit(function(event) {
var pet = self.getPetInForm();
if (self.isEditing()) {
dao.modifyPet(pet,
function(pet) {
$('#pet-' + pet.id + ' td.namePet').text(pet.name);
$('#pet-' + pet.id + ' td.specie').text(pet.specie);
$('#pet-' + pet.id + ' td.idOwner').text(pet.idOwner);
self.resetForm();
if(pet.idOwner != id) {
$('tr#pet-' + pet.id).remove();
}
},
showErrorMessage,
self.enableForm
);
} else {
dao.addPet(pet,
function(pet) {
appendToTable(pet);
self.resetForm();
if(pet.idOwner != id) {
$('tr#pet-' + pet.id).remove();
}
},
showErrorMessage,
self.enableForm
);
}
return false;
});
$('#btnClearPet').click(this.resetForm);
};
this.getPetInForm = function() {
var form = $(formQuery);
return {
'id': form.find('input[name="idPet"]').val(),
'name': form.find('input[name="namePet"]').val(),
'specie': form.find('input[name="specie"]').val(),
'idOwner': form.find('input[name="idOwner"]').val()
};
};
this.getPetInRow = function(id) {
var row = $('#pet-' + id);
if (row !== undefined) {
return {
'id': id,
'name': row.find('td.namePet').text(),
'specie': row.find('td.specie').text(),
'idOwner': form.find('td.idOwner').text()
};
} else {
return undefined;
}
};
this.editPet = function(id) {
var row = $('#pet-' + id);
if (row !== undefined) {
var form = $(formQuery);
form.find('input[name="idPet"]').val(id);
form.find('input[name="namePet"]').val(row.find('td.namePet').text());
form.find('input[name="specie"]').val(row.find('td.specie').text());
form.find('input[name="idOwner"]').val(row.find('td.idOwner').text());
$('input#btnSubmitPet').val('Modificar');
}
};
this.deletePet = function(id) {
if (confirm('Está a punto de eliminar a una mascota. ¿Está seguro de que desea continuar?')) {
dao.deletePet(id,
function() {
$('tr#pet-' + id).remove();
self.resetForm();
},
showErrorMessage
);
}
};
this.isEditing = function() {
return $(formQuery + ' input[name="idPet"]').val() != "";
};
this.disableForm = function() {
$(formQuery + ' input').prop('disabled', true);
};
this.enableForm = function() {
$(formQuery + ' input').prop('disabled', false);
};
this.resetForm = function() {
$(formQuery)[0].reset();
$(formQuery + ' input[name="idPet"]').val('');
$('#btnSubmitPet').val('Crear');
};
};
var insertPetsList = function(parent) {
parent.append(
'\
\
\
Nombre | \
Especie | \
Nombre Propietario | \
Apellido Propietario | \
| \
\
\
\
\
'
);
};
var insertPetsForm = function(parent) {
parent.append(
''
);
};
var createPetRow = function(pet, person) {
return '\
' + pet.name + ' | \
' + pet.specie + ' | \
' + pet.idOwner + ' | \
' + person.name + ' | \
' + person.surname + ' | \
\
Editar\
Eliminar\
| \
';
};
var showErrorMessage = function(jqxhr, textStatus, error) {
alert(textStatus + ": " + error);
};
var addRowListeners = function(pet) {
$('#pet-' + pet.id + ' a.edit').click(function() {
self.editPet(pet.id);
});
$('#pet-' + pet.id + ' a.delete').click(function() {
self.deletePet(pet.id);
});
};
var appendToTable = function(pet, person) {
$(listQuery + ' > tbody:last')
.append(createPetRow(pet, person));
addRowListeners(pet);
};
return PetsView;
})();