Editor.Services.PageServices.DeletePage C# (CSharp) Method

DeletePage() public method

public DeletePage ( PageDTO pagedto ) : System.Boolean
pagedto Editor.DTO.PageDTO
return System.Boolean
        public Boolean DeletePage(PageDTO pagedto)
        {
            Boolean status = false;
            using (ISession session = HibernateHelper.GetSession().OpenSession()) {
                using (ITransaction transaction = session.BeginTransaction()) {
                    try {
                        Page page = new Page();
                        Mapper.CreateMap<PageDTO, Page>();
                        Mapper.CreateMap<PageElementDTO, PageElement>();
                        //Mappo la PageDTO in Page
                        page = Mapper.Map<PageDTO, Page>(pagedto);

                        //Prendo i Figli del padre della pagina DTO
                        List<Page> Figli = new List<Page>();
                        Figli = EditorServices.GetPageByParent(session, page.Contentid, page.Parentpageid);

                        //Sposto il Pagedto Salvato accodandolo all'ultima posizione del cestino
                        Page Cestino = new Page();
                        Cestino = EditorServices.GetBasket(session, page.Contentid);
                        int actualpos = 0;
                        if (Cestino != null) {
                            List<Page> Cestinati = new List<Page>();
                            Cestinati = EditorServices.GetPageByParent(session, page.Contentid, Cestino.Pageid);
                            if (Cestinati.Count > 0) {
                                actualpos = (from c in Cestinati
                                             select c.Position).Max();
                            }
                        }

                        //Decremento la posizione dei figli successivi al DTO
                        foreach (Page pg in Figli) {
                            if (pg.Position > pagedto.Position) {
                                pg.Position = pg.Position - 1;
                                pg.Dirty = true;
                                HibernateHelper.Persist(pg, session);
                            } else
                                if (pg.Pageid == page.Pageid) {
                                    page = pg;
                                    pg.Parentpageid = Cestino.Pageid;
                                    pg.Position = actualpos + 1;
                                    pg.Dirty = true;
                                    pg.Deleted = false;
                                    HibernateHelper.Persist(pg, session);
                                }
                        }

                        transaction.Commit();
                        status = true;
                    } catch (Exception ex) {
                        transaction.Rollback();
                        status = false;
                        throw ex;
                    } finally {
                        session.Flush();
                        session.Close();
                    }
                }
            }

            //Setto lo stato del content a non allineato
            ContentServices contSvc = new ContentServices();
            contSvc.SetStateContent(pagedto.Contentid, (int)ContentStateEnum.NonAllineato);

            return status;
        }