Fixes for livestock quick movement form #361

This commit is contained in:
Michael Stenta 2020-11-11 07:54:17 -05:00
commit 80b4105fb9
2 changed files with 60 additions and 3 deletions

View File

@ -222,7 +222,8 @@ function farm_livestock_move_form($form, &$form_state) {
// Load current location geometry of all assets.
$geoms = array();
foreach ($assets as $asset) {
$geoms[] = farm_movement_asset_geometry($asset);
$timestamp = strtotime($form_state['values']['move']['date'] ?: $defaults['date']);
$geoms[] = farm_movement_asset_geometry($asset, $timestamp);
}
// Combine geometries.
@ -628,9 +629,12 @@ function farm_livestock_move_form_submit($form, &$form_state) {
// Load current locations of all assets.
$previous_areas = array();
foreach ($assets as $asset) {
$previous_areas = array_merge($previous_areas, farm_movement_asset_location($asset));
$previous_areas = array_merge($previous_areas, farm_movement_asset_location($asset, $timestamp));
}
// Remove any duplicate areas.
$previous_areas = array_unique($previous_areas, SORT_REGULAR);
// Link post grazing logs to the area(s) animals are moving from.
if (!empty($previous_areas)) {
@ -643,7 +647,7 @@ function farm_livestock_move_form_submit($form, &$form_state) {
// Load current location geometry of all assets.
$geoms = array();
foreach ($assets as $asset) {
$geoms[] = farm_movement_asset_geometry($asset);
$geoms[] = farm_movement_asset_geometry($asset, $timestamp);
}
// Combine geometries.

View File

@ -508,3 +508,56 @@ function farm_livestock_update_7007(&$sandbox) {
module_enable(array($module));
}
}
/**
* Remove duplicate area references from movement quickform logs.
*/
function farm_livestock_update_7008(&$sandbox) {
// Setup. Find observation logs associated with the farm_livestock_move_form
// that need to be updated.
if (!isset($sandbox['progress'])) {
$sandbox['progress'] = 0;
// Query observation logs linked to this quick form.
$query = db_select('farm_quick_entity', 'fqe');
$query->addField('fqe', 'entity_id');
$query->condition('fqe.entity_type', 'log');
$query->condition('fqe.quick_form_id', 'farm_livestock_move_form');
$log_alias = $query->join('log', 'l', 'fqe.entity_id = l.id');
$query->condition($log_alias . '.type', 'farm_observation');
$log_ids = $query->execute()->fetchCol();
// Finish the update if there are no logs to update.
if (empty($log_ids)) {
$sandbox['#finished'] = 1;
return;
}
$sandbox['log_ids'] = $log_ids;
$sandbox['total'] = count($log_ids);
}
// Load the Nth log we need to process.
$log = log_load($sandbox['log_ids'][$sandbox['progress']]);
// Load areas that each log references.
$log_wrapper = entity_metadata_wrapper('log', $log);
$areas = $log_wrapper->field_farm_area->value();
// Only update areas if more than 1 exists.
if (!empty($areas) && count($areas) > 1) {
// Get the unique areas.
$new_areas = array_unique($areas, SORT_REGULAR);
// Update the log.
if (count($areas) > count($new_areas)) {
$log_wrapper->field_farm_area->set($new_areas);
$log_wrapper->save();
}
}
$sandbox['progress']++;
$sandbox['#finished'] = $sandbox['progress'] / $sandbox['total'];
}