Exemplo n.º 1
0
        public Tenant SaveTenant(Tenant t)
        {
            if (t == null)
            {
                throw new ArgumentNullException("tenant");
            }

            using (var db = GetDb())
                using (var tx = db.BeginTransaction())
                {
                    if (!string.IsNullOrEmpty(t.MappedDomain))
                    {
                        var baseUrl = TenantUtil.GetBaseDomain(t.HostedRegion);

                        if (baseUrl != null && t.MappedDomain.EndsWith("." + baseUrl, StringComparison.InvariantCultureIgnoreCase))
                        {
                            ValidateDomain(db, t.MappedDomain.Substring(0, t.MappedDomain.Length - baseUrl.Length - 1), t.TenantId, false);
                        }
                        else
                        {
                            ValidateDomain(db, t.MappedDomain, t.TenantId, false);
                        }
                    }

                    if (t.TenantId == Tenant.DEFAULT_TENANT)
                    {
                        var q = new SqlQuery("tenants_version")
                                .Select("id")
                                .Where(Exp.Eq("default_version", 1) | Exp.Eq("id", 0))
                                .OrderBy(1, false)
                                .SetMaxResults(1);
                        t.Version = db.ExecuteScalar <int>(q);

                        var i = new SqlInsert("tenants_tenants", true)
                                .InColumnValue("id", t.TenantId)
                                .InColumnValue("alias", t.TenantAlias.ToLowerInvariant())
                                .InColumnValue("mappeddomain", !string.IsNullOrEmpty(t.MappedDomain) ? t.MappedDomain.ToLowerInvariant() : null)
                                .InColumnValue("version", t.Version)
                                .InColumnValue("version_changed", t.VersionChanged)
                                .InColumnValue("name", t.Name ?? t.TenantAlias)
                                .InColumnValue("language", t.Language)
                                .InColumnValue("timezone", t.TimeZone.Id)
                                .InColumnValue("owner_id", t.OwnerId.ToString())
                                .InColumnValue("trusteddomains", t.GetTrustedDomains())
                                .InColumnValue("trusteddomainsenabled", (int)t.TrustedDomainsType)
                                .InColumnValue("creationdatetime", t.CreatedDateTime)
                                .InColumnValue("status", (int)t.Status)
                                .InColumnValue("statuschanged", t.StatusChangeDate)
                                .InColumnValue("payment_id", t.PaymentId)
                                .InColumnValue("last_modified", t.LastModified = DateTime.UtcNow)
                                .InColumnValue("industry", (int)t.Industry)
                                .Identity <int>(0, t.TenantId, true);


                        t.TenantId = db.ExecuteScalar <int>(i);
                    }
                    else
                    {
                        var u = new SqlUpdate("tenants_tenants")
                                .Set("alias", t.TenantAlias.ToLowerInvariant())
                                .Set("mappeddomain", !string.IsNullOrEmpty(t.MappedDomain) ? t.MappedDomain.ToLowerInvariant() : null)
                                .Set("version", t.Version)
                                .Set("version_changed", t.VersionChanged)
                                .Set("name", t.Name ?? t.TenantAlias)
                                .Set("language", t.Language)
                                .Set("timezone", t.TimeZone.Id)
                                .Set("owner_id", t.OwnerId.ToString())
                                .Set("trusteddomains", t.GetTrustedDomains())
                                .Set("trusteddomainsenabled", (int)t.TrustedDomainsType)
                                .Set("creationdatetime", t.CreatedDateTime)
                                .Set("status", (int)t.Status)
                                .Set("statuschanged", t.StatusChangeDate)
                                .Set("payment_id", t.PaymentId)
                                .Set("last_modified", t.LastModified = DateTime.UtcNow)
                                .Set("industry", (int)t.Industry)
                                .Where("id", t.TenantId);

                        db.ExecuteNonQuery(u);
                    }

                    if (string.IsNullOrEmpty(t.PartnerId) && string.IsNullOrEmpty(t.AffiliateId))
                    {
                        var d = new SqlDelete("tenants_partners").Where("tenant_id", t.TenantId);
                        db.ExecuteNonQuery(d);
                    }
                    else
                    {
                        var i = new SqlInsert("tenants_partners", true)
                                .InColumnValue("tenant_id", t.TenantId)
                                .InColumnValue("partner_id", t.PartnerId)
                                .InColumnValue("affiliate_id", t.AffiliateId);
                        db.ExecuteNonQuery(i);
                    }

                    tx.Commit();
                }
            //CalculateTenantDomain(t);
            return(t);
        }