コード例 #1
0
    protected void btnEdit_Click(object sender, EventArgs e)
    {
        try
        {
            if (Page.IsValid)
            {
                int    id  = -1;
                string _id = Request.QueryString["id"].ToString();
                int.TryParse(_id, out id);
                int userId = CurrentEnvironment.LoggedUser.Id;

                HealthFacilityType o = HealthFacilityType.GetHealthFacilityTypeById(id);

                o.Name       = txtName.Text.Replace("'", @"''");
                o.Code       = txtCode.Text.Replace("'", @"''");
                o.Notes      = txtNotes.Text.Replace("'", @"''");
                o.IsActive   = bool.Parse(rblIsActive.SelectedValue);
                o.ModifiedOn = DateTime.Now;
                o.ModifiedBy = userId;
                if (id == 1)
                {
                    o.IsActive = true;
                }
                int i = HealthFacilityType.Update(o);

                if (i > 0)
                {
                    lblSuccess.Visible = true;
                    lblWarning.Visible = false;
                    lblError.Visible   = false;
                    gvHealthFacilityType.DataBind();
                    //ClearControls(this);
                }
                else
                {
                    lblSuccess.Visible = false;
                    lblWarning.Visible = true;
                    lblError.Visible   = false;
                }
            }
        }
        catch (Exception ex)
        {
            lblSuccess.Visible = false;
            lblWarning.Visible = false;
            lblError.Visible   = true;
        }
    }
コード例 #2
0
    protected void btnAdd_Click(object sender, EventArgs e)
    {
        try
        {
            if (Page.IsValid)
            {
                int userId = CurrentEnvironment.LoggedUser.Id;

                HealthFacilityType o = new HealthFacilityType();

                o.Name       = txtName.Text.Replace("'", @"''");
                o.Code       = txtCode.Text.Replace("'", @"''");
                o.IsActive   = bool.Parse(rblIsActive.SelectedValue);
                o.Notes      = txtNotes.Text.Replace("'", @"''");
                o.ModifiedOn = DateTime.Now;
                o.ModifiedBy = userId;

                int i = HealthFacilityType.Insert(o);
                if (i > 0)
                {
                    lblSuccess.Visible = true;
                    lblWarning.Visible = false;
                    lblError.Visible   = false;
                    gvHealthFacilityType.DataBind();
                    ClearControls(this);
                }
                else
                {
                    lblSuccess.Visible = false;
                    lblWarning.Visible = true;
                    lblError.Visible   = false;
                }
            }
        }
        catch (Exception ex)
        {
            lblSuccess.Visible = false;
            lblWarning.Visible = false;
            lblError.Visible   = true;
        }
    }
コード例 #3
0
    protected void btnRemove_Click(object sender, EventArgs e)
    {
        try
        {
            int    id  = -1;
            string _id = Request.QueryString["id"].ToString();
            int.TryParse(_id, out id);
            int userId = CurrentEnvironment.LoggedUser.Id;
            int i      = 0;
            if (id != 1)
            {
                i = HealthFacilityType.Remove(id);
            }

            if (i > 0)
            {
                lblSuccess.Visible = true;
                lblWarning.Visible = false;
                lblError.Visible   = false;
                gvHealthFacilityType.DataBind();
                ClearControls(this);
            }
            else
            {
                lblSuccess.Visible = false;
                lblWarning.Visible = false;
                lblError.Visible   = true;
            }
        }
        catch (Exception ex)
        {
            lblSuccess.Visible = false;
            lblWarning.Visible = false;
            lblError.Visible   = true;
        }
    }
コード例 #4
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.Page.IsPostBack)
        {
            List <string> actionList        = null;
            string        sessionNameAction = "";
            if (CurrentEnvironment.LoggedUser != null)
            {
                sessionNameAction = "__GIS_actionList_" + CurrentEnvironment.LoggedUser.Id;
                actionList        = (List <string>)Session[sessionNameAction];
            }

            if ((actionList != null) && actionList.Contains("ViewHealthFacilityType") && (CurrentEnvironment.LoggedUser != null))
            {
                int    userId     = CurrentEnvironment.LoggedUser.Id;
                string language   = CurrentEnvironment.Language;
                int    languageId = int.Parse(language);
                Dictionary <string, string> wtList = (Dictionary <string, string>)HttpContext.Current.Cache["HealthFacilityType-dictionary" + language];
                if (wtList == null)
                {
                    List <WordTranslate> wordTranslateList = WordTranslate.GetWordByLanguage(languageId, "HealthFacilityType");
                    wtList = new Dictionary <string, string>();
                    foreach (WordTranslate vwt in wordTranslateList)
                    {
                        wtList.Add(vwt.Code, vwt.Name);
                    }
                    HttpContext.Current.Cache.Insert("HealthFacilityType-dictionary" + language, wtList);
                }

                //controls
                this.lblName.Text     = wtList["HealthFacilityTypeName"];
                this.lblCode.Text     = wtList["HealthFacilityTypeCode"];
                this.lblIsActive.Text = wtList["HealthFacilityTypeIsActive"];
                this.lblNotes.Text    = wtList["HealthFacilityTypeNotes"];

                //grid header text
                gvHealthFacilityType.Columns[1].HeaderText = wtList["HealthFacilityTypeName"];
                gvHealthFacilityType.Columns[2].HeaderText = wtList["HealthFacilityTypeCode"];
                gvHealthFacilityType.Columns[3].HeaderText = wtList["HealthFacilityTypeNotes"];
                gvHealthFacilityType.Columns[4].HeaderText = wtList["HealthFacilityTypeIsActive"];

                // actions
                this.btnAdd.Visible    = actionList.Contains("AddHealthFacilityType");
                this.btnEdit.Visible   = actionList.Contains("EditHealthFacilityType");
                this.btnRemove.Visible = actionList.Contains("RemoveHealthFacilityType");

                //buttons
                this.btnAdd.Text    = wtList["HealthFacilityTypeAddButton"];
                this.btnEdit.Text   = wtList["HealthFacilityTypeEditButton"];
                this.btnRemove.Text = wtList["HealthFacilityTypeRemoveButton"];

                // message
                this.lblSuccess.Text = wtList["HealthFacilityTypeSuccessText"];
                this.lblWarning.Text = wtList["HealthFacilityTypeWarningText"];
                this.lblError.Text   = wtList["HealthFacilityTypeErrorText"];

                //Page Title
                this.lblTitle.Text = wtList["HealthFacilityTypePageTitle"];

                //Selected object
                int    id  = -1;
                string _id = Request.QueryString["id"];
                if (!String.IsNullOrEmpty(_id))
                {
                    int.TryParse(_id, out id);
                    HealthFacilityType o = HealthFacilityType.GetHealthFacilityTypeById(id);
                    txtName.Text  = o.Name;
                    txtCode.Text  = o.Code;
                    txtNotes.Text = o.Notes;
                    rblIsActive.Items[0].Selected = o.IsActive;
                    rblIsActive.Items[1].Selected = !o.IsActive;
                    btnAdd.Visible = false;
                }
                else
                {
                    btnEdit.Visible   = false;
                    btnRemove.Visible = false;
                }
            }
            else
            {
                Response.Redirect("Default.aspx", false);
            }
        }
    }
コード例 #5
0
        /// <summary>
        /// Initialize the test data
        /// </summary>
        public static void InitializeTestDataset()
        {
            /// Transaction type 999 = ID
            var transactionTypes = TransactionType.GetTransactionTypeList();

            if (!transactionTypes.Exists(o => o.Name == "Allocation"))
            {
                TransactionType.Insert(new TransactionType()
                {
                    Name = "Allocation"
                });
            }
            if (!transactionTypes.Exists(o => o.Name == "Transfer"))
            {
                TransactionType.Insert(new TransactionType()
                {
                    Name = "Transfer"
                });
            }


            // GTIN 12345 - PHARMACO OPV
            if (ItemManufacturer.GetItemManufacturerByGtin(GTIN_UNDER_TEST) == null)
            {
                // Item Category 999 = Vaccine
                if (ItemCategory.GetItemCategoryById(VACCINE_CATEGORY_ID) == null)
                {
                    VACCINE_CATEGORY_ID = ItemCategory.Insert(new ItemCategory()
                    {
                        Id         = VACCINE_CATEGORY_ID,
                        Code       = "VACCINE",
                        IsActive   = true,
                        ModifiedBy = 1,
                        ModifiedOn = DateTime.Now,
                        Name       = "Vaccine"
                    });
                }

                // Item 999 - OPV
                if (Item.GetItemById(OPV_ITEM_ID) == null)
                {
                    OPV_ITEM_ID = Item.Insert(new Item()
                    {
                        Code           = "OPV",
                        EntryDate      = DateTime.Now,
                        Id             = OPV_ITEM_ID,
                        ItemCategoryId = VACCINE_CATEGORY_ID,
                        IsActive       = true,
                        ModifiedBy     = 1,
                        ModifiedOn     = DateTime.Now,
                        Name           = "OPV"
                    });
                }

                // Unit of Measure
                if (Uom.GetUomById(DOSE_UOM_ID) == null)
                {
                    DOSE_UOM_ID = Uom.Insert(new Uom()
                    {
                        Id   = DOSE_UOM_ID,
                        Name = "DOSE"
                    });
                }

                // Manufacturer 999 - PHARMACO
                if (Manufacturer.GetManufacturerById(PHARMACO_MANUFACTURER_ID) == null)
                {
                    PHARMACO_MANUFACTURER_ID = Manufacturer.Insert(new Manufacturer()
                    {
                        Id         = PHARMACO_MANUFACTURER_ID,
                        Code       = "PHX",
                        IsActive   = true,
                        ModifiedBy = 1,
                        ModifiedOn = DateTime.Now,
                        Name       = "PHARMACO INC."
                    });
                }

                ItemManufacturer.Insert(new ItemManufacturer()
                {
                    Alt1QtyPer = 20,
                    BaseUom    = "DOSE",
                    BaseUomChildPerBaseUomParent = 10,
                    Gtin           = GTIN_UNDER_TEST,
                    IsActive       = true,
                    ItemId         = OPV_ITEM_ID,
                    ManufacturerId = PHARMACO_MANUFACTURER_ID,
                    ModifiedBy     = 1,
                    ModifiedOn     = DateTime.Now,
                    Price          = 9.99,
                    StorageSpace   = 1,
                    Alt1Uom        = "DOSE",
                    Alt2QtyPer     = 30,
                    Alt2Uom        = "DOSE"
                });
            }

            if (ItemLot.GetItemLotByGtin(GTIN_UNDER_TEST) == null)
            {
                // Item 999 - OPV
                if (Item.GetItemById(OPV_ITEM_ID) == null)
                {
                    OPV_ITEM_ID = Item.Insert(new Item()
                    {
                        Code           = "OPV",
                        EntryDate      = DateTime.Now,
                        Id             = OPV_ITEM_ID,
                        ItemCategoryId = VACCINE_CATEGORY_ID,
                        IsActive       = true,
                        ModifiedBy     = 1,
                        ModifiedOn     = DateTime.Now,
                        Name           = "OPV"
                    });
                }

                ItemLot.Insert(new ItemLot()
                {
                    ExpireDate = DateTime.Now.AddDays(10),
                    Gtin       = GTIN_UNDER_TEST,
                    ItemId     = OPV_ITEM_ID,
                    LotNumber  = GTIN_LOT_USE_FIRST
                });

                // Item Lot 2 - Will be more stock and expires later
                ItemLot.Insert(new ItemLot()
                {
                    ExpireDate = DateTime.Now.AddDays(40),
                    Gtin       = GTIN_UNDER_TEST,
                    ItemId     = OPV_ITEM_ID,
                    LotNumber  = GTIN_LOT_USE_LAST
                });

                // Item Lot 3 - Will trigger low stock
                ItemLot.Insert(new ItemLot()
                {
                    ExpireDate = DateTime.Now.AddDays(80),
                    Gtin       = GTIN_UNDER_TEST,
                    ItemId     = OPV_ITEM_ID,
                    LotNumber  = GTIN_LOT_LOW_BAL
                });
            }

            // Type 3 = DISTRICT
            if (HealthFacilityType.GetHealthFacilityTypeById(6) == null)
            {
                HealthFacilityType.Insert(new HealthFacilityType()
                {
                    Id         = 3,
                    Code       = "DISTRICT",
                    IsActive   = true,
                    ModifiedBy = 1,
                    ModifiedOn = DateTime.Now,
                    Name       = "DISTRICT LEVEL"
                });
            }

            // Type 6 = SDP
            if (HealthFacilityType.GetHealthFacilityTypeById(6) == null)
            {
                HealthFacilityType.Insert(new HealthFacilityType()
                {
                    Id         = 6,
                    Code       = "SDP",
                    IsActive   = true,
                    ModifiedBy = 1,
                    ModifiedOn = DateTime.Now,
                    Name       = "SDP"
                });
            }

            // HF888 = DISTRICT
            if (HealthFacility.GetHealthFacilityByCode("HF888") == null)
            {
                HealthFacility.Insert(new HealthFacility()
                {
                    Id   = 888,
                    Code = "HF888",
                    ColdStorageCapacity = 1000,
                    IsActive            = true,
                    Leaf             = false,
                    ParentId         = HealthFacility.GetHealthFacilityByParentId(0)[0].Id,
                    TopLevel         = false,
                    TypeId           = 3,
                    VaccinationPoint = false,
                    VaccineStore     = true,
                    ModifiedBy       = 1,
                    ModifiedOn       = DateTime.Now
                });
            }

            // GIVE HEALTH FACILITY SOME BALANCE
            var hf888Balances = HealthFacilityBalance.GetHealthFacilityBalanceByHealthFacilityCode("HF888");
            HealthFacilityBalance useFirst = hf888Balances.Find(o => o.Gtin == GTIN_UNDER_TEST && o.LotNumber == GTIN_LOT_USE_FIRST),
                                  useLast  = hf888Balances.Find(o => o.Gtin == GTIN_UNDER_TEST && o.LotNumber == GTIN_LOT_USE_LAST),
                                  lowStock = hf888Balances.Find(o => o.Gtin == GTIN_UNDER_TEST && o.LotNumber == GTIN_LOT_LOW_BAL);

            if (useFirst == null)
            {
                useFirst = new HealthFacilityBalance()
                {
                    Allocated          = 0,
                    Balance            = 500,
                    Distributed        = 0,
                    Gtin               = GTIN_UNDER_TEST,
                    HealthFacilityCode = "HF888",
                    LotNumber          = GTIN_LOT_USE_FIRST,
                    Received           = 0,
                    StockCount         = 500,
                    Used               = 0,
                    Wasted             = 0
                };
                hf888Balances.Add(useFirst);
                HealthFacilityBalance.Insert(useFirst);
            }
            else
            {
                useFirst.Balance    = 500;
                useFirst.StockCount = 500;
                HealthFacilityBalance.Update(useFirst);
            }

            if (useLast == null)
            {
                useLast = new HealthFacilityBalance()
                {
                    Allocated          = 0,
                    Balance            = 1000,
                    Distributed        = 0,
                    Gtin               = GTIN_UNDER_TEST,
                    HealthFacilityCode = "HF888",
                    LotNumber          = GTIN_LOT_USE_LAST,
                    Received           = 0,
                    StockCount         = 1000,
                    Used               = 0,
                    Wasted             = 0
                };
                hf888Balances.Add(useLast);
                HealthFacilityBalance.Insert(useLast);
            }
            else
            {
                useLast.Balance    = 1000;
                useLast.StockCount = 1000;
                HealthFacilityBalance.Update(useLast);
            }

            if (lowStock == null)
            {
                lowStock = new HealthFacilityBalance()
                {
                    Allocated          = 0,
                    Balance            = 10,
                    Distributed        = 0,
                    Gtin               = GTIN_UNDER_TEST,
                    HealthFacilityCode = "HF888",
                    LotNumber          = GTIN_LOT_LOW_BAL,
                    Received           = 0,
                    StockCount         = 10,
                    Used               = 0,
                    Wasted             = 0
                };
                hf888Balances.Add(lowStock);
                HealthFacilityBalance.Insert(lowStock);
            }
            else
            {
                useLast.Balance    = 10;
                useLast.StockCount = 10;
                HealthFacilityBalance.Update(lowStock);
            }

            // HF999 = SDP
            if (HealthFacility.GetHealthFacilityByCode("HF999") == null)
            {
                HealthFacility.Insert(new HealthFacility()
                {
                    Id   = 999,
                    Code = "HF999",
                    ColdStorageCapacity = 100,
                    IsActive            = true,
                    Leaf             = true,
                    ParentId         = HealthFacility.GetHealthFacilityByCode("HF888").Id,
                    TopLevel         = false,
                    TypeId           = 6,
                    VaccinationPoint = true,
                    VaccineStore     = true,
                    ModifiedOn       = DateTime.Now,
                    ModifiedBy       = 1
                });
            }
        }
コード例 #6
0
        static void Main(string[] args)
        {
            // Concepts
            Console.WriteLine("Generating OpenIZ Concepts to support GIIS data");
            DatasetInstall conceptDataset = new DatasetInstall()
            {
                Id = "Concepts to support TIIS data", Action = new List <DataInstallAction>()
            };
            DataInsert healthFacilityTypes = new DataInsert()
            {
                Element = new ConceptSet()
                {
                    Key      = Guid.NewGuid(),
                    Mnemonic = "HealthFacilityTypes",
                    Oid      = "1.3.6.1.4.1.45219.1.3.5.99.1",
                    Name     = "Health Facility Types",
                    Url      = "http://ivd.moh.go.tz/valueset/timr/HealthFacilityTypes"
                },
                Association = new List <DataAssociation>()
            },
                       placeTypes = new DataInsert()
            {
                Element = new ConceptSet()
                {
                    Key      = Guid.NewGuid(),
                    Mnemonic = "PlaceTypes",
                    Oid      = "1.3.6.1.4.1.45219.1.3.5.99.2",
                    Name     = "Place Sub-Classifications",
                    Url      = "http://openiz.org/valueset/timr/PlaceTypes"
                },
                Association = new List <DataAssociation>()
                {
                    new DataAssociation()
                    {
                        PropertyName = "Concepts",
                        Element      = new Concept()
                        {
                            Key = PT_DISTRICT,
                            StatusConceptKey = StatusKeys.Active,
                            IsSystemConcept  = false,
                            ClassKey         = ConceptClassKeys.Other,
                            Mnemonic         = "PlaceType-District",
                            ConceptNames     = new List <ConceptName>()
                            {
                                new ConceptName()
                                {
                                    Language = "en",
                                    Name     = "District"
                                }
                            }
                        }
                    },
                    new DataAssociation()
                    {
                        PropertyName = "Concepts",
                        Element      = new Concept()
                        {
                            Key = PT_DISTRICT_COUNCIL,
                            StatusConceptKey = StatusKeys.Active,
                            IsSystemConcept  = false,
                            ClassKey         = ConceptClassKeys.Other,
                            Mnemonic         = "PlaceType-DistrictCouncil",
                            ConceptNames     = new List <ConceptName>()
                            {
                                new ConceptName()
                                {
                                    Language = "en",
                                    Name     = "District Council"
                                }
                            }
                        }
                    },
                    new DataAssociation()
                    {
                        PropertyName = "Concepts",
                        Element      = new Concept()
                        {
                            Key = PT_REGION,
                            StatusConceptKey = StatusKeys.Active,
                            IsSystemConcept  = false,
                            ClassKey         = ConceptClassKeys.Other,
                            Mnemonic         = "PlaceType-Region",
                            ConceptNames     = new List <ConceptName>()
                            {
                                new ConceptName()
                                {
                                    Language = "en",
                                    Name     = "Region"
                                }
                            }
                        }
                    },
                    new DataAssociation()
                    {
                        PropertyName = "Concepts",
                        Element      = new Concept()
                        {
                            Key = PT_TERRITORY,
                            StatusConceptKey = StatusKeys.Active,
                            IsSystemConcept  = false,
                            ClassKey         = ConceptClassKeys.Other,
                            Mnemonic         = "PlaceType-Territory",
                            ConceptNames     = new List <ConceptName>()
                            {
                                new ConceptName()
                                {
                                    Language = "en",
                                    Name     = "Territory"
                                }
                            }
                        }
                    },
                    new DataAssociation()
                    {
                        PropertyName = "Concepts",
                        Element      = new Concept()
                        {
                            Key = PT_VILLAGE,
                            StatusConceptKey = StatusKeys.Active,
                            IsSystemConcept  = false,
                            ClassKey         = ConceptClassKeys.Other,
                            Mnemonic         = "PlaceType-Village",
                            ConceptNames     = new List <ConceptName>()
                            {
                                new ConceptName()
                                {
                                    Language = "en",
                                    Name     = "Village"
                                }
                            }
                        }
                    }
                }
            };


            foreach (var itm in HealthFacilityType.GetHealthFacilityTypeList().OrderBy(o => o.Id))
            {
                facilityTypeId.Add(itm.Id, Guid.NewGuid());

                healthFacilityTypes.Association.Add(
                    new DataAssociation()
                {
                    PropertyName = "Concepts",
                    Element      = new Concept()
                    {
                        Key = facilityTypeId[itm.Id],
                        StatusConceptKey = StatusKeys.Active,
                        IsSystemConcept  = false,
                        ClassKey         = ConceptClassKeys.Other,
                        Mnemonic         = "Facility-" + itm.Name.Replace(" ", ""),
                        ConceptNames     = new List <ConceptName>()
                        {
                            new ConceptName()
                            {
                                Language = "en",
                                Name     = itm.Name
                            }
                        }
                    }
                }
                    );
            }


            (healthFacilityTypes.Element as ConceptSet).ConceptsXml = healthFacilityTypes.Association.Select(o => o.Element.Key.Value).ToList();
            (placeTypes.Element as ConceptSet).ConceptsXml          = placeTypes.Association.Select(o => o.Element.Key.Value).ToList();
            conceptDataset.Action.AddRange(healthFacilityTypes.Association.Select(o => new DataInsert()
            {
                Element = o.Element
            }));
            conceptDataset.Action.AddRange(placeTypes.Association.Select(o => new DataInsert()
            {
                Element = o.Element
            }));
            conceptDataset.Action.AddRange(new DataInstallAction[]
            {
                new DataInsert()
                {
                    Element = new Concept()
                    {
                        Key = industryManufacturer, Mnemonic = "Industry-Manufacturing", ClassKey = ConceptClassKeys.Other, IsSystemConcept = false, StatusConceptKey = StatusKeys.Active, ConceptNames = new List <ConceptName>()
                        {
                            new ConceptName()
                            {
                                Language = "en", Name = "Manufacturing"
                            }
                        }, ConceptSetsXml = new List <Guid>()
                        {
                            Guid.Parse("d1597e50-845a-46e1-b9ae-6f99ff93d9db")
                        }
                    }
                },
                new DataInsert()
                {
                    Element = new Concept()
                    {
                        Key = industryOther, Mnemonic = "Industry-OtherUnknown", ClassKey = ConceptClassKeys.Other, IsSystemConcept = false, StatusConceptKey = StatusKeys.Active, ConceptNames = new List <ConceptName>()
                        {
                            new ConceptName()
                            {
                                Language = "en", Name = "Other/Unknown"
                            }
                        }, ConceptSetsXml = new List <Guid>()
                        {
                            Guid.Parse("d1597e50-845a-46e1-b9ae-6f99ff93d9db")
                        }
                    }
                },
                new DataInsert()
                {
                    Element = new Concept()
                    {
                        Key = industryHealthDelivery, Mnemonic = "Industry-HealthDelivery", ClassKey = ConceptClassKeys.Other, IsSystemConcept = false, StatusConceptKey = StatusKeys.Active, ConceptNames = new List <ConceptName>()
                        {
                            new ConceptName()
                            {
                                Language = "en", Name = "Healthcare"
                            }
                        }, ConceptSetsXml = new List <Guid>()
                        {
                            Guid.Parse("d1597e50-845a-46e1-b9ae-6f99ff93d9db")
                        }
                    }
                }
            });
            healthFacilityTypes.Association.Clear();
            placeTypes.Association.Clear();
            conceptDataset.Action.Add(healthFacilityTypes);
            conceptDataset.Action.Add(placeTypes);

            // Facilities
            Console.WriteLine("Exporting GIIS Facilities to OpenIZ IMS Format");
            DatasetInstall facilityDataset = new DatasetInstall()
            {
                Action = new List <DataInstallAction>()
            };

            facilityDataset.Id = "Facilities from GIIS";
            foreach (var itm in HealthFacility.GetHealthFacilityList().OrderBy(o => o.Id))
            {
                facilityDataset.Action.Add(new DataInsert()
                {
                    Element = MapFacility(itm)
                });
            }

            // Places
            Console.WriteLine("Exporting GIIS Places to OpenIZ IMS Format");
            DatasetInstall placeDataset = new DatasetInstall()
            {
                Action = new List <DataInstallAction>()
            };

            placeDataset.Id = "Places from GIIS";
            foreach (var itm in GIIS.DataLayer.Place.GetPlaceList().OrderBy(o => o.ParentId))
            {
                placeDataset.Action.Add(new DataInsert()
                {
                    Element = MapPlace(itm)
                });
            }

            // Users
            Console.WriteLine("Exporting GIIS Users to OpenIZ IMS Format");
            DatasetInstall userDataset = new DatasetInstall()
            {
                Action = new List <DataInstallAction>()
            };

            userDataset.Id = "Users from TIIS";
            foreach (var itm in User.GetUserList())
            {
                if (userDataset.Action.Any(o => (o.Element as SecurityUser)?.UserName.Trim().ToLower() == itm.Username.Trim().ToLower()) ||
                    itm.Username.ToLower() == "administrator")
                {
                    continue; /// Apparently user names are distinct based on case?
                }
                Guid userId = Guid.NewGuid(), entityId = Guid.NewGuid();
                userMap.Add(itm.Id, userId);

                if (!userEntityMap.TryGetValue(itm.Id, out entityId))
                {
                    entityId = Guid.NewGuid();
                    userEntityMap.Add(itm.Id, entityId);
                }
                var securityUser = new SecurityUser()
                {
                    Key              = userId,
                    UserName         = itm.Username,
                    Email            = itm.Email,
                    EmailConfirmed   = !String.IsNullOrEmpty(itm.Email),
                    LastLoginTime    = itm.Lastlogin,
                    SecurityHash     = Guid.Empty.ToString(),
                    Lockout          = itm.IsActive ? null : (DateTime?)DateTime.MaxValue,
                    PasswordHash     = BitConverter.ToString(Convert.FromBase64String(itm.Password)).Replace("-", ""),
                    UserClass        = UserClassKeys.HumanUser,
                    TwoFactorEnabled = false,
                    ObsoletionTime   = itm.Deleted ? (DateTime?)DateTime.Now : null,
                    ObsoletedByKey   = itm.Deleted ? (Guid?)Guid.Parse(AuthenticationContext.SystemUserSid) : null,
                };
                var userEntity = new UserEntity()
                {
                    Key   = entityId,
                    Names = new List <EntityName>()
                    {
                        new EntityName(NameUseKeys.OfficialRecord, itm.Lastname, itm.Firstname)
                    },

                    SecurityUserKey = userId,
                    Identifiers     = new List <EntityIdentifier>()
                    {
                        new EntityIdentifier(new AssigningAuthority("TIIS_USER_ID", "TIIS User Identifiers", "1.3.6.1.4.1.45219.1.3.5.2"), itm.Id.ToString())
                    },
                    Tags = new List <EntityTag>()
                    {
                        new EntityTag("http://openiz.org/tags/contrib/importedData", "true")
                    },
                    StatusConceptKey = itm.IsActive ? StatusKeys.Active : StatusKeys.Obsolete
                };
                if (!String.IsNullOrEmpty(itm.Email))
                {
                    userEntity.Telecoms = new List <EntityTelecomAddress>()
                    {
                        new EntityTelecomAddress(TelecomAddressUseKeys.WorkPlace, itm.Email)
                    }
                }
                ;

                Guid facilityId = Guid.Empty;
                if (facilityMap.TryGetValue(itm.HealthFacilityId, out facilityId))
                {
                    userEntity.Relationships.Add(new EntityRelationship(EntityRelationshipTypeKeys.Employee, new Entity()
                    {
                        Key = facilityId
                    }));
                }

                // data element
                var securityUserData = new DataInsert()
                {
                    Element     = securityUser,
                    Association = new List <DataAssociation>()
                };

                // Role
                foreach (var r in Role.GetRolesOfUser(itm.Id))
                {
                    Guid roleId = Guid.Empty;
                    if (!roleMap.TryGetValue(r.Id, out roleId))
                    {
                        roleId = Guid.NewGuid();
                        roleMap.Add(r.Id, roleId);
                    }

                    var role = new SecurityRole()
                    {
                        Key            = roleId,
                        Name           = r.Name,
                        ObsoletionTime = r.IsActive ? null : (DateTime?)DateTime.Now,
                        ObsoletedByKey = r.IsActive ? null : (Guid?)Guid.Parse(AuthenticationContext.SystemUserSid)
                    };

                    // Add roles to the user
                    securityUserData.Association.Add(new DataAssociation()
                    {
                        PropertyName = "Roles",
                        Element      = new SecurityRole()
                        {
                            Key = role.Key
                        }
                    });

                    // Add role
                    userDataset.Action.Add(new DataInsert()
                    {
                        Element = role
                    });

                    // Vaccinator?
                    if (r.Name == "Vaccinator")
                    {
                        // Provider entity
                        var providerEntity = new Provider()
                        {
                            Key         = Guid.NewGuid(),
                            Names       = userEntity.Names,
                            Telecoms    = userEntity.Telecoms,
                            Identifiers = userEntity.Identifiers.Select(o => new EntityIdentifier(new AssigningAuthority("PROVIDER_ID", "TImR Assigned Provider ID", "1.3.6.1.4.1.45219.1.3.5.80"), o.Value)).ToList(),
                            Tags        = new List <EntityTag>()
                            {
                                new EntityTag("http://openiz.org/tags/contrib/importedData", "true")
                            },
                            StatusConceptKey = itm.IsActive ? StatusKeys.Active : StatusKeys.Obsolete
                        };
                        userDataset.Action.Add(new DataInsert()
                        {
                            Element = providerEntity
                        });

                        // Create a heath care provider
                        userEntity.Relationships.Add(new EntityRelationship()
                        {
                            RelationshipTypeKey = EntityRelationshipTypeKeys.AssignedEntity,
                            TargetEntityKey     = providerEntity.Key
                        });
                    }
                }


                userDataset.Action.Add(securityUserData);
                userDataset.Action.Add(new DataInsert()
                {
                    Element = userEntity
                });
            }

            var materialDataset = new DatasetInstall()
            {
                Id = "Manufactured Materials from GIIS"
            };

            foreach (var il in ItemLot.GetItemLotList())
            {
                var itm = MapMaterial(il, materialDataset);
                materialDataset.Action.Add(new DataUpdate()
                {
                    InsertIfNotExists = true, Element = itm
                });
            }


            // Write datasets
            XmlSerializer xsz = new XmlSerializer(typeof(DatasetInstall));

            using (var fs = File.Create("990-tiis.concepts.dataset"))
                xsz.Serialize(fs, conceptDataset);
            using (var fs = File.Create("991-tiis.facilities.dataset"))
                xsz.Serialize(fs, facilityDataset);
            using (var fs = File.Create("992-tiis.places.dataset"))
                xsz.Serialize(fs, placeDataset);
            using (var fs = File.Create("993-tiis.users.dataset"))
                xsz.Serialize(fs, userDataset);
            using (var fs = File.Create("994-tiis.materials.dataset"))
                xsz.Serialize(fs, materialDataset);
        }
    }