Rotaciones
Rotaciones
El flujo de rotaciones esta dividio en dos partes. Un ABM de rotaciones y la parte de actividades.
DATOS DE UNA ROTACION:
{
"crop_variety_id": 37582,
"crop_order": 1,
"end_date": null,
"yeargroup": 2022,
"crop_variety_name": "Colorado Chino",
"field_id": 258482,
"crop_id": 966,
"crop_name": "Ajo",
"cicle_id": 65847,
"rotation_uuid": "898430ea-fc6f-4a46-a7c6-9890ea702a41",
"ha": null,
"start_date": null
}
- "crop_variety_id" → id de la variedad del cultivo
- "crop_order" → orden de esta rotacion en este ciclo
- "end_date" → fecha de finalizacion de rotacion (es la que puede modificar el user)
- "yeargroup" → este es el que usamos siempre en la plataforma, es la referencia para el ciclo
- "crop_variety_name" → nombre de la variedad
- "field_id" → id del lote al cual esta rotacion esta relacionada
- "crop_id" → id del cultivo de la rotacion
- "crop_name" → nombre del cultivo
- "cicle_id" → id del ciclo (relacion yeargroup-field_id)
- "rotation_uuid" → uuid de rotacion para identificarlas mas facil
- "ha" → ha plantadas (es la que puede modificar el user)
- "start_date" → fecha de inicio de esta rotacion (es la que puede modificar el user)
Api bonus
api/rotations/listCrops
Esta api solo tiene expuesto el metodo GET
No se si realmente la necesitan pero es una api que hice que te trae todos los cultivos del maesto (id_usuario = null). Acepta paginacion y buscador.
Acepta los siguientes parametros
- search → String que sea contenido en el nombre del cultivo
- page → Numero de pagina que desea, la primera es 0
- page_size → cantidad de registros que desea en la respuesta
Ejemplo de respuesta:
Tener en cuenta que son mas de dos cultivos y todavia no esta el nuevo maestro en la db, son datos de ejemplo pero les va a devolver esto siempre
{
"pagination": {
"cant_items": 62,
"last_page": false,
"total_pages": 4,
"page_size": 20,
"current_page": 0
},
"data": [
{
"crop_id": 957,
"crop_name": "Aguacate"
},
{
"crop_id": 966,
"crop_name": "Ajo"
},
]
}
Si no evian page, le hago una paginacion por default de un PAGE_SIZE = 50, en caso de querer TODOS los registros enviar page = -1
El pagination te devuelve buena data por si la necesitan.
API ROTATIONS
api/rotations
GET
La ruta puede variar, si se envia asi pelada, te trae todas las rotaciontes. Esta api esta preparada para paginar, buscar y filtrar. Por ahora solo estan implementado 2 filtros, si se necesitan se liberan los demas. Esto es mas para web ya que mobile si o si necesita toda la data de una.
query arguments:
- yeargroup → recibe el yeargroup que usamos comunmente (2022, 2023, etc)
- farms_id → recibe una lista de campos y lo VALIDA CON PERMISOS DEL USUARIO!!!
En caso de no enviar nada, esta api te devuelve TODAS las rotaciones DE TODOS LOS CAMPOS QUE TENGA PERMISOS EL USUARIO sin importar campania, lote ni nada, tener en cuenta esto.
RESPONSE
[
{
"field_id": 258289,
"farm_id": 72560,
"field_name": "Test",
"cicle_id": 65816,
"yeargroup": 2022,
"rotation_uuid": "9bd9fbac-4e54-11ed-8ef4-531072a071d7",
"crop_order": 1,
"crop_id": 966,
"crop_name": "Ajo"
},
{
"field_id": 258289,
"farm_id": 72560,
"field_name": "Test",
"cicle_id": 65837,
"yeargroup": 2023,
"rotation_uuid": "b1c68881-1e34-45d2-9685-45c4be54a0c8",
"crop_order": 1,
"crop_id": 6,
"crop_name": "Cebada"
},
{
"field_id": 258289,
"farm_id": 72560,
"field_name": "Test",
"cicle_id": 65837,
"yeargroup": 2023,
"rotation_uuid": "5d127342-ab88-4642-bcda-3f046fc8cdfb",
"crop_order": 2,
"crop_id": 966,
"crop_name": "Ajo"
},
]
Toda esta info les puede ser util para consumir otras partes del feature tanto para la lista, ordenarlos, agruparlo y la vista calendario.
api/rotations/<uuid:rotation_uuid>
GET
Esta ruta es para listar una rotacion especifica.
Pegada de ejemplo:
/api/rotations/9bd9fbac-4e54-11ed-8ef4-531072a071d7
RESPONSE
Status: 200 OK
{
"end_date": null,
"yeargroup": 2022,
"field_id": 258289,
"crop_id": 966,
"crop_name": "Ajo",
"cicle_id": 65816,
"start_date": null,
"ha": null,
"crop_order": 1,
"rotation_uuid": "9bd9fbac-4e54-11ed-8ef4-531072a071d7"
}
Se puede ver que tiene otra data, como ha, end_date,start_date. estos son los valores que se usan en la configuracion avanzada de cada rotacion.
En caso de enviar una rotacion que no exista la api responde 400
Status: 400 BAD REQUEST
{
"info": "Can not load rotation from DB",
"res": "error",
"code": "INVALID_ROT"
}
api/rotations
POST
Este endpoint se debe mandar data por el body para crear una o mas rotaciones.
A continuacion paso el schema que es valido, esta en jsonschema pero se los explico
{
"rotations": {
"type": "array",
"items": {
"type": "object",
"patternProperties": {
"rotation_uuid": {"anyOf": [{"type": "string", "pattern": "uuid"}, {"type": "null"}]},
"cicle_id": {"anyOf": [{"type": "integer"}, {"type": "null"}]},
"field_id": {"type": "integer"},
"crop_id": {"type": "integer"},
"yeargroup": {"type": "integer"},
"ha": {"anyOf": [{"type": "integer"}, {"type": "null"}]},
"start_date": {"anyOf":["^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$",null]},
"end_date": {"anyOf":["^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$",null]}
}, "required": ["field_id", "crop_id", "yeargroup"]
}
}
}
La api quedo preparada para futuro poder cargar rotaciones con la data extra. Hoy la idea es que como minimo manden el field_id, el crop_id y el yeargroup.
PARA MOBILE
PUEDEN ENVIAR EL UUID por si lo quieren crear para offline, esta preparado, tengamos la buena practica de crearlo uds el uuid y usar ese para crear el de la db, asi ya dejamos preparado a futuro.
PARAMETROS
- rotation_uuid → uuid v4
- cicle_id → integer o null (no es obligatorio pero se puede)
- field_id → integer (OBLIGATORIO)
- crop_id → integer (OBLIGATORIO)
- yeargroup → integer (OBLIGATORIO)
- ha → integer o null (no es obligatorio pero se puede)
- start_date → datetime o nul (no es obligatorio) el patron de arriba es el que usamos comunmente
- end_date → datetime o nul (no es obligatorio)
Ahora les muestro un ejemplo para tambien mostrar las responses y sus posibles errores.
Pegada de ejemplo
{
"rotations":[
{
"field_id":258388,
"yeargroup":2023,
"cicle_id":null,
"rotation_uuid":null,
"crop_id":966
},
{
"field_id":258388,
"yeargroup":2022,
"cicle_id":658606,
"rotation_uuid":null,
"crop_id":6
},
{
"field_id":258388,
"yeargroup":2022,
"cicle_id":null,
"rotation_uuid":null,
"crop_id":6
},
{
"field_id":258388,
"yeargroup":2022,
"cicle_id":null,
"rotation_uuid":null,
"crop_id":1342
}
]
}
Fijese que de los 4 cambio un poco lo que mando. La respuesta de la api es la siguiente
Status: 200 OK
{
"created_ones": [
{
"end_date": null,
"yeargroup": 2022,
"field_id": 258388,
"crop_id": 6,
"crop_name": null,
"cicle_id": 65805,
"start_date": null,
"ha": null,
"crop_order": 4,
"rotation_uuid": "b11f12b1-3265-4756-b18b-45de101da547"
}
],
"unabled_to_be_created": [
{
"end_date": null,
"yeargroup": 2023,
"field_id": 258388,
"crop_id": 966,
"crop_name": null,
"cicle_id": 65836,
"start_date": null,
"motivo": {
"error_code": "MAX_AMOUNT_ROTATIONS",
"error_msg": "Can not create more rotations limit reached"
},
"ha": null,
"crop_order": null,
"rotation_uuid": null
},
{
"end_date": null,
"yeargroup": 2022,
"field_id": 258388,
"crop_id": 6,
"crop_name": null,
"cicle_id": 658606,
"start_date": null,
"motivo": {
"error_code": "INVALID_CICLE",
"error_msg": "The cicle id is invalid"
},
"ha": null,
"crop_order": null,
"rotation_uuid": null
},
{
"end_date": null,
"yeargroup": 2022,
"field_id": 258388,
"crop_id": 1342,
"crop_name": null,
"cicle_id": 65805,
"start_date": null,
"motivo": {
"error_code": "INVALID_CROP",
"error_msg": "The crop is not in DB "
},
"ha": null,
"crop_order": null,
"rotation_uuid": null
}
]
}
La api les devuelve 2 listas. 1 con las rotaciones que se pudieron crear y otra con las rotaciones que no se pudieron crear. Les muestro todas las posibilidades de error en esta respuesta y una de success.
Intentaron crear 4 rotaciones. Fiijense que el unico que se creo es el segundo registro que le envie en la api, los demas fallaron por diferentes motivos. Fijense que se les envia el motivo siendo el mismo que algunas apis responden. Des esta manera pueden infromar al usuario los errores por que no se crearon.
La api siempre devuelve 200 y la misma respuesta. si no pudo crear ninguna la lista creted_one queda vacia.
Los errores por lso cuales no se pueden crear rotaciones son los siguientes.
- Inserto un cultivo que no esta en nuestro maestro
- Me enviaste un cicle_id invalido (cicle_id tiene prioridad sobre yeargroup para campanias)
- Alcanzaste el maximo de rotaciones en este lote y esta campania (4 por producto)
api/rotations/uuid:rotation_uuid
DELETE
Este recibe una rotacion por path, el uuid para eliminarla
ACTUALIZAR DATA
Este es mas complicado, tiene 2 endpoints.
Endpoint 1
api/rotations/uuid:rotation_uuid
PATCH
Este es para que modifiques las cosas de una rotacion.
Propiedades que se pueden modificar:
- ha → integer
- crop_id → integer (valida contra db)
- start_date → timestamp (yyy-mm-dd Thh:mm:ssZ) el que usamos siempre
- end_date → timestamp (yyy-mm-dd Thh:mm:ssZ) el que usamos siempre
- variedad??
El patch acepta minimo 1 de estos o todos. La respuesta de la api es devolverte la rotacion con los nuevos valores.
Ejemplo:
ROTACION PRE CAMBIO
{
"crop_variety_id": 37582,
"crop_order": 1,
"end_date": null,
"yeargroup": 2022,
"crop_variety_name": "Colorado Chino",
"field_id": 258482,
"crop_id": 966,
"crop_name": "Ajo",
"cicle_id": 65847,
"rotation_uuid": "898430ea-fc6f-4a46-a7c6-9890ea702a41",
"ha": null,
"start_date": null
}
BODY:
{
"ha": 140,
"start_date":"2022-08-09 21:00:00.000",
"end_date": "2023-01-09 21:00:00.000",
"crop_id": 6
}
RESPONSE
Status: 200 OK
{
"crop_variety_id": 37582,
"crop_order": 1,
"end_date": "2023-01-09 21:00:00.000",
"yeargroup": 2022,
"crop_variety_name": "Colorado Chino",
"field_id": 258482,
"crop_id": 6,
"crop_name": "Cebada",
"cicle_id": 65847,
"rotation_uuid": "898430ea-fc6f-4a46-a7c6-9890ea702a41",
"ha": 140,
"start_date": "2022-08-09 21:00:00.000"
}
Endpoint 2
api/rotations**
PATCH
Este endpint es para que puedan modificar el orden de las rotaciones (vista calendario).
Este recibe un body con todas las rotaciones ordenadas:
- Envian menos de la cantidad de rotaciones que hay en la db (esto puede ser que envian menos de las que hay, envian rotaciones que no son del ciclo o envian repetidas y no llega a ser la cantidad exacta de rotaciones)
Status: 400 BAD REQUEST
{
"info": "The quantity of crops is not the same on DB ",
"res": "error",
"code": "INVALID_QTY_CROPS"
}
SOLO MOBILE
Este erro a uds no les aparece, en caso se enviar mal les salta:
Status: 200 OK
{
"status": "Could not do action"
}
Esto esta hecho por si hay problemas con la sync y lo offline, para no trabar la cola de request, es preferible que no se le updetee el orden pero pueda seguir el sync. (esto es mas que nada por si crean una rotacion nueva mientras el usuario esta offline y se romperia todo, nada eso.)
Seguimos
El body de la request debe ser el siguiente (template):
{ "cicle_id": "ID del ciclo que quieren cambiar el orde",
"new_order":"Lista ordenada de uuid de rotaciones"
}
Si o si tienen que enviar los dos parametros, son obligatorios
Ejemplo de uso:
PRE CAMBIO DE ORDEN (ROTACIONES ORDENADAS)
"8cb53739-5374-4aaa-8b9d-cfed20f51af8",
"1fb1a924-4bcc-11ed-8ef4-0fb27c028e6b",
"effc9e93-880b-4c42-8c2b-80e06e626920",
"b11f12b1-3265-4756-b18b-45de101da547"
BODY
{
"rotations":[
{
"cicle_id": 65805,
"new_order":[
"effc9e93-880b-4c42-8c2b-80e06e626920",
"8cb53739-5374-4aaa-8b9d-cfed20f51af8",
"1fb1a924-4bcc-11ed-8ef4-0fb27c028e6b",
"b11f12b1-3265-4756-b18b-45de101da547"
]
},
{
"cicle_id": 65806,
"new_order":[
"5224a6f5-98f0-4790-af23-55e22c27b38d",
"878f0a36-cb3f-4b64-9806-b5e2c220408c",
"6b6bdd9b-d6d3-42e4-b143-63cc5c714847"
]
}
]
}
RESPONSE
{
"failed": [
{
"rotations": {
"cicle_id": 65805,
"new_order": [
"5224a6f5-98f0-4790-af23-55e22c27b38d",
"878f0a36-cb3f-4b64-9806-b5e2c220408c",
"6b6bdd9b-d6d3-42e4-b143-63cc5c714847"
],
"motive_of_fail": "Not valid amount of rotations"
}
}
],
"updated": [
{
"rotations": {
"cicle_id": 65805,
"new_order": [
"effc9e93-880b-4c42-8c2b-80e06e626920",
"8cb53739-5374-4aaa-8b9d-cfed20f51af8",
"1fb1a924-4bcc-11ed-8ef4-0fb27c028e6b",
"b11f12b1-3265-4756-b18b-45de101da547"
]
}
}
]
}
Como pueden ver cambio la pegada, ahora pueden mandar mas de una rotacion con su cambio. Ahi puse una mal agrede, asi se ve como es una respuesta ejemplo de las dos opciones
API ROTATIONS VARIETIES
Estas apis son para listar, agregar o eliminar una variedad de una rotacion
ENDPOINT
api/rotations/variety/uuid:rotation_uuid
GET
Este metodo recibe un uuid para poder usar su id_cultivo y listar las variedades de ese cultivo
EJEMPLO RESPONSE DE CULTIVO AVENA
{
"varieties": [
{
"variety_id": 37634,
"variety_name": "Ocumo"
},
{
"variety_id": 40138,
"variety_name": "Avenaza"
},
{
"variety_id": 40142,
"variety_name": "test"
},
{
"variety_id": 40150,
"variety_name": "Test maestro"
},
{
"variety_id": 33305,
"variety_name": "Guilty"
}
]
}
POST
Este metodo es usado para agregar una o mas variedades a esta rotacion
BODY REQUEST
{
"varieties":[]
}
Dentro la lista esta se debene enviar los id de las variedades
EJEMPLO DE BODY
{
"varieties":[37634,33305]
}
RESPONSE
Tomenlo con pinzas, toy viendo bien que devolver mejor pero anda y responde status, se puede ver en base a que necesiten uds para esta funcion, capaz no necesitan nada
DELETE
Este metodo es para borrar una variedad de la rotacion. el endpoint queda:
api/rotations/variety?variety_id=
Donde el id es el id de variedad que quieren borrar.
RESPONSES
PUDO BORRAR
Solo devuelve un 200
NO PUDO BORRAR
Devuelve un 400
{
"info": "Could not delete the variety",
"res": "error",
"code": "COULD_NOT_DELETE"
}
Esto se puede ver si devolvemos error o no, capaz devolvemos y uds no lo atrapan pero si lo informan, asi no bloqueamos el flujo (mas que nada mobile)
LABORES
Los cambios a labores en si no son muchos. Se sigue consumiendo igual que siempre si estamos desde labor. Se agregan nuevos caminos en los flujos, eso si!
Ahora la api de labores devuelve un objeto extra dentro de su info.
MOBILE
Ustedes estaban consumiendo la api de labores vieja, hay un v2 que tiene todo esto, (confirmo con bruno)
ENDPOINT
api/labores/v2
WEB
Ya lo consume y sabe como funciona, se agrego un filtro nuevo que es crops_id, podes filtrar que te traiga la data por cultivo (cultivo de rotacion).
Ejemplo de pegada /api/registro_campo/labores/v2?estancia=72560&yeargroup=2023&crops_id=4,6
Ahi te va a traer todos los registros de labores del campo 72560, del anio 2023 y todos aquellos cuyas rotaciones no sean nulas Y que sus cultivos relacionados a esa rotacion sean de id 4(Avena) y 6(Cebada)
MOBILE
Uds para poder pedir toda la info (esta api esta paginada, uds no la necesitan paginarla por offline) deben mandar como parametro page=-1, asi les trae toda la info
RESPONSE EJEMPLO
{
"pagination": {
"total_pages": 0,
"page": 0
},
"data": [
{
"labour": 57695,
"campaign": 65836,
"farm": 72560,
"field": 258388,
"rotation": [
{
"crop_name": "Avena",
"crop_id": 4,
"rotation_uid": "6b6bdd9b-d6d3-42e4-b143-63cc5c714847"
}
],
"type_name": "siembra",
"status_id": 1,
"status_name": "planificado",
"date": "2022-10-17T00:00:00Z",
"completion_date": null,
"observations": null,
"inputs": null,
"uuid": "6d2467ae-4e48-11ed-8ef4-f751ef77efe6",
"type_id": 3,
"yeargroup": 2023,
"ha_reales": 0.0,
"id_ciclo_cultivo": null,
"costs": {},
"specific_data": {},
"attachments": [],
"resources": []
},
{
"labour": 58852,
"campaign": 65836,
"farm": 72560,
"field": 258388,
"rotation": [
{
"crop_name": null,
"crop_id": null,
"rotation_uid": null
}
],
"type_name": "aplicacion",
"status_id": 1,
"status_name": "planificado",
"date": "2022-08-09T00:00:00Z",
"completion_date": null,
"observations": "sadasd",
"inputs": [],
"uuid": "043abaae-5a28-11ed-8ef4-177388afba1f",
"type_id": 1,
"yeargroup": 2023,
"ha_reales": 222.0,
"id_ciclo_cultivo": null,
"costs": {},
"specific_data": {},
"attachments": [],
"resources": []
}
]
}
Se puede ver que se agrego el campo "rotations",este te trae la info de una rotacion, en caso de no tener una rotacion asociada activa, se envia rotation pero con todo null
SIEMBRAS
Siembras hoy lo que hace es generar una rotacion o asociarse a una ya existente. Es decir, si vos tenes creada una rotacion de trigo en el lote 1 para la campania 1 y creas una siembra desde la interfaz de labores (flujo normal) y esta siembra estas sembrando trigo, por backend la relaciono directamente. En caso de que generes una siembra de soja por ejemplo, el backend TE CREA una rotacion de soja en el lote y campania especificado.
NUEVO FLUJO IR A LABORES DESDE MENU ROTACIONES
Como podran ver en el figma, se puede acceder a labores desde el menu de rotaciones. Para esto deberan redireccionar al menu de labores PERO van a tener que mandar info extra. Cuando van a hacer el POST deberan mandar una info extra
SOLO SI VIENEN POR ROTACIONES
POR EJEMPLO el body de un post normal es el siguiente:
{
"fields": [
258416,
258388
],
"yeargroup": 2022,
"date": "2022-08-10",
"status": 1,
"crop": 4,
"variety": {
"name": "Pesa",
"weight_x_thousand_seeds": 2121
},
"sowed_area": 0,
"observations": "Creado desde thunder",
"inputs": [],
"web": true,
"resources": [],
"attachments": [],
"labour_cost": {
"value": "0.00",
"unit": "US$/ha"
},
"seed_cost": {
"value": "0.00",
"unit": "US$/plantas"
}
}
PERO SI VIENEN DESDE EL DE ROTACIONES DEBEN MANDAR
{
"fields": [
258416,
258388
],
"yeargroup": 2022,
"date": "2022-08-10",
"status": 1,
"crop": 6,
"variety": {
"name": "Pesa",
"weight_x_thousand_seeds": 2121
},
"sowed_area": 0,
"observations": "Creado desde thunder",
"inputs": [],
"web": true,
"resources": [],
"attachments": [],
"labour_cost": {
"value": "0.00",
"unit": "US$/ha"
},
"seed_cost": {
"value": "0.00",
"unit": "US$/plantas"
},
"rotations": [
{
"rotation_uuid":"878f0a36-cb3f-4b64-9806-b5e2c220408c",
"cicle_id": 65806,
"crop_id": 6
},
{
"rotation_uuid":"da834a93-186d-4f9a-9dd3-333202cf9066",
"cicle_id": 65860,
"crop_id": 6
}
]
}
Fijense que me mandan las rotaciones de esa manera y esos datos (SI vienen del menu de rotaciones toda esa info la tienen)
NO ES OBLIGATORIO pero para que el flujo funcione como lo diseñaron deberan enviar rotation de esa manera, es validado por un schema
ENDPOINT
api/labores/v2
RESPONSE EJEMPLO
{
"pagination": {
"total_pages": 0,
"page": 0
},
"data": [
{
"labour": 57695,
"campaign": 65836,
"farm": 72560,
"field": 258388,
"rotation": [
{
"crop_name": "Avena",
"crop_id": 4,
"rotation_uid": "6b6bdd9b-d6d3-42e4-b143-63cc5c714847"
}
],
"type_name": "siembra",
"status_id": 1,
"status_name": "planificado",
"date": "2022-10-17T00:00:00Z",
"completion_date": null,
"observations": null,
"inputs": null,
"uuid": "6d2467ae-4e48-11ed-8ef4-f751ef77efe6",
"type_id": 3,
"yeargroup": 2023,
"ha_reales": 0.0,
"id_ciclo_cultivo": null,
"costs": {},
"specific_data": {},
"attachments": [],
"resources": []
},
{
"labour": 58852,
"campaign": 65836,
"farm": 72560,
"field": 258388,
"rotation": [
{
"crop_name": null,
"crop_id": null,
"rotation_uid": null
}
],
"type_name": "aplicacion",
"status_id": 1,
"status_name": "planificado",
"date": "2022-08-09T00:00:00Z",
"completion_date": null,
"observations": "sadasd",
"inputs": [],
"uuid": "043abaae-5a28-11ed-8ef4-177388afba1f",
"type_id": 1,
"yeargroup": 2023,
"ha_reales": 222.0,
"id_ciclo_cultivo": null,
"costs": {},
"specific_data": {},
"attachments": [],
"resources": []
}
]
}
Se puede ver que se agrego el campo "rotations",este te trae la info de una rotacion, en caso de no tener una rotacion asociada activa, se envia rotation pero con todo null
CREACION, MODIFICACION DE LABOR
CREACION:
Si se desea crear una labor, como ahora es obligatiorio que seleccione un cultivo antes de crear dicha labor debes mandarme por body un elemento mas
"rotations": [
{
"rotation_uuid":"8cb53739-5374-4aaa-8b9d-cfed20f51af8",
"cicle_id": 65805,
"crop_id": 6
}
]
Fijates que rotations es una LISTA de objetos que dentro de esos objetos tenes el cicle_id, el crop_id y el uuid de la rotacion.
Tendrias que agregar esa propiedad al cuerpo del post. Te pongo un ejemplo de una pegada
{
"fields": [
258388
],
"yeargroup": 2022,
"date": "2022-11-09",
"web": true,
"tipo_labor": 3,
"rotations": [
{
"rotation_uuid":"8cb53739-5374-4aaa-8b9d-cfed20f51af8",
"cicle_id": 65805,
"crop_id": 6
}
]
}
Fijate que mandas la misma cantidad de fields que rotations en lo posible. Back esta preparado (porque vos creas el uuid no yo backend) de que si no encuentra una rotacion con ese uuid y caracteristicas no lo asocia, queda la labor creada PERO sin rotacion asociada.
MODIFICACION:
Aca hay dos caminos, el normal, es decir que si estas modificando la labor seguis haciendolo de la manera que lo hacias Y EL NUEVO que es asociarle un cultivo a una labor. Para asociarle un cultivo a la labor, hoy web hace lo siguiente, le pega al patch correspondiente de dicha labor con este body
{ "id":81041,
"rotation_uuid":"840e98a9-2723-42e5-8a3d-4cfe2c167a97"
}
Fijate que manda el id y un uuid de rotacion. Te recomiendo que eso lo hagas igual