public void Upload(Multipart <Spreadsheet> multipart, AdapterContext context)
            {
                try
                {
                    List <Region> regions = null;
                    if (context.Region.Type == RegionType.NASIONAL)
                    {
                        regions = DbContext.Set <Region>().Where(r => r.Type == RegionType.KABUPATEN).ToList();
                    }
                    else
                    {
                        regions = DbContext.Set <Region>().Where(r => r.Type == RegionType.DESA && r.Parent.fkParentId == context.Region.Id).ToList();
                    }

                    var allocations = new AllocationSpreadsheetReader <TAllocation>().Read(regions, new FileInfo(multipart.Files[0].FilePath));
                    var spreadsheet = multipart.Entity;
                    var user        = KawalDesaController.GetCurrentUser();

                    var fileResult = multipart.Files[0];
                    var blob       = new Blob(fileResult);
                    DbContext.Set <Blob>().Add(blob);
                    DbContext.SaveChanges();
                    fileResult.Move(blob.FilePath);

                    spreadsheet.FileName         = blob.RelativeFileName;
                    spreadsheet.fkCreatedById    = user.Id;
                    spreadsheet.fkOrganizationId = user.fkOrganizationId.Value;
                    spreadsheet.DateCreated      = DateTime.Now;
                    spreadsheet.DateActivated    = DateTime.Now;
                    spreadsheet.Type             = context.Type;
                    spreadsheet.ApbnKey          = context.Apbn.Key;
                    spreadsheet.fkRegionId       = context.Region.Id;
                    spreadsheet.fkFileId         = blob.Id;
                    DbContext.Set <Spreadsheet>().Add(spreadsheet);
                    DbContext.SaveChanges();

                    foreach (var allocation in allocations)
                    {
                        allocation.fkSpreadsheetId = spreadsheet.Id;
                        Init(context, allocation);
                        DbContext.Set <TAllocation>().Add(allocation);
                    }
                    DbContext.SaveChanges();

                    new SpreadsheetActivator <TAllocation>().Activate(DbContext, spreadsheet);
                }
                finally
                {
                    multipart.DeleteUnmoved();
                }
            }
            public void Publish(Stream fileStream, AdapterContext context, string notes)
            {
                try
                {
                    List <Region> regions = null;
                    if (context.Region.Type == RegionType.NASIONAL)
                    {
                        regions = DbContext.Set <Region>().Where(r => r.Type == RegionType.KABUPATEN).ToList();
                    }
                    else
                    {
                        regions = DbContext.Set <Region>().Where(r => r.Type == RegionType.DESA && r.Parent.fkParentId == context.Region.Id).ToList();
                    }

                    Blob blob = new Blob();
                    blob.Name = "Alocation_xxx.xlsx";

                    DbContext.Set <Blob>().Add(blob);
                    DbContext.SaveChanges();

                    byte[] fileBytes = null;
                    using (MemoryStream ms = new MemoryStream())
                    {
                        fileStream.CopyTo(ms);
                        fileBytes = ms.ToArray();
                    }

                    string fileName = blob.Id + ".xlsx";
                    string root     = HttpContext.Current.Server.MapPath("~/Content/Files");
                    var    user     = KawalDesaController.GetCurrentUser();

                    Directory.CreateDirectory(root);
                    String filePath = Path.Combine(root, fileName);
                    File.WriteAllBytes(filePath, fileBytes);

                    Spreadsheet spreadsheet = new Spreadsheet();
                    spreadsheet.File             = blob;
                    spreadsheet.Notes            = notes;
                    spreadsheet.fkCreatedById    = user.Id;
                    spreadsheet.fkOrganizationId = user.fkOrganizationId.Value;
                    spreadsheet.DateCreated      = DateTime.Now;
                    spreadsheet.DateActivated    = DateTime.Now;
                    spreadsheet.Type             = context.Type;
                    spreadsheet.ApbnKey          = context.Apbn.Key;
                    spreadsheet.fkRegionId       = context.Region.Id;
                    spreadsheet.fkFileId         = blob.Id;
                    DbContext.Set <Spreadsheet>().Add(spreadsheet);
                    DbContext.SaveChanges();

                    var allocations = new AllocationSpreadsheetReader <TAllocation>().Read(regions, fileBytes);

                    foreach (var allocation in allocations)
                    {
                        allocation.fkSpreadsheetId = spreadsheet.Id;
                        Init(context, allocation);
                        DbContext.Set <TAllocation>().Add(allocation);
                    }
                    DbContext.SaveChanges();

                    new SpreadsheetActivator <TAllocation>().Activate(DbContext, spreadsheet);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }