public JsonResult SubmitUserSelections(string username, string password, string xmlData)
        {
            var mgr = HttpContext.GetOwinContext().GetUserManager <ApplicationUserManager>();
            var usr = mgr.Find(username, password);

            if (usr == null)
            {
                return(Json(new MyJsonResult("Invalid username/password", MyJsonResult.InvalidUsernamePassword)));
            }
            using (var ent = new mushaf_qeraat_serverEntities())
            {
                var usrDb = ent.User.FirstOrDefault(k => k.UsersTableID == usr.Id);
                if (usrDb == null || usrDb.CanSubmit != true)
                {
                    return(Json(new MyJsonResult("Not permitted to submit", MyJsonResult.NotPermittedToSubmit)));
                }

                var details = new List <Detail>();
                var shaheds = new List <Shahed>();
                var mawade3 = new List <Mawd3>();
                var groups  = new List <Group>();
                var khlafs  = new List <Khlaf>();
                readXml(xmlData, details, shaheds, mawade3, groups, khlafs);

                using (var trans = ent.Database.BeginTransaction())
                {
                    try
                    {
                        var mySubmits    = ent.UserSubmit.Where(k => k.UserId == usrDb.ID);
                        var myShatibiyah = ent.Submit_ShatibiyyahShahed.Where(m => mySubmits.Any(k => k.ID == m.SubmitID));
                        var myDorrah     = ent.Submit_DorrahShahed.Where(m => mySubmits.Any(k => k.ID == m.SubmitID));
                        var myDetails    = ent.Submit_MawdeaKhlafDetail.Where(m => mySubmits.Any(k => k.ID == m.SubmitID));
                        var myMawadea    = ent.Submit_MawdeaKhlaf.Where(m => mySubmits.Any(k => k.ID == m.SubmitID));
                        var myGroups     = ent.Submit_KhlafGroup.Where(m => mySubmits.Any(k => k.ID == m.SubmitID));
                        var myKhlafs     = ent.Submit_Khlaf.Where(m => mySubmits.Any(k => k.ID == m.SubmitID));
                        var submit       = new UserSubmit()
                        {
                            UserId     = usrDb.ID,
                            SubmitTime = DateTime.Now
                        };
                        ent.UserSubmit.Add(submit);
                        ent.SaveChanges();
                        var resolve = new List <KeyValuePair <MawdeaKhlafDetail, Detail> >();
                        #region Detail
                        var det_i = from b in details
                                    where !myDetails.Any(k => k.TableID == b.ID)
                                    select b;
                        foreach (var item in det_i)
                        {
                            var id  = myMawadea.FirstOrDefault(k => k.TableID == item.Owner);
                            var obj = new MawdeaKhlafDetail()
                            {
                                KhlafType = item.Type
                            };
                            if (id == null)
                            {
                                resolve.Add(new KeyValuePair <MawdeaKhlafDetail, Detail>(obj, item));
                            }
                            else
                            {
                                obj.OwnerMawdeaKhlaf = id.InsertedID;
                            }
                            ent.MawdeaKhlafDetail.Add(obj);
                            ent.SaveChanges();
                            ent.Submit_MawdeaKhlafDetail.Add(new Submit_MawdeaKhlafDetail()
                            {
                                DetailType       = item.Type,
                                OwnerMawdeaKhlaf = item.Owner,
                                SubmitID         = submit.ID,
                                TableID          = item.ID,
                                InsertedID       = obj.C_ID
                            });
                        }
                        var det_u = from b in details
                                    where myDetails.Any(k => k.TableID == b.ID)
                                    select b;
                        foreach (var item in det_u)
                        {
                            var id    = myDetails.First(k => k.TableID == item.ID).InsertedID;
                            var up    = ent.MawdeaKhlafDetail.First(k => k.C_ID == id);
                            var owner = myMawadea.FirstOrDefault(k => k.TableID == item.Owner);
                            if (owner == null)
                            {
                                resolve.Add(new KeyValuePair <MawdeaKhlafDetail, Detail>(up, item));
                            }
                            else
                            {
                                up.OwnerMawdeaKhlaf = owner.InsertedID;
                            }
                            ent.Submit_MawdeaKhlafDetail.Add(new Submit_MawdeaKhlafDetail()
                            {
                                DetailType       = item.Type,
                                OwnerMawdeaKhlaf = item.Owner,
                                SubmitID         = submit.ID,
                                TableID          = item.ID,
                                InsertedID       = id,
                                RejectReason     = 1
                            });
                        }
                        var ints = (from b in details
                                    select b.ID).ToArray();
                        var det_d = from b in myDetails
                                    where !ints.Any(k => k == b.TableID)
                                    select b;
                        foreach (var item in det_d)
                        {
                            var del = ent.MawdeaKhlafDetail.First(k => k.C_ID == item.InsertedID);
                            if (!del.IsDeleted)
                            {
                                del.IsDeleted = true;
                                ent.Submit_MawdeaKhlafDetail.Add(new Submit_MawdeaKhlafDetail()
                                {
                                    DetailType       = del.KhlafType,
                                    OwnerMawdeaKhlaf = del.OwnerMawdeaKhlaf,
                                    InsertedID       = item.InsertedID,
                                    RejectReason     = 2,
                                    SubmitID         = submit.ID
                                });
                            }
                        }
                        #endregion
                        #region Mawdea Khlaf
                        var mawd_i = from b in mawade3
                                     where !myMawadea.Any(k => k.TableID == b.ID)
                                     select b;
                        foreach (var item in mawd_i)
                        {
                            var obj = new MawdeaKhlaf()
                            {
                                DetailID   = (int)myDetails.First(k => k.TableID == item.Detail).InsertedID,
                                PageNumber = item.Page,
                                x1         = item.x1, y1 = item.y1, x2 = item.x2, y2 = item.y2
                            };
                            ent.MawdeaKhlaf.Add(obj);
                            ent.SaveChanges();
                            ent.Submit_MawdeaKhlaf.Add(new Submit_MawdeaKhlaf()
                            {
                                TableID    = item.ID,
                                PageNumber = item.Page,
                                x1         = item.x1,
                                y1         = item.y1,
                                x2         = item.x2,
                                y2         = item.y2,
                                InsertedID = obj.C_ID,
                                DetailID   = item.Detail,
                                SubmitID   = submit.ID
                            });
                        }
                        var mawd_u = from b in mawade3
                                     where myMawadea.Any(k => k.TableID == b.ID)
                                     select b;
                        foreach (var item in mawd_u)
                        {
                            var id = myMawadea.First(k => k.TableID == item.ID).InsertedID;
                            var up = ent.MawdeaKhlaf.First(k => k.C_ID == id);
                            up.x1 = item.x1; up.x2 = item.x2; up.y1 = item.y1; up.y2 = item.y2;
                            ent.Submit_MawdeaKhlaf.Add(new Submit_MawdeaKhlaf()
                            {
                                TableID      = item.ID,
                                PageNumber   = item.Page,
                                x1           = item.x1,
                                y1           = item.y1,
                                x2           = item.x2,
                                y2           = item.y2,
                                InsertedID   = id,
                                RejectReason = 1,
                                DetailID     = item.Detail,
                                SubmitID     = submit.ID
                            });
                        }
                        ints = (from b in mawade3 select b.ID).ToArray();
                        var mawd_d = from b in myMawadea
                                     where !ints.Any(k => k == b.TableID)
                                     select b;
                        foreach (var item in mawd_d)
                        {
                            var del = ent.MawdeaKhlaf.First(k => k.C_ID == item.InsertedID);
                            if (!del.IsDeleted)
                            {
                                del.IsDeleted = true;

                                ent.Submit_MawdeaKhlaf.Add(new Submit_MawdeaKhlaf()
                                {
                                    PageNumber   = del.PageNumber,
                                    x1           = del.x1,
                                    y1           = del.y1,
                                    x2           = del.x2,
                                    y2           = del.y2,
                                    InsertedID   = del.C_ID,
                                    RejectReason = 2,
                                    DetailID     = del.DetailID,
                                    SubmitID     = submit.ID
                                });
                            }
                        }
                        #endregion
                        ent.SaveChanges();
                        foreach (var item in resolve)
                        {
                            item.Key.OwnerMawdeaKhlaf = myMawadea.First(k => k.TableID == item.Value.Owner).InsertedID;
                        }

                        #region Shahed
                        var shat_i = from b in shaheds
                                     where !b.Dorrah && !myShatibiyah.Any(k => k.TableDetailID == b.Detail && k.BeitID == b.Beit)
                                     select b;
                        foreach (var item in shat_i)
                        {
                            var obj = new ShatibiyyahShahed()
                            {
                                BeitID   = item.Beit,
                                BeitPart = item.Part,
                                DetailID = (int)myDetails.First(k => k.TableID == item.Detail).InsertedID
                            };
                            ent.ShatibiyyahShahed.Add(obj);
                            ent.SaveChanges();
                            ent.Submit_ShatibiyyahShahed.Add(new Submit_ShatibiyyahShahed()
                            {
                                BeitID           = item.Beit,
                                BeitPart         = item.Part,
                                SubmitID         = submit.ID,
                                TableDetailID    = item.Detail,
                                InsertedDetailID = obj.DetailID
                            });
                        }
                        var shat_tmp = (from b in myShatibiyah
                                        select new { b.TableDetailID, b.BeitID }).ToArray();
                        var shat_d = from b in shat_tmp
                                     where !shaheds.Any(k => !k.Dorrah && b.TableDetailID == k.Detail && b.BeitID == k.Beit)
                                     select b;
                        foreach (var i in shat_d)
                        {
                            var item = myShatibiyah.First(k => k.BeitID == i.BeitID && k.TableDetailID == i.TableDetailID);
                            var del  = ent.ShatibiyyahShahed.First(k => k.DetailID == item.InsertedDetailID && k.BeitID == item.BeitID);
                            if (!del.IsDeleted)
                            {
                                del.IsDeleted = true;
                                ent.Submit_ShatibiyyahShahed.Add(new Submit_ShatibiyyahShahed()
                                {
                                    BeitID           = item.BeitID,
                                    BeitPart         = item.BeitPart,
                                    SubmitID         = submit.ID,
                                    InsertedDetailID = item.InsertedDetailID,
                                    RejectReason     = 2
                                });
                            }
                        }

                        var dor_i = from b in shaheds
                                    where b.Dorrah && !myDorrah.Any(k => k.TableDetailID == b.Detail && k.BeitID == b.Beit)
                                    select b;
                        foreach (var item in dor_i)
                        {
                            var obj = new DorrahShahed()
                            {
                                BeitID   = item.Beit,
                                BeitPart = item.Part,
                                DetailID = (int)myDetails.First(k => k.TableID == item.Detail).InsertedID
                            };
                            ent.DorrahShahed.Add(obj);
                            ent.SaveChanges();
                            ent.Submit_DorrahShahed.Add(new Submit_DorrahShahed()
                            {
                                BeitID           = item.Beit,
                                BeitPart         = item.Part,
                                SubmitID         = submit.ID,
                                TableDetailID    = item.Detail,
                                InsertedDetailID = obj.DetailID
                            });
                        }
                        var dor_tmp = (from b in myDorrah
                                       select new { b.TableDetailID, b.BeitID }).ToArray();
                        var dor_d = from b in dor_tmp
                                    where !shaheds.Any(k => k.Dorrah && b.TableDetailID == k.Detail && b.BeitID == k.Beit)
                                    select b;
                        foreach (var i in dor_d)
                        {
                            var item = myDorrah.First(k => k.BeitID == i.BeitID && k.TableDetailID == i.TableDetailID);
                            var del  = ent.DorrahShahed.First(k => k.DetailID == item.InsertedDetailID && k.BeitID == item.BeitID);
                            if (!del.IsDeleted)
                            {
                                del.IsDeleted = true;
                                ent.Submit_DorrahShahed.Add(new Submit_DorrahShahed()
                                {
                                    BeitID           = item.BeitID,
                                    BeitPart         = item.BeitPart,
                                    SubmitID         = submit.ID,
                                    InsertedDetailID = item.InsertedDetailID,
                                    RejectReason     = 2
                                });
                            }
                        }
                        #endregion
                        #region Group
                        var gr_i = from b in groups
                                   where !myGroups.Any(k => k.TableID == b.ID)
                                   select b;
                        foreach (var item in gr_i)
                        {
                            var obj = new KhlafGroup()
                            {
                                Description         = item.Descr,
                                MawdeaKhlafDetailID = (int)myDetails.First(k => k.TableID == item.Detail).InsertedID
                            };
                            ent.KhlafGroup.Add(obj);
                            ent.SaveChanges();
                            ent.Submit_KhlafGroup.Add(new Submit_KhlafGroup()
                            {
                                Description         = item.Descr,
                                InsertedID          = obj.C_ID,
                                SubmitID            = submit.ID,
                                TableID             = item.ID,
                                MawdeaKhlafDetailID = item.Detail
                            });
                        }
                        var gr_u = from b in groups
                                   where myGroups.Any(k => k.TableID == b.ID)
                                   select b;
                        foreach (var item in gr_u)
                        {
                            var id = myGroups.First(k => k.TableID == item.ID).InsertedID;
                            var up = ent.KhlafGroup.First(k => k.C_ID == id);
                            up.Description = item.Descr;
                            ent.Submit_KhlafGroup.Add(new Submit_KhlafGroup()
                            {
                                Description         = item.Descr,
                                InsertedID          = id, RejectReason = 1,
                                SubmitID            = submit.ID,
                                TableID             = item.ID,
                                MawdeaKhlafDetailID = item.Detail
                            });
                        }
                        ints = (from b in groups select b.ID).ToArray();
                        var gr_d = from b in myGroups
                                   where !ints.Any(k => k == b.TableID)
                                   select b;
                        foreach (var item in gr_d)
                        {
                            var del = ent.KhlafGroup.First(k => k.C_ID == item.InsertedID);
                            if (!del.IsDeleted)
                            {
                                del.IsDeleted = true;
                                ent.Submit_KhlafGroup.Add(new Submit_KhlafGroup()
                                {
                                    Description         = item.Description,
                                    InsertedID          = item.InsertedID,
                                    RejectReason        = 2,
                                    SubmitID            = submit.ID,
                                    MawdeaKhlafDetailID = item.MawdeaKhlafDetailID
                                });
                            }
                        }
                        #endregion
                        #region Khlaf
                        var kh_i = from b in khlafs
                                   where !myKhlafs.Any(k => k.TableKhlafGroupID == b.Group && k.TableRewayahID == b.Rewayah)
                                   select b;
                        foreach (var item in kh_i)
                        {
                            var obj = new WebApplication.Models.Database.Khlaf()
                            {
                                HasKholf     = item.Kholf,
                                KhlafGroupID = (int)myGroups.First(k => k.TableID == item.Group).InsertedID,
                                RewayahID    = item.Rewayah
                            };
                            ent.Khlaf.Add(obj);
                            ent.Submit_Khlaf.Add(new Submit_Khlaf()
                            {
                                InsertedKhlafGroupID = obj.KhlafGroupID,
                                InsertedRewayahID    = item.Rewayah,
                                TableKhlafGroupID    = item.Group,
                                TableRewayahID       = item.Rewayah,
                                SubmitID             = submit.ID,
                                HasKholf             = item.Kholf
                            });
                        }
                        var kh_u = from b in khlafs
                                   where myKhlafs.Any(k => k.TableKhlafGroupID == b.Group && k.TableRewayahID == b.Rewayah)
                                   select b;
                        foreach (var item in kh_u)
                        {
                            var id = myKhlafs.First(k => k.TableKhlafGroupID == item.Group && k.TableRewayahID == item.Rewayah)
                                     .InsertedKhlafGroupID;
                            var up = ent.Khlaf.First(k => k.KhlafGroupID == id && k.RewayahID == item.Rewayah);
                            up.HasKholf = item.Kholf;
                            ent.Submit_Khlaf.Add(new Submit_Khlaf()
                            {
                                InsertedKhlafGroupID = id,
                                InsertedRewayahID    = item.Rewayah,
                                TableKhlafGroupID    = item.Group,
                                TableRewayahID       = item.Rewayah,
                                SubmitID             = submit.ID,
                                HasKholf             = item.Kholf, RejectReason = 1
                            });
                        }
                        var kh_tmp = (from b in myKhlafs select new { b.TableKhlafGroupID, b.TableRewayahID }).ToArray();
                        var kh_d   = from b in kh_tmp
                                     where !khlafs.Any(k => b.TableKhlafGroupID == k.Group && b.TableRewayahID == k.Rewayah)
                                     select b;
                        foreach (var i in kh_d)
                        {
                            var item = myKhlafs.First(k => k.TableRewayahID == i.TableRewayahID && k.TableKhlafGroupID == i.TableKhlafGroupID);
                            var del  = ent.Khlaf.First(k => k.KhlafGroupID == item.InsertedKhlafGroupID && k.RewayahID == item.InsertedRewayahID);
                            if (!del.IsDeleted)
                            {
                                del.IsDeleted = true;
                                ent.Submit_Khlaf.Add(new Submit_Khlaf()
                                {
                                    InsertedKhlafGroupID = item.InsertedKhlafGroupID,
                                    InsertedRewayahID    = item.InsertedRewayahID,
                                    SubmitID             = submit.ID,
                                    HasKholf             = item.HasKholf,
                                    RejectReason         = 2
                                });
                            }
                        }
                        #endregion
                        ent.SaveChanges();
                        trans.Commit();
                    }
                    catch (Exception ex)
                    {
                        string message = ex.Message;
                        while (ex.InnerException != null)
                        {
                            ex      = ex.InnerException;
                            message = ex.Message;
                        }
                        return(Json(new MyJsonResult("Internal Server Error\n" + message, MyJsonResult.InternalServerError)));
                    }
                }
            }
            return(Json(new MyJsonResult("Ok", MyJsonResult.Ok)));
        }
        public string GetMorag3ahSelections(string username, string password)
        {
            var mgr = HttpContext.GetOwinContext().GetUserManager <ApplicationUserManager>();
            var usr = mgr.Find(username, password);

            if (usr == null)
            {
                return(MyJsonResult.InvalidUsernamePassword + ": Invalid username/password");
            }
            using (var ent = new mushaf_qeraat_serverEntities())
            {
                var usrDb = ent.User.FirstOrDefault(k => k.UsersTableID == usr.Id);
                if (usrDb == null || usrDb.CanSubmit != true)
                {
                    return(MyJsonResult.NotPermittedToSubmit + ": Not permitted");
                }
                StringBuilder b = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?>").AppendLine("<all>");
                b.AppendLine("<DorrahShaheds>");
                foreach (var item in ent.DorrahShahed.Where(k => !k.IsDeleted))
                {
                    b.Append("<DorrahShahed DetailID=\"").Append(item.DetailID)
                    .Append("\" BeitID=\"").Append(item.BeitID)
                    .Append("\" BeitPart=\"").Append(item.BeitPart)
                    .AppendLine("\" />");
                }
                b.AppendLine("</DorrahShaheds>");

                b.AppendLine("<KhlafGroups>");
                foreach (var item in ent.KhlafGroup.Where(k => !k.IsDeleted))
                {
                    b.Append("<KhlafGroup _ID=\"").Append(item.C_ID)
                    .Append("\" MawdeaKhlafDetailID=\"").Append(item.MawdeaKhlafDetailID)
                    .Append("\">")
                    .Append(item.Description)
                    .AppendLine("</KhlafGroup>");
                }
                b.AppendLine("</KhlafGroups>");

                b.AppendLine("<Khlafs>");
                foreach (var item in ent.Khlaf.Where(k => !k.IsDeleted))
                {
                    b.Append("<Khlaf RewayahID=\"").Append(item.RewayahID)
                    .Append("\" HasKholf=\"").Append(item.HasKholf ? 1 : 0)
                    .Append("\" KhlafGroupID=\"").Append(item.KhlafGroupID)
                    .AppendLine("\" />");
                }
                b.AppendLine("</Khlafs>");

                b.AppendLine("<MawdeaKhlafDetails>");
                foreach (var item in ent.MawdeaKhlafDetail.Where(k => !k.IsDeleted))
                {
                    b.Append("<MawdeaKhlafDetail _ID=\"").Append(item.C_ID)
                    .Append("\" OwnerMawdeaKhlaf=\"").Append(item.OwnerMawdeaKhlaf)
                    .Append("\" KhlafType=\"").Append(item.KhlafType)
                    .AppendLine("\" />");
                }
                b.AppendLine("</MawdeaKhlafDetails>");

                b.AppendLine("<MawdeaKhlafs>");
                foreach (var item in ent.MawdeaKhlaf.Where(k => !k.IsDeleted))
                {
                    b.Append("<MawdeaKhlaf _ID=\"").Append(item.C_ID)
                    .Append("\" PageNumber=\"").Append(item.PageNumber)
                    .Append("\" DetailID=\"").Append(item.DetailID)
                    .Append("\" x1=\"").Append(item.x1)
                    .Append("\" y1=\"").Append(item.y1)
                    .Append("\" x2=\"").Append(item.x2)
                    .Append("\" y2=\"").Append(item.y2)
                    .AppendLine("\" />");
                }
                b.AppendLine("</MawdeaKhlafs>");

                b.AppendLine("<ShatibiyyahShaheds>");
                foreach (var item in ent.DorrahShahed.Where(k => !k.IsDeleted))
                {
                    b.Append("<ShatibiyyahShahed DetailID=\"").Append(item.DetailID)
                    .Append("\" BeitID=\"").Append(item.BeitID)
                    .Append("\" BeitPart=\"").Append(item.BeitPart)
                    .AppendLine("\" />");
                }
                b.AppendLine("</ShatibiyyahShaheds>");
                return(MyJsonResult.Ok + ": " + b.Append("</all>"));
            }
        }