implemented moving of locations
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -6,7 +6,9 @@ import static de.srsoftware.umbrella.core.Constants.*;
|
|||||||
import de.srsoftware.umbrella.core.api.Owner;
|
import de.srsoftware.umbrella.core.api.Owner;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public class DbLocation extends Location {
|
public class DbLocation extends Location {
|
||||||
private Owner owner;
|
private Owner owner;
|
||||||
@@ -14,6 +16,7 @@ public class DbLocation extends Location {
|
|||||||
private String name;
|
private String name;
|
||||||
private String description;
|
private String description;
|
||||||
private String relation; // when added to an item, this field describes the type of the relation
|
private String relation; // when added to an item, this field describes the type of the relation
|
||||||
|
private Set<String> dirtyFields = new HashSet<>();
|
||||||
|
|
||||||
public DbLocation(long id, Owner owner, Long parentLocationId, String name, String description){
|
public DbLocation(long id, Owner owner, Long parentLocationId, String name, String description){
|
||||||
super(id);
|
super(id);
|
||||||
@@ -23,10 +26,23 @@ public class DbLocation extends Location {
|
|||||||
this.description = description;
|
this.description = description;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DbLocation clear(){
|
||||||
|
dirtyFields.clear();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public String description() {
|
public String description() {
|
||||||
return description;
|
return description;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isDirty() {
|
||||||
|
return !dirtyFields.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isDirty(String field){
|
||||||
|
return dirtyFields.contains(field);
|
||||||
|
}
|
||||||
|
|
||||||
public String name() {
|
public String name() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
@@ -45,6 +61,7 @@ public class DbLocation extends Location {
|
|||||||
|
|
||||||
public DbLocation parent(DbLocation newParent) {
|
public DbLocation parent(DbLocation newParent) {
|
||||||
parentLocationId = newParent.id();
|
parentLocationId = newParent.id();
|
||||||
|
dirtyFields.add(PARENT_LOCATION_ID);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function move_dragged_to(new_loc){
|
async function move_dragged_to(new_loc){
|
||||||
console.log({move_dragged_to:JSON.parse(JSON.stringify(new_loc))});
|
|
||||||
const data = draggedItem ? { item : draggedItem.id, target: new_loc.id } : { location : draggedLocation.id, target: new_loc.id }
|
const data = draggedItem ? { item : draggedItem.id, target: new_loc.id } : { location : draggedLocation.id, target: new_loc.id }
|
||||||
const url = api(draggedItem ? 'stock/move_item' : 'stock/move_location');
|
const url = api(draggedItem ? 'stock/move_item' : 'stock/move_location');
|
||||||
const res = await fetch(url,{
|
const res = await fetch(url,{
|
||||||
@@ -71,6 +70,13 @@
|
|||||||
if (res.ok){
|
if (res.ok){
|
||||||
yikes();
|
yikes();
|
||||||
location = new_loc;
|
location = new_loc;
|
||||||
|
if (!draggedItem){
|
||||||
|
for (var owner of top_level){
|
||||||
|
if (owner.locations && dropNestedLocation(owner.locations,draggedLocation)) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
draggedItem = null;
|
||||||
|
draggedLocation = null;
|
||||||
} else {
|
} else {
|
||||||
error(res);
|
error(res);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -292,7 +292,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|||||||
if (location.id() == 0) { // new location
|
if (location.id() == 0) { // new location
|
||||||
try {
|
try {
|
||||||
var rs = insertInto(TABLE_LOCATIONS,OWNER,PARENT_LOCATION_ID,NAME,DESCRIPTION)
|
var rs = insertInto(TABLE_LOCATIONS,OWNER,PARENT_LOCATION_ID,NAME,DESCRIPTION)
|
||||||
.values(location.owner().dbCode(),location.parent(),location.name(),null)
|
.values(location.owner().dbCode(),location.parent(),location.name(),location.description())
|
||||||
.execute(db).getGeneratedKeys();
|
.execute(db).getGeneratedKeys();
|
||||||
long id = 0;
|
long id = 0;
|
||||||
if (rs.next()) id = rs.getLong(1);
|
if (rs.next()) id = rs.getLong(1);
|
||||||
@@ -303,7 +303,17 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|||||||
throw databaseException("Failed to save new location ({0})",location.name());
|
throw databaseException("Failed to save new location ({0})",location.name());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw databaseException("Updating locations not implemented");
|
try {
|
||||||
|
update(TABLE_LOCATIONS)
|
||||||
|
.set(OWNER, PARENT_LOCATION_ID, NAME, DESCRIPTION)
|
||||||
|
.where(ID,equal(location.id()))
|
||||||
|
.prepare(db)
|
||||||
|
.apply(location.owner().dbCode(), location.parent(), location.name(), location.description())
|
||||||
|
.close();
|
||||||
|
return location.clear();
|
||||||
|
} catch (SQLException e){
|
||||||
|
throw databaseException("Updating location \"{0}\" not implemented",location.name());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -242,7 +242,7 @@ public class StockModule extends BaseHandler implements StockService {
|
|||||||
var owner = location.owner().resolve();
|
var owner = location.owner().resolve();
|
||||||
if (!assigned(owner,user)) throw forbidden("You are not allowed to alter the location of \"{0}\"!",location.name());
|
if (!assigned(owner,user)) throw forbidden("You are not allowed to alter the location of \"{0}\"!",location.name());
|
||||||
|
|
||||||
var target = stockDb.loadLocation(locationId.longValue());
|
var target = stockDb.loadLocation(destLocationId.longValue());
|
||||||
var locOwner = target.resolve().owner().resolve();
|
var locOwner = target.resolve().owner().resolve();
|
||||||
if (!assigned(locOwner,user)) throw forbidden("You are not allowed to modify \"{0}\"!",target.name());
|
if (!assigned(locOwner,user)) throw forbidden("You are not allowed to modify \"{0}\"!",target.name());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user