Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.52 KB | None | 0 0
  1. package org.clickedu.Clickedu.fragments.sessions.register.tablet_register;
  2.  
  3. import android.content.DialogInterface;
  4. import android.os.Bundle;
  5. import android.os.Parcelable;
  6. import android.support.v4.app.Fragment;
  7. import android.support.v7.app.AlertDialog;
  8. import android.support.v7.widget.LinearLayoutManager;
  9. import android.support.v7.widget.RecyclerView;
  10. import android.util.Log;
  11. import android.view.LayoutInflater;
  12. import android.view.View;
  13. import android.view.ViewGroup;
  14. import android.widget.ImageView;
  15. import android.widget.TextView;
  16. import android.widget.Toast;
  17.  
  18. import org.clickedu.Clickedu.R;
  19. import org.clickedu.Clickedu.adapters.sessions.tablet_register.RegisterHeaderAdapter;
  20. import org.clickedu.Clickedu.adapters.sessions.tablet_register.RegisterHorizontalAdapter;
  21. import org.clickedu.Clickedu.adapters.sessions.tablet_register.RegisterVerticalAdapter;
  22. import org.clickedu.Clickedu.bus.BusManager;
  23. import org.clickedu.Clickedu.bus.events.OfflineRegisterEvent;
  24. import org.clickedu.Clickedu.bus.events.SetUIEnabledEvent;
  25. import org.clickedu.Clickedu.connection.ApiClient;
  26. import org.clickedu.Clickedu.connection.GsonHandler;
  27. import org.clickedu.Clickedu.connection.SessionsClient;
  28. import org.clickedu.Clickedu.fragments.sessions.model.AttendanceModel;
  29. import org.clickedu.Clickedu.fragments.sessions.model.MultipleModel;
  30. import org.clickedu.Clickedu.listeners.OnRecyclerListTouchListener;
  31. import org.clickedu.Clickedu.listeners.SelfRemovingOnScrollListener;
  32. import org.clickedu.Clickedu.model.AttachmentSend;
  33. import org.clickedu.Clickedu.model.User;
  34. import org.clickedu.Clickedu.model.persistence.OfflineModeManager;
  35. import org.clickedu.Clickedu.model.persistence.RegisterManager;
  36. import org.clickedu.Clickedu.model.persistence.SessionManager;
  37. import org.clickedu.Clickedu.model.persistence.UserManager;
  38. import org.clickedu.Clickedu.model.response.UpdateSessionResponse;
  39. import org.clickedu.Clickedu.model.sessions.Attendance;
  40. import org.clickedu.Clickedu.model.sessions.Board;
  41. import org.clickedu.Clickedu.model.sessions.Homework;
  42. import org.clickedu.Clickedu.model.sessions.ParamName;
  43. import org.clickedu.Clickedu.model.sessions.ParameterQuantifier;
  44. import org.clickedu.Clickedu.model.sessions.RegisterModel;
  45. import org.clickedu.Clickedu.model.sessions.SessionDay;
  46. import org.clickedu.Clickedu.model.sessions.SessionObject;
  47. import org.clickedu.Clickedu.model.sessions.SessionParam;
  48. import org.clickedu.Clickedu.model.sessions.SessionStudent;
  49. import org.clickedu.Clickedu.utils.RegisterStatusUtils;
  50.  
  51. import java.util.ArrayList;
  52. import java.util.Arrays;
  53. import java.util.HashMap;
  54. import java.util.List;
  55. import java.util.Map;
  56.  
  57. import butterknife.Bind;
  58. import butterknife.ButterKnife;
  59. import butterknife.OnClick;
  60. import cz.msebera.android.httpclient.Header;
  61. import lombok.NonNull;
  62.  
  63. /**
  64. * Created by Joanna on 09.08.2017.
  65. */
  66.  
  67. public class TemporaryRegisterFragment extends Fragment {
  68.  
  69. public static final int TEMP_LIST_SIZE = 10;
  70.  
  71. @Bind(R.id.recycler_view_vertical) RecyclerView mVerticalRV;
  72. @Bind(R.id.recycler_view_header) RecyclerView mHorizontalHeaderRV;
  73. @Bind(R.id.back_button) ImageView mBackIV;
  74. @Bind(R.id.save_button) ImageView mSaveIV;
  75. @Bind(R.id.title) TextView mViewTitle;
  76.  
  77. @OnClick(R.id.back_button) public void onBackClick(){
  78. getActivity().finish();
  79. }
  80.  
  81. @OnClick(R.id.save_button)public void onSaveClick(){
  82. Toast.makeText(getContext(), "save data", Toast.LENGTH_LONG).show();
  83. if(!isAllAttendanceSelected()){
  84. Toast.makeText(getContext(), R.string.attendance_not_selected, Toast.LENGTH_SHORT).show();
  85. return;
  86. }
  87. mViewTitle.requestFocusFromTouch();
  88. User user = UserManager.get(getActivity()).getCurrentUser();
  89. if (!user.isOfflineMode()) {
  90. AttachmentSend attachmentSend = RegisterManager.get().getCurrentAttachment(RegisterManager.get().getCurrentSessionDay());
  91. SessionDay sessionDay = RegisterManager.get().getCurrentSessionDay();
  92. SessionObject sessionObject = RegisterManager.get().getCurrentSessionObject();
  93. SessionsClient.updateSession(getActivity(), RegisterManager.get().getCurrentAttachment(RegisterManager.get().getCurrentSessionDay()), RegisterManager.get().getCurrentSessionDay(), RegisterManager.get().getCurrentSessionObject(), new GsonHandler<UpdateSessionResponse>(UpdateSessionResponse.class) {
  94. @Override
  95. public void onGsonResponse(UpdateSessionResponse response) {
  96. if (response == null) return;
  97. RegisterManager.get().shouldSave(true);
  98. RegisterManager.get().getCurrentSessionDay().setSessionId(response.getSessionId());
  99. BusManager.get().post(new SetUIEnabledEvent(true));
  100. if (getActivity() == null) {
  101. return;
  102. }
  103. getActivity().finish();
  104. }
  105.  
  106. @Override
  107. public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
  108. ApiClient.showError(getActivity(), statusCode);
  109. }
  110. });
  111. } else {
  112. OfflineModeManager.get().updateSessionObject(getActivity(), RegisterManager.get().getCurrentSessionDay(), RegisterManager.get().getCurrentSessionObject());
  113. BusManager.get().post(new OfflineRegisterEvent());
  114. getActivity().finish();
  115. }
  116. }
  117.  
  118. private RegisterVerticalAdapter mVerticalAdapter;
  119. private RegisterHeaderAdapter mHeaderAdapter;
  120. private List<RecyclerView> mRecyclerViewList;
  121. private Map<Integer, ArrayList<MultipleModel>> data;
  122. private HashMap<String, ArrayList<SessionParam>> mSessionsParamData;
  123.  
  124. List<String> headerList;
  125. List<Integer> headerType;
  126.  
  127. List<ParameterQuantifier> quantifiers; //for spinner
  128. List<RegisterModel> attendanceList; //students
  129. int attendanceListIndex = 4;
  130.  
  131. @Override
  132. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  133. View fragment = inflater.inflate(R.layout.register_attendance_layout, container, false);
  134. ButterKnife.bind(this, fragment);
  135.  
  136. headerList = new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.register_type_selection_list)));
  137. headerType = new ArrayList<>();
  138. mRecyclerViewList = new ArrayList<>();
  139. attendanceList = new ArrayList<>();
  140. data = new HashMap<>();
  141.  
  142. initData();
  143. setAdapter();
  144. return fragment;
  145. }
  146.  
  147. private void initData(){
  148. SessionObject sessionObject = RegisterManager.get().getCurrentSessionObject();
  149. if(sessionObject==null){
  150. getActivity().finish();
  151. }
  152.  
  153. initHeadersList(sessionObject);
  154.  
  155. mSessionsParamData = sessionObject.getSessionList().getSessionParams();
  156. quantifiers = RegisterManager.get().getCurrentSessionObject().getSessionList().getParameterQuantifiers();
  157.  
  158. if (sessionObject != null && sessionObject.getSessionList().getParamNames() != null) {
  159.  
  160. for (SessionStudent student : sessionObject.getSessionList().getStudents()) {
  161. attendanceList.add(createRegisterModelForStudentSession(student, attendanceListIndex));
  162.  
  163. ArrayList<MultipleModel> studentData = new ArrayList<>();
  164. String studentName = student.getName();
  165. int studentID = student.getId();
  166.  
  167. for (ParamName pm : sessionObject.getSessionList().getParamNames()){
  168. HashMap<Integer, SessionParam> params = getParams(pm.getParamName());
  169. if (params.containsKey(studentID)) {
  170. SessionParam param = params.get(studentID);
  171. studentData.add(new MultipleModel(studentName, quantifiers, studentID, param.getParameterValue()));
  172. } else {
  173. studentData.add(new MultipleModel(studentName, quantifiers, studentID, null));
  174. }
  175. }
  176. data.put(studentID, studentData);
  177. }
  178. }
  179. }
  180.  
  181. private void initHeadersList(SessionObject sessionObject){
  182. headerType.add(RegisterHorizontalAdapter.ATTENDANCE_VIEW_TYPE);
  183. headerType.add(RegisterHorizontalAdapter.HOMEWORK_VIEW_TYPE);
  184. headerType.add(RegisterHorizontalAdapter.BOARD_VIEW_TYPE);
  185. if (sessionObject != null && sessionObject.getSessionList().getParamNames() != null) {
  186. for (ParamName pm : sessionObject.getSessionList().getParamNames()) {
  187. headerList.add(pm.getParamName());
  188. headerType.add(Integer.parseInt(pm.getParamType()));
  189. }
  190. }
  191. }
  192.  
  193. // setting vertical adapter
  194. public void setAdapter() {
  195. mHeaderAdapter = new RegisterHeaderAdapter(getContext(), headerList, this, headerType);
  196. LinearLayoutManager linearLayoutManagerHeader = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false);
  197. mHorizontalHeaderRV.setLayoutManager(linearLayoutManagerHeader);
  198. mHorizontalHeaderRV.setAdapter(mHeaderAdapter);
  199. mRecyclerViewList.add(mHorizontalHeaderRV);
  200.  
  201. mVerticalAdapter = new RegisterVerticalAdapter(getContext(), attendanceList, mRecyclerViewList, headerType, headerList);
  202. LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
  203. mVerticalRV.setLayoutManager(linearLayoutManager);
  204. mVerticalRV.setAdapter(mVerticalAdapter);
  205. }
  206.  
  207.  
  208. public void onAttendanceTextClicked(){
  209. final SessionObject sessionObject = RegisterManager.get().getCurrentSessionObject();
  210. if(sessionObject==null){
  211. getActivity().finish();
  212. }
  213.  
  214. final CharSequence[] items = {"All day"," morning", "afternoom"};
  215.  
  216. final int[] index = {0};
  217. AlertDialog dialog = new AlertDialog.Builder(getContext())
  218. .setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
  219. @Override
  220. public void onClick(DialogInterface dialog, int which) {
  221. index[0] = which;
  222. }
  223. }).setPositiveButton("OK", new DialogInterface.OnClickListener() {
  224. @Override
  225. public void onClick(DialogInterface dialog, int id) {
  226. attendanceList.clear();
  227. for (SessionStudent student : sessionObject.getSessionList().getStudents()) {
  228. attendanceList.add(createRegisterModelForStudentSession(student, index[0]));
  229. }
  230. mVerticalAdapter.changeAttendances(attendanceList);
  231. if(index[0]==0){
  232. attendanceListIndex = 4;
  233. }
  234. else if(index[0]==1){
  235. attendanceListIndex = 2;
  236. }
  237. else {
  238. attendanceListIndex = 3;
  239. }
  240. }
  241. }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
  242. @Override
  243. public void onClick(DialogInterface dialog, int id) {
  244. }
  245. }).create();
  246. dialog.show();
  247.  
  248.  
  249. }
  250.  
  251. public void selectAllAttendance(RegisterStatusUtils.AttendanceStatusType statusType, boolean isJustified) {
  252. final SessionObject sessionObject = RegisterManager.get().getCurrentSessionObject();
  253. boolean delayed = false;
  254. boolean justified = isJustified;
  255. boolean present = false;
  256. boolean absent = false;
  257.  
  258. if (statusType == RegisterStatusUtils.AttendanceStatusType.PRESENT) {
  259. present = true;
  260. } else if (statusType == RegisterStatusUtils.AttendanceStatusType.LATE) {
  261. delayed = true;
  262. } else if (statusType == RegisterStatusUtils.AttendanceStatusType.ABSENT) {
  263. absent = true;
  264. }
  265. for (SessionStudent student : sessionObject.getSessionList().getStudents()) {
  266. Attendance attendance = null;
  267. List<Attendance> attendances = student.getAttendances();
  268. if (student.getAttendances() != null) {
  269. for(Attendance a : attendances){
  270. if(a.getType()==attendanceListIndex){
  271. attendance = a;
  272. }
  273. }
  274. if(attendance==null){
  275. attendance = new Attendance();
  276. attendance.setId(Integer.toString(student.getId()));
  277. attendance.setType(attendanceListIndex);
  278. attendances.add(attendance);
  279. }
  280. }
  281. attendance.setAbsent(absent);
  282. attendance.setJustified(justified);
  283. attendance.setDelayed(delayed);
  284. attendance.setPresent(present);
  285. /*if (attendance == null) {
  286. attendance = new Attendance();
  287. attendance.setAbsent(absent);
  288. attendance.setJustified(justified);
  289. attendance.setDelayed(delayed);
  290. attendance.setPresent(present);
  291. attendance.setType(4);
  292. attendance.setId(Integer.toString(student.getId()));
  293. attendances.add(attendance);
  294. } else {
  295. attendance.setId(Integer.toString(student.getId()));
  296. attendance.setAbsent(absent);
  297. attendance.setJustified(justified);
  298. attendance.setDelayed(delayed);
  299. attendance.setPresent(present);
  300. attendance.setType(4);
  301. }*/
  302.  
  303. }
  304. mVerticalAdapter.selectAllAttendance(statusType, isJustified);
  305. }
  306.  
  307. private void setAttendancePresentAll(){
  308. for (SessionStudent student : RegisterManager.get().getCurrentSessionObject().getSessionList().getStudents() ) {
  309.  
  310. List<Attendance> attendanceMorningList = null;
  311. Attendance attendanceMorning = null;
  312.  
  313. attendanceMorningList = student.getAttendances();
  314.  
  315. for (Attendance a : attendanceMorningList) {
  316. if (a.getType() == 2) {
  317. attendanceMorning = a;
  318. } else if (a.getType() == 4) {
  319. a.setDelayed(false);
  320. a.setJustified(false);
  321. a.setAbsent(false);
  322. a.setPresent(false);
  323. }
  324. }
  325. if (attendanceMorning == null) {
  326. attendanceMorning = new Attendance();
  327. attendanceMorning.setType(2);
  328. attendanceMorning.setId(student.getId() + "");
  329. attendanceMorningList.add(attendanceMorning);
  330.  
  331. }
  332. attendanceMorning.setAbsent(false);
  333. attendanceMorning.setDelayed(true);
  334. attendanceMorning.setJustified(false);
  335. attendanceMorning.setPresent(false);
  336. }
  337. }
  338.  
  339. public void selectAllHomework(RegisterStatusUtils.HomeworkStatusType statusType) {
  340. if (statusType == RegisterStatusUtils.HomeworkStatusType.NONE) {
  341. Toast.makeText(getContext(), "None", Toast.LENGTH_SHORT).show();
  342. } else {
  343. Toast.makeText(getContext(), "All " + statusType.toString(), Toast.LENGTH_SHORT).show();
  344. }
  345. mVerticalAdapter.selectAllHomework(statusType);
  346. for (SessionStudent sessionStudent : RegisterManager.get().getCurrentSessionObject().getSessionList().getStudents()) {
  347. Homework hom = sessionStudent.getHomework();
  348. boolean done = false;
  349. boolean notDone = false;
  350. boolean notAsked = false;
  351. if(statusType== RegisterStatusUtils.HomeworkStatusType.DONE){
  352. done = true;
  353. }
  354. else if(statusType== RegisterStatusUtils.HomeworkStatusType.NOT_DONE){
  355. notDone = true;
  356. }
  357. else if(statusType == RegisterStatusUtils.HomeworkStatusType.NOT_COLLECTED){
  358. notAsked = true;
  359. }
  360. hom.setDone(done);
  361. hom.setNotDone(notDone);
  362. hom.setNotAsked(notAsked);
  363. }
  364. }
  365.  
  366. public void selectAllBoard(RegisterStatusUtils.BoardStatusType statusType) {
  367. if (statusType == RegisterStatusUtils.BoardStatusType.NONE) {
  368. Toast.makeText(getContext(), "None", Toast.LENGTH_SHORT).show();
  369. } else {
  370. Toast.makeText(getContext(), "All " + statusType.toString(), Toast.LENGTH_SHORT).show();
  371. }
  372. mVerticalAdapter.selectAllBoard(statusType);
  373.  
  374. for (SessionStudent sessionStudent : RegisterManager.get().getCurrentSessionObject().getSessionList().getStudents()) {
  375. Board board = sessionStudent.getBoard();
  376. boolean asked = false;
  377. boolean notAsked = false;
  378. if(statusType == RegisterStatusUtils.BoardStatusType.GOES_UP){
  379. asked = true;
  380. }
  381. else if(statusType == RegisterStatusUtils.BoardStatusType.NOT_GOES_UP){
  382. notAsked = true;
  383. }
  384. board.setAsked(asked);
  385. board.setNotAsked(notAsked);
  386. }
  387.  
  388. }
  389.  
  390. private RegisterModel createRegisterModelForStudentSession(SessionStudent student, int index){
  391. RegisterStatusUtils.AttendanceStatusType attendanceStatusType = getAttendanceStatusForStudent(student, index);
  392. RegisterStatusUtils.HomeworkStatusType homeworkStatusType = getHomeworkStatusForStudent(student);
  393. RegisterStatusUtils.BoardStatusType boardStatusType = getBoardStatusForStudent(student);
  394. boolean isJustified = false;
  395. if(student.getAttendances()!=null){
  396. for(Attendance a : student.getAttendances()){
  397. if(a.getType()==index){
  398. isJustified = a.isJustified();
  399. }
  400. }
  401. }
  402. RegisterModel model = new RegisterModel(student.getName(), student.getId(), attendanceStatusType, homeworkStatusType,
  403. boardStatusType, isJustified);
  404. return model;
  405. }
  406.  
  407. private RegisterStatusUtils.AttendanceStatusType getAttendanceStatusForStudent(SessionStudent student, int index){
  408. if(student.getAttendances()!=null && student.getAttendances().size()>index){
  409. if(student.getAttendances().get(index).isPresent()){
  410. return RegisterStatusUtils.AttendanceStatusType.PRESENT;
  411. }
  412. else if (student.getAttendances().get(index).isDelayed()){
  413. return RegisterStatusUtils.AttendanceStatusType.LATE;
  414. }
  415. else if(student.getAttendances().get(index).isAbsent()){
  416. return RegisterStatusUtils.AttendanceStatusType.ABSENT;
  417. }
  418. else {
  419. return RegisterStatusUtils.AttendanceStatusType.NONE;
  420. }
  421. }
  422. return RegisterStatusUtils.AttendanceStatusType.NONE;
  423. }
  424.  
  425. private RegisterStatusUtils.HomeworkStatusType getHomeworkStatusForStudent(SessionStudent student){
  426. if(student.getHomework()!=null) {
  427. if(student.getHomework().isDone()){
  428. return RegisterStatusUtils.HomeworkStatusType.DONE;
  429. }
  430. else if (student.getHomework().isNotAsked()){
  431. return RegisterStatusUtils.HomeworkStatusType.NOT_COLLECTED;
  432. }
  433. else if(student.getHomework().isNotDone()){
  434. return RegisterStatusUtils.HomeworkStatusType.NOT_DONE;
  435. }
  436. }
  437. return RegisterStatusUtils.HomeworkStatusType.NONE;
  438. }
  439.  
  440. private RegisterStatusUtils.BoardStatusType getBoardStatusForStudent(SessionStudent student){
  441. if(student.getBoard()!=null) {
  442. if(student.getBoard().isNotAsked()){
  443. return RegisterStatusUtils.BoardStatusType.NOT_GOES_UP;
  444. }
  445. else if (student.getBoard().isAsked()){
  446. return RegisterStatusUtils.BoardStatusType.GOES_UP;
  447. }
  448. }
  449. return RegisterStatusUtils.BoardStatusType.NONE;
  450. }
  451.  
  452. public HashMap<Integer, SessionParam> getParams(String paramName) {
  453. HashMap<Integer, SessionParam> params = new HashMap<>();
  454. ArrayList<SessionParam> sessionPamars;
  455. if (mSessionsParamData.containsKey(paramName)) {
  456. sessionPamars = mSessionsParamData.get(paramName);
  457. for (SessionParam sessionParam : sessionPamars) {
  458. params.put(sessionParam.getStudentId(), sessionParam);
  459. }
  460. }
  461. return params;
  462. }
  463.  
  464. private boolean isAllAttendanceSelected() {
  465. if (!SessionManager.get().isPresentConfig()) {
  466. return true;
  467. }
  468.  
  469. int attendanceSelectedCount = 0;
  470. for (SessionStudent student : RegisterManager.get().getCurrentSessionObject().getSessionList().getStudents()) {
  471. boolean studentAttendanceSelected = false;
  472. for (Attendance model : student.getAttendances()) {
  473. if (studentAttendanceSelected) continue;
  474. if (model.isAbsent() || model.isDelayed() || model.isPresent() || model.isJustified()) {
  475. attendanceSelectedCount++;
  476. studentAttendanceSelected = true;
  477. }
  478. }
  479. }
  480. return attendanceSelectedCount == RegisterManager.get().getCurrentSessionObject().getSessionList().getStudents().size();
  481. }
  482. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement