ganados/views.py
# -*- coding: utf-8 -*-
from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse
from django.shortcuts import redirect, get_object_or_404
from django.http import Http404
from django.core.exceptions import ObjectDoesNotExist
from userena.utils import get_user_model
from django.shortcuts import render_to_response
from django.template import RequestContext
from notifications.models import Notification
from profiles.models import Ganaderia, Configuracion
from ganados.models import *
from ganados.forms import *
from django.contrib.auth.models import User
from profiles.views import number_messages
from datetime import date, timedelta
import datetime, dateutil
import calendar
import pytz
from dateutil.relativedelta import *
def add_down_cattle(request, id_cattle):
cattle = Ganado.objects.get(id=id_cattle)
if request.method == 'POST':
formDownCattleForm = downCattleForm(request.POST)
if formDownCattleForm.is_valid():
cattle.down_cattle = formDownCattleForm.save()
cattle.save()
return redirect(reverse('add_cattle'))
else:
formDownCattleForm = downCattleForm()
return render_to_response('add_down_cattle.html',
{'formDownCattleForm': formDownCattleForm,
'cattle': cattle},
context_instance=RequestContext(request))
def list_down_cattle(request):
user = request.user
farm = Ganaderia.objects.get(perfil=user)
cattles = Ganado.objects.filter(ganaderia=farm).exclude(down_cattle=None)
formDownCattleForm = downCattleForm()
return render_to_response('list_down_cattle.html',
{'cattles': cattles},
context_instance=RequestContext(request))
def add_down_insemination(request, id_sperm):
sperm = Insemination.objects.get(id=id_sperm)
if request.method == 'POST':
formDownInseminationForm = downInseminationForm(request.POST)
if formDownInseminationForm.is_valid():
sperm.down_insemination = formDownInseminationForm.save()
sperm.save()
return redirect(reverse('add_cattle'))
else:
formDownInseminationForm = downInseminationForm()
return render_to_response('add_down_insemination.html',
{'formDownInseminationForm': formDownInseminationForm,
'sperm': sperm},
context_instance=RequestContext(request))
"""
metodo lista_ganado_produccion
"""
@login_required
def lista_ganado_produccion(request):
user = request.user
number_message = number_messages(request, user.username)
return render_to_response('lista_ganado_produccion.html',
{'number_messages': number_message},
context_instance=RequestContext(request))
"""
metodo agrega_ganado_ordenio
"""
def agrega_ganado_ordenio(request, ganado_id):
user = request.user
id_user = User.objects.filter(username=user.username)
number_message = number_messages(request, user.username)
ganaderia = Ganaderia.objects.get(perfil=id_user)
configuracion = Configuracion.objects.get(id=ganaderia.configuracion_id)
ganado = Ganado.objects.get(id=ganado_id)
fecha_hoy = datetime.date.today()
ordenios = ganado.ordenios.all()
num_ordenios = 1
cantidad = 0
for ordenio in ordenios:
if fecha_hoy == ordenio.fecha:
num_ordenios = ordenio.numero_ordenio + 1
cantidad = ordenio.total
total_ordenios = configuracion.numero_ordenios
msj = 'False'
if request.method == 'POST':
formOrdenio = ordenioForm(request.POST)
if formOrdenio.is_valid():
formOrdenio = formOrdenio.save(commit=False)
# verifico que es ordenio unico
if (formOrdenio.unique_ordenio) & (num_ordenios==1):
formOrdenio.numero_ordenio = num_ordenios
formOrdenio.total = formOrdenio.cantidad
formOrdenio.ganado = ganado
formOrdenio.fecha = fecha_hoy
formOrdenio.save()
rangee = range(1)
for i in range(2, total_ordenios+1):
last_ordenio = Ordenio.objects.get(fecha=date.today(), numero_ordenio=1, ganado=ganado)
ordenio = Ordenio()
ordenio.fecha = date.today()
ordenio.numero_ordenio = i
ordenio.cantidad = 0
ordenio.total = last_ordenio.total
ordenio.observaciones = 'Ninguna (Agregada por el sistema)'
ordenio.ganado = ganado
ordenio.unique_ordenio = False
ordenio.save()
else:
formOrdenio.numero_ordenio = num_ordenios
formOrdenio.total = formOrdenio.cantidad + cantidad
formOrdenio.ganado = ganado
formOrdenio.fecha = fecha_hoy
formOrdenio.save()
rangee = range(num_ordenios)
return redirect(reverse('agrega_ganado_ordenio', kwargs={'ganado_id': ganado_id}))
else:
formOrdenio = ordenioForm()
rangee = range(num_ordenios)
try:
ordenio = Ordenio.objects.get(fecha=date.today(), numero_ordenio=1)
if ( ((num_ordenios==total_ordenios) & (ordenio.unique_ordenio)) | (num_ordenios > total_ordenios) ):
msj = "Ya has llenado tus registros hoy."
if (total_ordenios == 2) & (ordenio.unique_ordenio):
rangee = range(2)
except ObjectDoesNotExist:
pass
return render_to_response('agrega_ganado_ordenio.html',
{'ganado_id': ganado_id,
'formOrdenio': formOrdenio,
'fecha': fecha_hoy,
'num_ordenios': num_ordenios,
'total_ordenios': total_ordenios,
'msj': msj,
'range': rangee,
'number_messages': number_message},
context_instance=RequestContext(request))
def edita_ganado_ordenio(request, ganado_id, num_ordenio):
user = request.user
id_user = User.objects.filter(username=user.username)
number_message = number_messages(request, user.username)
ganaderia = Ganaderia.objects.get(perfil=id_user)
configuracion = Configuracion.objects.get(id=ganaderia.configuracion_id)
ganado = Ganado.objects.get(id=ganado_id)
fecha_hoy = datetime.date.today()
ordenios = ganado.ordenios.all()
cont_ordenios = 0
for ordenio in ordenios:
if fecha_hoy == ordenio.fecha:
cont_ordenios += 1
id = ordenio.id
cantidad = ordenio.total
if request.method == 'POST':
# verifico si esta activo unique_ordenio
initial_ordenio = ganado.ordenios.get(numero_ordenio=1, fecha=fecha_hoy)
# obtengo el registro del ordeƱo a editar
ordenio = ganado.ordenios.get(numero_ordenio=num_ordenio, fecha=fecha_hoy)
formOrdenio = ordenioForm(request.POST, instance=ordenio)
formOrdenio = formOrdenio.save(commit=False)
formOrdenio.numero_ordenio = ordenio.numero_ordenio
if (num_ordenio == '1') & (initial_ordenio.unique_ordenio):
formOrdenio.total = formOrdenio.cantidad
for i in range(2, (configuracion.numero_ordenios+1)):
ordenio2 = Ordenio.objects.get(numero_ordenio=i, fecha=date.today())
ordenio2.total = formOrdenio.cantidad
ordenio2.save()
else:
if num_ordenio == '1':
n = (int(num_ordenio)+1)
else:
n = num_ordenio
for i in range(int(n), (configuracion.numero_ordenios+1)):
try:
ordenio2 = Ordenio.objects.get(numero_ordenio=i, fecha=date.today())
if num_ordenio == '1':
sumar = ordenio2.cantidad
formOrdenio.total = (formOrdenio.cantidad)
else:
ordenio3 = Ordenio.objects.get(fecha=date.today(), numero_ordenio=(int(n)-1))
sumar = ordenio3.cantidad
formOrdenio.total = (formOrdenio.cantidad + sumar)
# sumo total
ordenio2.total = (formOrdenio.cantidad + sumar)
ordenio2.save()
except ObjectDoesNotExist:
formOrdenio.total = formOrdenio.cantidad
formOrdenio.ganado = ganado
formOrdenio.fecha = ordenio.fecha
formOrdenio.save()
return redirect(reverse('edita_ganado_ordenio', kwargs={'ganado_id': ganado_id, 'num_ordenio':num_ordenio
}))
else:
ordenio = ganado.ordenios.get(numero_ordenio=num_ordenio, fecha=fecha_hoy)
formOrdenio = ordenioForm(instance=ordenio)
ordenio = Ordenio.objects.get(fecha=date.today(), numero_ordenio=1)
if cont_ordenios > cantidad:
if (cantidad == 2) & (ordenio.unique_ordenio):
rangee = range(2)
if (ordenio.unique_ordenio):
num_ordenios = 1
rangee = range(2)
else:
rangee = range(cont_ordenios+1)
num_ordenios = cont_ordenios
return render_to_response('edita_ganado_ordenio.html',
{'ganado_id': ganado_id,
'formOrdenio': formOrdenio,
'range': rangee,
'number_messages': number_message,
'num_ordenios': num_ordenios},
context_instance=RequestContext(request))
@login_required
def list_cattle(request):
user = request.user
number_message = number_messages(request, user.username)
return render_to_response('list_cattle.html',
{'number_messages': number_message},
context_instance=RequestContext(request))
@login_required
def list_cattle_terneras(request):
user = request.user
number_message = number_messages(request, user.username)
return render_to_response('list_cattle_ternera.html',
{'number_messages': number_message},
context_instance=RequestContext(request))
@login_required
def list_cattle_media(request):
user = request.user
number_message = number_messages(request, user.username)
return render_to_response('list_cattle_media.html',
{'number_messages': number_message},
context_instance=RequestContext(request))
@login_required
def list_cattle_fierro(request):
user = request.user
number_message = number_messages(request, user.username)
return render_to_response('list_cattle_fierro.html',
{'number_messages': number_message},
context_instance=RequestContext(request))
@login_required
def list_cattle_vientre(request):
user = request.user
number_message = number_messages(request, user.username)
return render_to_response('list_cattle_vientre.html',
{'number_messages': number_message},
context_instance=RequestContext(request))
@login_required
def list_cattle_vaca(request):
user = request.user
number_message = number_messages(request, user.username)
return render_to_response('list_cattle_vaca.html',
{'number_messages': number_message},
context_instance=RequestContext(request))
@login_required
def list_cattle_male(request):
user = request.user
number_message = number_messages(request, user.username)
return render_to_response('list_cattles_male.html',
{'number_messages': number_message},
context_instance=RequestContext(request))
def calcula_edad_anios(request, date):
# Get the current date
now = datetime.datetime.utcnow()
now = now.date()
# Get the difference between the current date and the birthday
age = dateutil.relativedelta.relativedelta(now, date)
age = age.years
return age
def calcula_edad_meses(request, date):
now = datetime.datetime.utcnow()
now = now.date()
age = dateutil.relativedelta.relativedelta(now, date)
age = age.months
return age
def calcula_edad_dias(request, date):
now = datetime.datetime.utcnow()
now = now.date()
age = dateutil.relativedelta.relativedelta(now, date)
age = age.days
return age
def calcula_etapa(request, anios, meses, etapa_ternera, etapa_vacona_media, etapa_vacona_fierro, etapa_vacona_vientre, etapa_vaca):
multiplicador = 12
if( (multiplicador * anios) + meses ) < etapa_ternera:
valor_etapa=0
elif ( (multiplicador * anios) + meses ) < etapa_vacona_media:
valor_etapa=1
elif ( (multiplicador * anios) + meses ) < etapa_vacona_fierro:
valor_etapa=2
elif ( (multiplicador * anios) + meses ) < etapa_vacona_vientre:
valor_etapa=3
else:
valor_etapa=4
return valor_etapa
@login_required
def edita_ganado(request, ganado_id):
id_user = request.user
number_message = number_messages(request, id_user.username)
ganaderia = Ganaderia.objects.get(perfil=id_user)
configuracion = Configuracion.objects.get(id=ganaderia.configuracion_id)
ganado = Ganado.objects.get(id=ganado_id)
et = ganado.etapas.all()
if configuracion.tipo_identificacion== 'simple':
identificacion_s = Identificacion_Simple.objects.get(id=ganado.identificacion_simple.id)
else:
identificacion_e = Identificacion_Ecuador.objects.get(id=ganado.identificacion_ecuador.id)
ganado = Ganado.objects.get(id=ganado.id)
if request.method == 'POST':
form2 = ganadoForm(request.POST, request.FILES, instance=ganado)
if configuracion.tipo_identificacion == 'simple':
form = tipoSimpleForm(request.POST, instance=identificacion_s)
if form.is_valid() and form2.is_valid():
# pauso guardar ganado para agregar atributos
form2 = form2.save(commit=False)
form2.ganaderia = ganaderia
form2.identificacion_simple = form.save()
anios = calcula_edad_anios(request, form2.nacimiento)
meses = calcula_edad_meses(request, form2.nacimiento)
form2.edad_anios = anios
form2.edad_meses = meses
form2.edad_dias = calcula_edad_dias(request, form2.nacimiento)
# saber cual es la ultima etapa de este ganado
et_actual = calcula_etapa(request, anios, meses, configuracion.etapa_ternera, configuracion.etapa_vacona_media, configuracion.etapa_vacona_fierro, configuracion.etapa_vacona_vientre, configuracion.etapa_vaca)
for etapa in et:
if etapa.nombre == 0:
id = etapa.nombre
elif etapa.nombre == 1:
id = etapa.nombre
else:
id = etapa.nombre
#etapa.is_active=False
etapa.save()
if id != et_actual:
etapa_antigua = ganado.etapas.get(nombre=id, is_active=True)
etapa_antigua.is_active = False
etapa_antigua.save()
fecha = datetime.date.today()
et = etapaForm()
et = et.save(commit=False)
et.fecha_inicio=fecha
et.nombre = et_actual
et.observaciones='ninguna observacion'
form2.save()
et.ganado = Ganado.objects.get(id=form2.id)
et.is_active = True
et.save()
else:
form2.save()
else:
form = tipoNormaEcuadorForm(request.POST, instance=identificacion_e)
if form.is_valid() and form2.is_valid():
# pauso guardar ganado para agregar atributos
form2 = form2.save(commit=False)
form2.ganaderia = ganaderia
form2.identificacion_ecuador = form.save()
anios = calcula_edad_anios(request, form2.nacimiento)
meses = calcula_edad_meses(request, form2.nacimiento)
form2.edad_anios = anios
form2.edad_meses = meses
form2.edad_dias = calcula_edad_dias(request, form2.nacimiento)
# saber cual es la ultima etapa de este ganado
et_actual = calcula_etapa(request, anios, meses, configuracion.etapa_ternera, configuracion.etapa_vacona_media, configuracion.etapa_vacona_fierro, configuracion.etapa_vacona_vientre, configuracion.etapa_vaca)
for etapa in et:
if etapa.nombre == 0:
id = etapa.nombre
elif etapa.nombre == 1:
id = etapa.nombre
else:
id = etapa.nombre
#etapa.is_active=False
etapa.save()
if id != et_actual:
etapa_antigua = ganado.etapas.get(nombre=id, is_active=True)
etapa_antigua.is_active = False
etapa_antigua.save()
fecha = datetime.date.today()
et = etapaForm()
et = et.save(commit=False)
et.fecha_inicio=fecha
et.nombre = et_actual
et.observaciones='ninguna observacion'
form2.save()
et.ganado = Ganado.objects.get(id=form2.id)
et.is_active = True
et.save()
else:
form2.save()
return redirect(reverse('list_cattle'))
elif configuracion.tipo_identificacion == 'simple':
form = tipoSimpleForm(instance=identificacion_s)
form2 = ganadoForm(instance=ganado)
else:
form = tipoNormaEcuadorForm(instance=identificacion_e)
form2 = ganadoForm(instance=ganado)
return render_to_response('edita_ganado.html',
{'formIdentificacion': form,
'formGanado': form2,
'id_cattle': ganado_id,
'ganado': ganado,
'number_messages': number_message},
context_instance=RequestContext(request))
@login_required
def edit_cattle_male(request, cattle_id):
user = request.user
number_message = number_messages(request, user.username)
farm = Ganaderia.objects.get(perfil=user)
configuration = Configuracion.objects.get(id=farm.configuracion_id)
cattle = Ganado.objects.get(id=cattle_id)
if configuration.tipo_identificacion== 'simple':
identification_simple = Identificacion_Simple.objects.get(id=cattle.identificacion_simple.id)
else:
identification_ecuador = Identificacion_Ecuador.objects.get(id=cattle.identificacion_ecuador.id)
if request.method == 'POST':
form2 = ganadoForm(request.POST, request.FILES, instance=cattle)
if configuration.tipo_identificacion == 'simple':
form = tipoSimpleForm(request.POST, instance=identification_simple)
if form.is_valid() and form2.is_valid():
# pauso guardar ganado para agregar atributos
form2 = form2.save(commit=False)
form2.ganaderia = farm
form2.identificacion_simple = form.save()
anios = calcula_edad_anios(request, form2.nacimiento)
meses = calcula_edad_meses(request, form2.nacimiento)
form2.edad_anios = anios
form2.edad_meses = meses
form2.edad_dias = calcula_edad_dias(request, form2.nacimiento)
form2.save()
else:
form = tipoNormaEcuadorForm(request.POST, instance=identification_ecuador)
if form.is_valid() and form2.is_valid():
# pauso guardar ganado para agregar atributos
form2 = form2.save(commit=False)
form2.ganaderia = farm
form2.identificacion_ecuador = form.save()
anios = calcula_edad_anios(request, form2.nacimiento)
meses = calcula_edad_meses(request, form2.nacimiento)
form2.edad_anios = anios
form2.edad_meses = meses
form2.edad_dias = calcula_edad_dias(request, form2.nacimiento)
form2.save()
return redirect(reverse('list_cattle_male'))
elif configuration.tipo_identificacion == 'simple':
form = tipoSimpleForm(instance=identification_simple)
form2 = ganadoForm(instance=cattle)
else:
form = tipoNormaEcuadorForm(instance=identification_ecuador)
form2 = ganadoForm(instance=cattle)
return render_to_response('edita_ganado.html',
{'formIdentificacion': form,
'formGanado': form2,
'id_cattle': cattle_id,
'ganado': cattle,
'number_messages': number_message},
context_instance=RequestContext(request))
@login_required
def add_insemination(request):
user = request.user
number_message = number_messages(request, user.username)
farm = Ganaderia.objects.get(perfil=user)
if request.method == 'POST':
formInsemination = inseminationForm(request.POST)
if formInsemination.is_valid():
formInsemination = formInsemination.save(commit=False)
if Insemination.objects.filter(farm=farm).count() > 0:
insemination = Insemination.objects.filter(farm=farm).order_by('rp').reverse()[:1]
for i in insemination:
formInsemination.rp = i.rp+1
else:
formInsemination.rp = 1
formInsemination.farm = farm
formInsemination.save()
return redirect(reverse('list_insemination'))
elif request.method == 'GET':
formInsemination = inseminationForm()
return render_to_response('add_insemination.html',
{'formInsemination': formInsemination,
'number_messages': number_message},
context_instance=RequestContext(request))
@login_required
def edit_insemination(request, insemination_id):
user = request.user
number_message = number_messages(request, user.username)
farm = Ganaderia.objects.get(perfil=user)
insemination = Insemination.objects.get(id=insemination_id)
if request.method == 'POST':
formInsemination = inseminationForm(request.POST, instance=insemination)
if formInsemination.is_valid():
formInsemination = formInsemination.save(commit=False)
formInsemination.farm = farm
formInsemination.rp = insemination.rp
formInsemination.save()
return redirect(reverse('list_insemination'))
else:
formInsemination = inseminationForm(instance=insemination)
return render_to_response('edit_insemination.html',
{'formInsemination': formInsemination,
'insemination_id': insemination_id,
'number_messages': number_message},
context_instance=RequestContext(request))
@login_required
def list_insemination(request):
user = request.user
number_message = number_messages(request, user.username)
return render_to_response('list_insemination.html',
{'number_messages': number_message},
context_instance=RequestContext(request))
@login_required
def add_cattle(request):
user = request.user
number_message = number_messages(request, user.username)
try:
farm = Ganaderia.objects.get(perfil=user)
except ObjectDoesNotExist:
return redirect(reverse('agrega_ganaderia_config'))
configuration = Configuracion.objects.get(id=farm.configuracion_id)
if request.method == 'POST':
formGanado = ganadoForm(request.POST, request.FILES)
if configuration.tipo_identificacion == 'simple':
formIdentificacion = tipoSimpleForm(request.POST)
if formIdentificacion.is_valid() and formGanado.is_valid():
# pauso guardar ganado para agregar atributos
formGanado = formGanado.save(commit=False)
formIdentificacion = formIdentificacion.save(commit=False)
if Ganado.objects.filter(ganaderia=farm).count() > 0:
cattle = Ganado.objects.filter(ganaderia=farm).order_by('id').reverse()[:1]
for g in cattle:
rp_old = Identificacion_Simple.objects.filter(id=g.identificacion_simple.id).order_by('rp').reverse()[:1]
for r in rp_old:
formIdentificacion.rp = r.rp+1
else:
formIdentificacion.rp = configuration.initial_rp
# disminuir las pajuelas
if formGanado.forma_concepcion == 0: # inseminacion
try:
insemination = Insemination.objects.get(rp=formIdentificacion.rp_padre)
insemination.amount_pajuelas = insemination.amount_pajuelas - 1
insemination.save()
except ObjectDoesNotExist:
pass
# crea objeto etapa
date = datetime.date.today()
if formGanado.genero == 1:
et = etapaForm()
et = et.save(commit=False)
et.fecha_inicio=date
anios = calcula_edad_anios(request, formGanado.nacimiento)
meses = calcula_edad_meses(request, formGanado.nacimiento)
et.nombre = calcula_etapa(request, anios, meses, configuration.etapa_ternera, configuration.etapa_vacona_media, configuration.etapa_vacona_fierro, configuration.etapa_vacona_vientre, configuration.etapa_vaca)
et.observaciones='ninguna observacion'
formGanado.ganaderia = farm
formIdentificacion.save()
formGanado.identificacion_simple = formIdentificacion
formGanado.edad_anios = calcula_edad_anios(request, formGanado.nacimiento)
formGanado.edad_meses = calcula_edad_meses(request, formGanado.nacimiento)
formGanado.edad_dias = calcula_edad_dias(request, formGanado.nacimiento)
formGanado.save()
if formGanado.genero == 1:
et.ganado = Ganado.objects.get(id=formGanado.id)
et.is_active = True
et.save()
if (et.nombre == 3) | (et.nombre == 4):
periodo = Ciclo()
periodo.nombre = 0
periodo.fecha_inicio = date.today()
periodo.fecha_fin = date.today()+timedelta(days=configuration.periodo_vacio)
periodo.ganado = formGanado
periodo.is_active = True
periodo.save()
return redirect(reverse('list_cattle'))
else:
formIdentificacion = tipoNormaEcuadorForm(request.POST)
if formIdentificacion.is_valid() and formGanado.is_valid():
# pauso guardar ganado para agregar atributos
formGanado = formGanado.save(commit=False)
# crea objeto etapa
date = datetime.date.today()
if formGanado.genero == 1:
et = etapaForm()
et = et.save(commit=False)
et.fecha_inicio=date
anios = calcula_edad_anios(request, formGanado.nacimiento)
meses = calcula_edad_meses(request, formGanado.nacimiento)
et.nombre = calcula_etapa(request, anios, meses, configuration.etapa_ternera, configuration.etapa_vacona_media, configuration.etapa_vacona_fierro, configuration.etapa_vacona_vientre, configuration.etapa_vaca)
et.observaciones='ninguna observacion'
formGanado.ganaderia = farm
formIdentificacion = formIdentificacion.save(commit=False)
if Ganado.objects.filter(ganaderia=farm).count() > 0:
cattle = Ganado.objects.filter(ganaderia=farm).order_by('id').reverse()[:1]
for g in cattle:
rp_old = Identificacion_Ecuador.objects.filter(id=g.identificacion_ecuador.id).order_by('rp').reverse()[:1]
for r in rp_old:
formIdentificacion.rp = r.rp+1
else:
formIdentificacion.rp = configuration.initial_rp
formIdentificacion.save()
formGanado.identificacion_ecuador = formIdentificacion
formGanado.edad_anios = calcula_edad_anios(request, formGanado.nacimiento)
formGanado.edad_meses = calcula_edad_meses(request, formGanado.nacimiento)
formGanado.edad_dias = calcula_edad_dias(request, formGanado.nacimiento)
formGanado.save()
if formGanado.genero == 1:
et.ganado = Ganado.objects.get(id=formGanado.id)
et.is_active = True
et.save()
if (et.nombre == 3) | (et.nombre == 4):
periodo = Ciclo()
periodo.nombre = 0
periodo.fecha_inicio = date.today()
periodo.fecha_fin = date.today()+timedelta(days=configuration.periodo_vacio)
periodo.ganado = formGanado
periodo.is_active = True
periodo.save()
return redirect(reverse('list_cattle'))
elif configuration.tipo_identificacion == 'simple':
formIdentificacion = tipoSimpleForm()
formGanado = ganadoForm()
else:
formIdentificacion = tipoNormaEcuadorForm()
formGanado = ganadoForm()
return render_to_response('add_cattle.html',
{'formIdentificacion': formIdentificacion,
'formGanado': formGanado,
'number_messages': number_message},
context_instance=RequestContext(request))
@login_required
def edita_ganado_celo(request, ganado_id):
id_user = request.user
number_message = number_messages(request, id_user.username)
ganaderia = Ganaderia.objects.get(perfil=id_user)
configuracion = Configuracion.objects.get(id=ganaderia.configuracion_id)
ganado = Ganado.objects.get(id=ganado_id)
ce = ganado.celos.all()
if ganado.celos.filter(is_active=True).count() > 0:
if ganado.celos.get(ganado_id=ganado_id, is_active=True):
celo_ganado = ganado.celos.get(ganado_id=ganado_id, is_active=True)
if request.method == 'POST':
form = editaGanadoCeloForm(request.POST)
if form.is_valid():
form = form.save(commit=False)
# saber cual es la ultima etapa de este ganado
for celo in ce:
fecha_inicio = celo.fecha_inicio
id = celo.id
if fecha_inicio != form.fecha_inicio:
for celo in ce:
celo.is_active = False
celo.save()
d2=datetime.timedelta(hours=configuracion.celo_duracion)
age=form.fecha_inicio + d2
form.estado = 0
form.fecha_fin = age
form.ganado = ganado
form.is_active = True
form.save()
return redirect(reverse('list_cattle'))
else:
c = Celo.objects.get(id=id)
c.observaciones=form.observaciones
c.save()
return redirect(reverse('list_cattle'))
else:
form = editaGanadoCeloForm(instance=celo_ganado)
else:
form = editaGanadoCeloForm()
if request.method == 'POST':
form = editaGanadoCeloForm(request.POST)
if form.is_valid():
form = form.save(commit=False)
d2=datetime.timedelta(hours=configuracion.celo_duracion)
age=form.fecha_inicio + d2
form.estado = 0
form.fecha_fin = age
form.ganado = ganado
form.is_active = True
form.save()
return redirect(reverse('list_cattle'))
if ganado.celos.all():
return render_to_response('edita_ganado_celo.html',
{'form': form,
'ganado_id': ganado_id,
'number_messages': number_message},
context_instance=RequestContext(request))
else:
return render_to_response('edita_ganado_celo.html',
{'form': form,
'ganado_id': ganado_id,
'number_messages': number_message},
context_instance=RequestContext(request))
@login_required
def add_service(request, id_cattle):
user = request.user
number_message = number_messages(request, user.username)
cattle = Ganado.objects.get(id=id_cattle)
if request.method == 'POST':
farm = Ganaderia.objects.get(perfil=user)
formAttempt = attemptForm(request.POST)
if formAttempt.is_valid():
formAttempt = formAttempt.save(commit=False)
verification = Verification()
verification.initial_date = date.today()
verification.is_active = True
verification.cattle = cattle
verification.save()
# restar pajuela
if formAttempt.type_conception == 0:
insemina = Insemination.objects.get(rp=formAttempt.rp_father)
insemina.amount_pajuelas = insemina.amount_pajuelas - 1
insemina.save()
formAttempt.attempt = 1
date_actual = date.today()+timedelta(days=21)
formAttempt.attempt_date = date_actual
formAttempt.verification = verification
formAttempt.save()
for i in range(2, farm.configuracion.intentos_verificacion_celo+1):
date_actual = date_actual+timedelta(days=21)
attempt = Attempt()
attempt.attempt = i
attempt.attempt_date = date_actual
attempt.verification = verification
attempt.type_conception = formAttempt.type_conception
attempt.rp_father = formAttempt.rp_father
attempt.save()
return redirect(reverse('list_cattle'))
elif request.method == 'GET':
v = Verification.objects.filter(is_active=True, cattle=id_cattle).count()
if v > 0:
return redirect(reverse('add_attempt_service', kwargs={'id_cattle': id_cattle}))
else:
formAttempt = attemptForm()
return render_to_response('add_service.html',
{'id_cattle': id_cattle,
'formAttempt': formAttempt,
'number_messages': number_message},
context_instance=RequestContext(request))
@login_required
def add_attempt_service(request, id_cattle):
user = request.user
number_message = number_messages(request, user.username)
cattle = Ganado.objects.get(id=id_cattle)
attempts = Attempt.objects.filter(verification__cattle=cattle, verification__is_active=True).order_by('id')
return render_to_response('add_attempt_service.html',
{'attempts': attempts,
'number_messages': number_message},
context_instance=RequestContext(request))
@login_required
def verify_attempt(request, id_attempt):
user = request.user
number_message = number_messages(request, user.username)
farm = Ganaderia.objects.get(perfil=user)
configuration = Configuracion.objects.get(id=farm.configuracion_id)
attempt = Attempt.objects.get(id=id_attempt)
if request.method == 'POST':
formAttempt = verifyAttemptForm(request.POST, instance=attempt)
if formAttempt.is_valid():
formAttempt = formAttempt.save(commit=False)
formAttempt.save()
ganado = Ganado.objects.get(id=attempt.verification.cattle.id)
# si fue correcto
if formAttempt.state == 0:
attempt.verification.is_active=False
attempt.verification.save()
# agrego el nuevo ciclo
ciclo = Ciclo.objects.get(ganado_id=ganado.id, is_active=True, nombre=0)
ciclo.is_active = False
ciclo.save()
ciclo = Ciclo()
ciclo.nombre = 3
ciclo.fecha_inicio = date.today()
ciclo.fecha_fin = date.today()+timedelta(days=configuration.periodo_gestacion)
ciclo.ganado = ganado
ciclo.is_active = True
ciclo.save()
# restar pajuela
if formAttempt.type_conception == 0:
insemina = Insemination.objects.get(rp=formAttempt.rp_father)
insemina.amount_pajuelas = insemina.amount_pajuelas - 1
insemina.save()
# agrego la gestacion
gestacion = Gestacion()
gestacion.fecha_servicio = date.today()
gestacion.fecha_parto = date.today() + timedelta(days=configuration.periodo_gestacion)
gestacion.is_active = True
gestacion.ganado = ganado
gestacion.save()
return redirect(reverse('list_cattle'))
# compruebo si es el ultimo intento
if (configuration.intentos_verificacion_celo==formAttempt.attempt):
# desactiva la verificacion
v = Verification.objects.get(cattle=ganado, is_active=True)
v.is_active=False
v.save()
# crea el celo
celo = Celo()
celo.fecha_inicio = datetime.datetime.now(pytz.timezone('America/Guayaquil'))
celo.fecha_fin = celo.fecha_inicio + relativedelta(days=configuration.celo_frecuencia_error)
celo.estado = 0
celo.observaciones = 'Celo creado por HatosGanaderos'
celo.ganado = ganado
celo.is_active = True
celo.save()
id_cattle = attempt.verification.cattle_id
return redirect(reverse('add_attempt_service', kwargs={'id_cattle': id_cattle}))
else:
formVerifyAttempt = verifyAttemptForm(instance=attempt)
return render_to_response('verify_attempt.html',
{'formVerifyAttempt': formVerifyAttempt,
'number_messages': number_message},
context_instance=RequestContext(request))
@login_required
def gestacion(request, id_cattle):
user = request.user
number_message = number_messages(request, user.username)
farm = Ganaderia.objects.get(perfil=user)
configuration = Configuracion.objects.get(id=farm.configuracion_id)
ganado = Ganado.objects.get(id=id_cattle)
gestacion = Gestacion.objects.get(ganado=ganado, is_active=True)
if request.method == 'POST':
formGestacion = gestacionForm(request.POST, instance=gestacion)
if formGestacion.is_valid():
formGestacion = formGestacion.save(commit=False)
# gestacion en false
gestacion.is_active = False
gestacion.save()
# desactivar los anteriores ciclos
for c in ganado.ciclos.all():
if c.is_active:
c.is_active = False
c.save()
# nuevo ciclo de lactancia
ciclo = Ciclo()
ciclo.nombre = 2
ciclo.fecha_inicio = date.today()
ciclo.fecha_fin = date.today() + timedelta(days=configuration.periodo_lactancia)
ciclo.is_active = True
ciclo.ganado = ganado
ciclo.save()
# nuevo ciclo vacio
ciclo = Ciclo()
ciclo.nombre = 0
ciclo.fecha_inicio = date.today()
ciclo.fecha_fin = date.today() + timedelta(days=configuration.periodo_vacio)
ciclo.is_active = True
ciclo.ganado = ganado
ciclo.save()
formGestacion.save()
return redirect(reverse('list_cattle'))
else:
formGestacion = gestacionForm(instance=gestacion)
if configuration.tipo_identificacion == 'simple':
rp_cattle = ganado.identificacion_simple.rp
else:
rp_cattle = ganado.identificacion_ecuador.rp
return render_to_response('gestacion.html',
{'formGestacion': formGestacion,
'id_cattle': id_cattle,
'rp_cattle': rp_cattle,
'number_messages': number_message},
context_instance=RequestContext(request))
@login_required
def problem_gestacion(request, id_cattle):
user = request.user
number_message = number_messages(request, user.username)
farm = Ganaderia.objects.get(perfil=user)
configuration = Configuracion.objects.get(id=farm.configuracion_id)
ganado = Ganado.objects.get(id=id_cattle)
gestacion = Gestacion.objects.get(ganado=ganado, is_active=True)
if request.method == 'POST':
formProblemGestacion = problemGestacionForm(request.POST)
if formProblemGestacion.is_valid():
formProblemGestacion = formProblemGestacion.save(commit=False)
# en el caso de aborto
if formProblemGestacion.tipo_problema == 0:
# desactivar el anterior o anteriores ciclos
if ganado.ciclos.all():
for cicl in ganado.ciclos.all():
if cicl.nombre != 2:
cicl.is_active = False
cicl.save()
# nuevo ciclo vacio
ciclo = Ciclo()
ciclo.nombre = 0
ciclo.fecha_inicio = date.today()
ciclo.fecha_fin = date.today() + timedelta(days=configuration.periodo_vacio)
ciclo.is_active = True
ciclo.ganado = ganado
ciclo.save()
# gestacion en false
gestacion.is_active = False
gestacion.save()
# en el caso de nacido muerto
elif formProblemGestacion.tipo_problema == 1:
# desactivar el anterior ciclo
if ganado.ciclos.all():
for cicl in ganado.ciclos.all():
if cicl.nombre != 2:
cicl.is_active = False
cicl.save()
# nuevo ciclo vacio
ciclo = Ciclo()
ciclo.nombre = 1
ciclo.fecha_inicio = date.today()
ciclo.fecha_fin = date.today() + timedelta(days=configuration.periodo_vacio)
ciclo.is_active = True
ciclo.ganado = ganado
ciclo.save()
# gestacion en false
gestacion.is_active = False
gestacion.save()
# en el caso de madre muerta
elif formProblemGestacion.tipo_problema == 2:
# ciclo en false
if ganado.ciclos.all():
for cicl in ganado.ciclos.all():
ciclo.is_active = False
ciclo.save()
# se llena el DownCattle
down_cattle = DownCattle()
down_cattle.date = date.today()
down_cattle.cause_down = 0
down_cattle.observations = 'Desceso del animal, HatosGanaderos.'
down_cattle.save()
# se asigna el down_cattle al ganado
ganado.down_cattle = down_cattle
ganado.save()
# gestacion en false
gestacion.is_active = False
gestacion.save()
# se cancela la etapa
if ganado.etapas.all():
for et in ganado.etapas.all():
et.is_active = False
et.save()
# se registra la cria
'''attempt = Attempt.objects.get(verification_id=ganado.id, state=0)
cria = Ganado()
cria.ganaderia = farm
cria.nacimiento = date.today()
cria.genero = 2
cria.raza = 12
cria.forma_concepcion = attempt.type_conception
cria.observaciones = 'Nacido pero sin madre'
cria.edad_anios = calcula_edad_anios(request, formProblemGestacion.fecha_problema)
cria.edad_meses = calcula_edad_meses(request, formProblemGestacion.fecha_problema)
cria.edad_dias = calcula_edad_dias(request, formProblemGestacion.fecha_problema)
# se crea la identificacion dependiendo (simple o ecuador)
if configuration.tipo_identificacion == 'simple':
id_simple = Identificacion_Simple()
if Ganado.objects.filter(ganaderia=farm).count() > 0:
ganad = Ganado.objects.filter(ganaderia=farm).reverse()[:1]
for g in ganad:
rp_old = Identificacion_Simple.objects.filter(id=g.id).order_by('rp').reverse()[:1]
for r in rp_old:
id_simple.rp = r.rp+1
id_simple.nombre = 'Temporal'
id_simple.rp_madre = ganado.identificacion_simple.rp
id_simple.rp_padre = attempt.rp_father
id_simple.save()
cria.identificacion_simple = id_simple
cria.save()
else:
id_ecuador = Identificacion_Ecuador()
if Ganado.objects.filter(ganaderia=farm).count() > 0:
ganad = Ganado.objects.filter(ganaderia=farm).reverse()[:1]
for g in ganad:
rp_old = Identificacion_Ecuador.objects.filter(id=g.id).order_by('rp').reverse()[:1]
for r in rp_old:
id_ecuador.rp = r.rp+1
id_ecuador.siglas_pais = 'EC'
id_ecuador.codigo_pais = '593'
id_ecuador.codigo_provincia = '7'
id_ecuador.numero_serie = '12345'
id_ecuador.codigo_barras = '6789'
id_ecuador.nombre = 'Temporal'
id_ecuador.rp_madre = ganado.identificacion_ecuador.rp
id_ecuador.rp_padre = attempt.rp_father
id_ecuador.save()
cria.identificacion_ecuador = id_ecuador
cria.save()'''
# en el caso de los dos muertos
elif formProblemGestacion.tipo_problema == 3:
# ciclo en false
ciclo = Ciclo.objects.get(ganado=ganado, is_active=True)
ciclo.is_active = False
ciclo.save()
# se llena el DownCattle
down_cattle = DownCattle()
down_cattle.date = date.today()
down_cattle.cause_down = 0
down_cattle.observations = 'Desceso del animal'
down_cattle.save()
# se asigna el down_cattle al ganado
ganado.down_cattle = down_cattle
ganado.save()
# gestacion en false
gestacion.is_active = False
gestacion.save()
# se cancela la etapa
if ganado.etapas.all():
for et in ganado.etapas.all():
et.is_active = False
et.save()
formProblemGestacion.save()
gestacion.problema = formProblemGestacion
gestacion.save()
return redirect(reverse('list_cattle'))
elif request.method == 'GET':
formProblemGestacion = problemGestacionForm()
return render_to_response('problem_gestacion.html',
{'formProblemGestacion': formProblemGestacion,
'id_cattle': id_cattle,
'number_messages': number_message},
context_instance=RequestContext(request))
# aplazar notificaciones
@login_required
def deferEtapa(request, notification_id):
if request.method == 'POST':
formDeferEtapa = deferEtapaForm(request.POST)
if formDeferEtapa.is_valid():
notification = Notification.objects.get(id=notification_id)
formDeferEtapa = formDeferEtapa.save(commit=False)
# cambia la notificacion de registro de servicio
if (notification.name==0):
try:
Notification.objects.get(ident_cattle=notification.ident_cattle, name=1, state=2)
n = Notification.objects.get(ident_cattle=notification.ident_cattle, name=1, state=2)
n.end_date = notification.end_date + relativedelta(days=formDeferEtapa.number_days)
n.save()
except ObjectDoesNotExist:
pass
# cambia la notificacion de celo
elif (notification.name==1):
try:
Notification.objects.get(ident_cattle=notification.ident_cattle, name=0, state=2)
n = Notification.objects.get(ident_cattle=notification.ident_cattle, name=0, state=2)
n.end_date = notification.end_date + relativedelta(days=formDeferEtapa.number_days)
n.save()
except ObjectDoesNotExist:
pass
# modifico el fin del celo
try:
c = Celo.objects.get(ganado=notification.ident_cattle, is_active=True)
c.fecha_fin = c.fecha_fin + relativedelta(days=formDeferEtapa.number_days)
c.save()
except ObjectDoesNotExist:
pass
# actualizo la deferetapa en caso de existir
try:
d = DeferEtapa.objects.get(cattle_id=notification.ident_cattle, is_active=True)
d.number_days = d.number_days + formDeferEtapa.number_days
d.observations = d.observations + '. ' + formDeferEtapa.observations
d.save()
except ObjectDoesNotExist:
formDeferEtapa.is_active = True
formDeferEtapa.cattle_id = notification.ident_cattle
formDeferEtapa.save()
notification.end_date = notification.end_date + relativedelta(days=formDeferEtapa.number_days)
notification.save()
return redirect(reverse('list_notifications'))
else:
notification = Notification.objects.get(id=notification_id)
formDeferEtapa = deferEtapaForm()
return render_to_response('deferEtapa.html',
{'formDeferEtapa': formDeferEtapa,
'notification': notification},
context_instance=RequestContext(request))