Related Project added to TaskType

This commit is contained in:
Sewmina
2022-03-25 08:13:39 +05:30
parent ac9609b3b6
commit f64ac7efbd
6 changed files with 199 additions and 88 deletions

View File

@@ -198,7 +198,7 @@ void onCacheDatabaseCreate(Database db, int newVersion) async {
await db.execute(CategoriesTableSQL);
print("Initiated Categories Table");
String TaskTableSQL = 'CREATE TABLE TaskTypes(id TEXT PRIMARY KEY, ${TaskType.colName} TEXT, ${TaskType.colCategory} TEXT, '
String TaskTableSQL = 'CREATE TABLE TaskTypes(id TEXT PRIMARY KEY, ${TaskType.colName} TEXT, ${TaskType.colCategory} TEXT, ${TaskType.colRelatedProject} TEXT, '
'FOREIGN KEY (${TaskType.colCategory}) REFERENCES Categories(${Category.colCatId}))';
// print(TaskTableSQL);
await db.execute(TaskTableSQL);
@@ -376,14 +376,21 @@ Future<List<TaskType>> GetTaskTypes(bool forceOffline) async {
String? id = element[TaskType.colId].toString();
String? name = element[TaskType.colName].toString();
String? category = element[TaskType.colCategory].toString();
String? related_project = element[TaskType.colRelatedProject].toString();
Category? cat = await getCatFromId(category);
if (id == null || name == null || category == null) {
print("Something is null!");
print("name:{$name}, cat:{$category}, prod:{$id}");
continue;
}
Project? relatedProject;
if(related_project.isNotEmpty){
relatedProject = await getProjectFromId(related_project);
print('got a tasktype with project');
}
// print("name:{$name}, cat:{$category}, prod:{$id}");
_taskTypes.add(TaskType(id, name, category, cat));
_taskTypes.add(TaskType(id, name, category, cat:cat, relatedProject: relatedProject));
}
taskTypes = _taskTypes;
} else {
@@ -399,7 +406,7 @@ Future<List<TaskType>> GetTaskTypes(bool forceOffline) async {
for (var value in data) {
Map<String, dynamic> data = jsonDecode(value);
Category? cat = await getCatFromId(data['category_id']);
_taskTypes.add(TaskType(data['task_id'], data['name'], data['category_id'], cat));
_taskTypes.add(TaskType(data['task_id'], data['name'], data['category_id'], cat:cat,relatedProject: data['related_project']));
//print(cat);
}
}catch(e){
@@ -424,8 +431,8 @@ Future<void> UpdateTaskTypesFromServer() async {
for (var value in data) {
Map<String, dynamic> cat = jsonDecode(value);
//print(cat);
await cacheDb.rawInsert("INSERT OR REPLACE INTO TaskTypes (${TaskType.colId},${TaskType.colName},${TaskType.colCategory}) "
"VALUES ('${cat['task_id']}','${cat['name']}','${cat['category_id']}') ");
await cacheDb.rawInsert("INSERT OR REPLACE INTO TaskTypes (${TaskType.colId},${TaskType.colName},${TaskType.colCategory},${TaskType.colRelatedProject}) "
"VALUES ('${cat['task_id']}','${cat['name']}','${cat['category_id']}', '${cat['related_project']}') ");
print(await cacheDb.query("TaskTypes"));
}
@@ -648,8 +655,10 @@ Future<List<Project>> GetProjects(bool forceOffline) async {
String? category = element[Project.colCat];
String? stepsJson = element[Project.colSteps];
String? deadline = element[Project.colDeadline];
int? eta= element[Project.colEta];
if (name == null || category == null || stepsJson == null || deadline == null) {
if (name == null || category == null || stepsJson == null || deadline == null || eta==null) {
print("Something is null!\nname:${name == null}, cat:${category == null}, steps:${stepsJson == null}, deadline${deadline == null}");
print("TaskType:{$name}, Start Time:{$category}, endTime:{$stepsJson}, metadata:${deadline}");
continue;
@@ -659,13 +668,14 @@ Future<List<Project>> GetProjects(bool forceOffline) async {
print('steps : $stepsJson');
List<dynamic> _steps = jsonDecode(stepsJson);
List<ProjectStep> steps = [];
int eta = 0;
int m_eta = 0;
_steps.forEach((element) {
ProjectStep step = ProjectStep.fromJson(element);
eta+=step.eta;
m_eta += step.eta;
steps.add(step);
print(element);
});
eta = (m_eta > 0) ? m_eta : eta;
// print(steps);
_projects.add(Project(name.replaceAll(username, ""),category,steps,eta,DateTime.parse(deadline),cat: cat));
@@ -728,8 +738,8 @@ Future<void> UpdateProjectsFromServer() async {
print('project data');
print(cat);
await cacheDb.rawInsert(
"INSERT OR REPLACE INTO Projects (${Project.colName}, ${Project.colCat}, ${Project.colSteps}, ${Project.colDeadline}) "
"VALUES ('${cat['name']}', '${cat['category']}', '${cat['steps']}', '${cat['deadline']}')");
"INSERT OR REPLACE INTO Projects (${Project.colName}, ${Project.colCat}, ${Project.colSteps}, ${Project.colDeadline}, ${Project.colEta}) "
"VALUES ('${cat['name']}', '${cat['category']}', '${cat['steps']}', '${cat['deadline']}', ${cat['eta']})");
}
} else {
print("No activities for now");
@@ -768,6 +778,21 @@ Future<Category?> getCatFromId(String catId) async {
return cat;
}
Future<Project?> getProjectFromId(String projectId) async {
// await GetTaskTypes(false);
Project? project = null;
for (var element in projects) {
if (element.getName() ==projectId.replaceAll(username, "")) {
project = element;
}
}
if (project == null) {
print('Got null project for ${projectId} after searching on ${projects.length}');
}
return project;
}
//Helpers
class Helpers {
Future<String?> _getId() async {
@@ -833,13 +858,14 @@ class UserOperations {
}
}
static Future<void> addTaskType(String name, String category, {bool bulk = false}) async {
static Future<void> addTaskType(String name, String category, {bool bulk = false, String? relatedProject = null}) async {
Map<String, String> queryBody = <String, String>{
'id': username + name,
'username': username,
'device_id': await Settings.UUID(),
'name': name,
'category': username + category
'category': username + category,
'related_project' :(relatedProject==null) ? '' : (username + relatedProject)
};
if (cacheEnabled) {
@@ -851,7 +877,8 @@ class UserOperations {
await cacheDb.insert('Queries', query);
//update Cache
Map<String, Object> data = {TaskType.colId: username + name, Category.colName: name, Category.colCatId: username + category};
Map<String, Object> data = {TaskType.colId: username + name, Category.colName: name, Category.colCatId: username + category,};
if(relatedProject!=null || relatedProject =='None'){data.putIfAbsent(TaskType.colRelatedProject, () => relatedProject.toString());}
await cacheDb.insert('TaskTypes', data);
await refreshUserData(forceOffline: true);
} else {
@@ -1057,7 +1084,7 @@ class UserOperations {
await cacheDb.insert('Queries', query);
//update Cache
Map<String, Object> data = {Project.colName: username+name, Project.colCat: category, Project.colSteps: jsonEncode(steps), Project.colDeadline: deadline.toString()};
Map<String, Object> data = {Project.colName: username+name, Project.colCat: category, Project.colSteps: jsonEncode(steps),Project.colEta: eta, Project.colDeadline: deadline.toString()};
await cacheDb.insert('Projects', data);
await refreshUserData(forceOffline: true);
} else {