Ejemplo n.º 1
0
        public OrderView(order o, organisation s, string receiverAddress, long sessionid, TransactionType type)
        {
            order  = o.ToModel(type, sessionid);
            sender = s.ToFullOrganisationAddress();
            banner =
                s.logo.HasValue
                    ? s.image.ToModel(Imgsize.BANNER).url.ToHtmlImage()
                    : "";
            receiver = receiverAddress;
            currency = o.currency.ToCurrency();

            // handle addresses
            if (!o.allDigitalOrderItems())
            {
                order.billingAddress  = o.address1.ToHtmlString();
                order.shippingAddress = o.address.ToHtmlString();
            }

            if (o.shipwireTransaction != null)
            {
                submittedToShipwire = true;
            }

            transactionID = (o.transactions ?? o.transactions1.First()).id;

            // init commentrs for new inline format
            comments = Enumerable.Empty <OrderComment>();
        }
Ejemplo n.º 2
0
 public void CreateEmptyOrder(long onumber, organisation org, TransactionType type)
 {
     orderNumber     = onumber;
     isNew           = true;
     orderDate       = DateTime.UtcNow;
     terms           = org.MASTERsubdomain.paymentTerms;
     TransactionType = type;
     currency        = org.MASTERsubdomain.currency.ToCurrency();
 }
Ejemplo n.º 3
0
 public UnitTest1()
 {
     userWithNoName = new user();
     userOrg        = new organisation()
     {
         name = "Test Org Name"
     };
     userOrg.users.Add(userWithNoName);
 }
Ejemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="org"></param>
        /// <param name="standAlone">true: includes ul tag</param>
        /// <returns></returns>
        public static string ToOrganisationAddress(this organisation org, bool standAlone, bool useBreaks = false)
        {
            var sb = new StringBuilder();

            if (standAlone)
            {
                sb.Append("<ul>");
            }
            if (!string.IsNullOrEmpty(org.address))
            {
                if (useBreaks)
                {
                    sb.AppendFormat("{0}<br />", org.address.ToHtmlBreak());
                }
                else
                {
                    sb.AppendFormat("<li>{0}</li>", org.address.ToHtmlBreak());
                }
            }

            if (useBreaks)
            {
                sb.AppendFormat("{0}<br />{1} {2}<br />",
                                org.city.HasValue ? org.MASTERcity.name : "",
                                org.state.ToStateName(org.country.HasValue?org.country.Value.ToString():""),
                                org.postcode);
            }
            else
            {
                sb.AppendFormat("<li>{0}</li><li>{1} {2}</li>",
                                org.city.HasValue ? org.MASTERcity.name : "",
                                org.state.ToStateName(org.country.HasValue ? org.country.Value.ToString() : ""),
                                org.postcode);
            }


            if (org.country.HasValue)
            {
                if (useBreaks)
                {
                    sb.AppendFormat("{0}<br />", Country.GetCountry(org.country.Value).name);
                }
                else
                {
                    sb.AppendFormat("<li>{0}</li>", Country.GetCountry(org.country.Value).name);
                }
            }

            if (standAlone)
            {
                sb.Append("</ul>");
            }

            return(sb.ToString());
        }
Ejemplo n.º 5
0
 public static GoogleMapData ToGoogleMap(this organisation row)
 {
     return(new GoogleMapData
     {
         latitude = row.latitude.HasValue ? row.latitude.Value : 0,
         longtitude = row.longtitude.HasValue ? row.longtitude.Value : 0,
         mapZoom = row.zoom.HasValue ? row.zoom.Value : 0,
         country = row.country,
         orgid = row.id
     });
 }
Ejemplo n.º 6
0
 public static Organisation ToModel(this organisation org)
 {
     return(new Organisation()
     {
         address = org.address,
         city = org.city.HasValue?org.MASTERcity.name:"",
         companyName = org.name,
         coPhone = org.phone,
         country = org.country,
         fax = org.fax,
         id = org.id.ToString(),
         postcode = org.postcode,
         state = org.state
     });
 }
Ejemplo n.º 7
0
        public ActionResult View(long?id)
        {
            var order = repository.GetOrder(subdomainid.Value, id.Value);

            organisation sender          = order.user1.organisation1;
            var          receiverAddress = order.receiverAddress;

            if (order.receiverUserid.HasValue)
            {
                receiverAddress = order.user.organisation1.ToFullOrganisationAddress();
            }

            // log activity
            // only log this if viewed by the receiver
            if (order.receiverUserid.HasValue &&
                sessionid.Value == order.receiverUserid.Value &&
                order.status == OrderStatus.SENT.ToString())
            {
                repository.AddActivity(order.owner,
                                       new ActivityMessage(order.id, order.owner,
                                                           ActivityMessageType.ORDER_VIEWED,
                                                           new HtmlLink(order.orderNumber.ToString("D8"), order.id).ToTransactionString(TransactionType.ORDER),
                                                           new HtmlLink(order.user.ToEmailName(true), order.receiverUserid.Value).ToContactString()), sender.subdomain);
                repository.UpdateOrderStatus(order.id, TransactionType.ORDER, null, sessionid.Value, OrderStatus.VIEWED);
            }

            var primaryView = new OrderView(order, sender, receiverAddress, sessionid.Value, TransactionType.ORDER);

            primaryView.SetStatusRibbon(!primaryView.order.isOwner);
            primaryView.SetButtonsToShow(TransactionType.ORDER, !primaryView.order.isOwner);
            primaryView.comments = order.ToTransaction().comments.OrderByDescending(x => x.created).ToModel(true);

            if (Request.HttpMethod == "POST")
            {
                return(View("orderView", primaryView));
            }

            var printView = new PrintView(baseviewmodel)
            {
                transactionID = order.ToTransaction().id,
                primaryView   = primaryView
            };

            return(View("PrintView", printView));
        }
Ejemplo n.º 8
0
        public ActionResult View(long?id)
        {
            var invoice = repository.GetOrder(subdomainid.Value, id.Value);

            organisation sender          = invoice.user1.organisation1;
            var          receiverAddress = invoice.receiverAddress;

            if (invoice.receiverUserid.HasValue)
            {
                receiverAddress = invoice.user.organisation1.ToFullOrganisationAddress();
            }

            // log activity
            if (invoice.receiverUserid.HasValue &&
                sessionid.Value == invoice.receiverUserid.Value &&
                invoice.status == OrderStatus.SENT.ToString())
            {
                // update status
                repository.AddActivity(invoice.owner,
                                       new ActivityMessage(invoice.id, invoice.owner,
                                                           ActivityMessageType.INVOICE_VIEWED,
                                                           new HtmlLink(invoice.orderNumber.ToString("D8"), invoice.id).ToTransactionString(TransactionType.INVOICE),
                                                           new HtmlLink(invoice.user.ToEmailName(true), invoice.receiverUserid.Value).ToContactString()), sender.subdomain);
                repository.UpdateOrderStatus(id.Value, TransactionType.INVOICE, null, sessionid.Value, OrderStatus.VIEWED);
            }

            var primaryView = new OrderView(invoice, sender, receiverAddress, sessionid.Value, TransactionType.INVOICE);

            primaryView.SetStatusRibbon(!primaryView.order.isOwner);
            primaryView.SetButtonsToShow(TransactionType.INVOICE, !primaryView.order.isOwner);
            primaryView.comments = invoice.ToTransaction().comments.OrderByDescending(x => x.created).ToModel(true);

            if (Request.HttpMethod == "POST")
            {
                return(View("invoiceView", primaryView));
            }

            var printView = new PrintView(baseviewmodel)
            {
                transactionID = invoice.ToTransaction().id,
                primaryView   = primaryView
            };

            return(View("PrintView", printView));
        }
Ejemplo n.º 9
0
        public static OpenGraph ToOpenGraph(this organisation org, product p, article a)
        {
            var graph = new OpenGraph
            {
                fbid        = org.users.First().FBID,
                sitename    = org.MASTERsubdomain.storeName,
                description = org.motd,
                address     = org.address,
                countryname = org.country.HasValue ? Country.GetCountry(org.country.Value).name : "",
                email       = "",
                fax         = org.fax,
                latitude    = org.latitude.HasValue ? org.latitude.ToString() : "",
                longtitude  = org.longtitude.HasValue ? org.longtitude.ToString() : "",
                locality    = org.city.HasValue ? org.MASTERcity.name : "",
                region      = "",
                postcode    = org.postcode,
                phone       = org.phone,
            };

            if (p != null)
            {
                graph.type  = "product";
                graph.title = p.title;
                graph.url   = org.MASTERsubdomain.ToHostName().ToDomainUrl(p.ToLiquidProductUrl());
                graph.image = p.thumb.HasValue
                                  ? org.MASTERsubdomain.ToHostName().ToDomainUrl(Img.by_size(p.product_image.url,
                                                                                             Imgsize.SMALL))
                                  : org.MASTERsubdomain.ToHostName().ToDomainUrl(GeneralConstants.PHOTO_NO_THUMBNAIL);
            }
            else if (a != null)
            {
                graph.type  = "article";
                graph.title = a.title;
                graph.url   = org.MASTERsubdomain.ToHostName().ToDomainUrl(a.ToLiquidUrl());
            }
            else
            {
                graph.type  = "company";
                graph.title = org.MASTERsubdomain.storeName;
                graph.url   = org.MASTERsubdomain.ToHostName().ToDomainUrl();
            }

            return(graph);
        }
Ejemplo n.º 10
0
        public static string ToFullOrganisationAddress(this organisation org)
        {
            var sb = new StringBuilder();

            sb.Append("<ul><li>");
            sb.Append(org.name);
            sb.Append("</li>");

            sb.Append(org.ToOrganisationAddress(false));

            if (!string.IsNullOrEmpty(org.phone))
            {
                sb.Append("<li>");
                sb.Append(org.phone);
                sb.Append("</li>");
            }

            return(sb.ToString());
        }
Ejemplo n.º 11
0
        public ActionResult Import(ContactBasic[] contacts)
        {
            foreach (var contact in contacts)
            {
                // check if email already added
                var emailExist = repository.IsEmailInUse(contact.email, subdomainid.Value);
                if (emailExist)
                {
                    continue;
                }

                organisation o = new organisation
                {
                    subdomain = subdomainid.Value,
                    address   = contact.address,
                    name      = contact.email
                };
                long addedOrgId = repository.AddOrganisation(o);

                // add user
                var u = new user
                {
                    created      = DateTime.UtcNow,
                    role         = (int)UserRole.USER,
                    email        = contact.email,
                    firstName    = contact.firstName,
                    lastName     = contact.lastName,
                    phoneNumber  = contact.phone,
                    organisation = addedOrgId,
                    viewid       = Crypto.Utility.GetRandomString(),
                    permissions  = (int)UserPermission.USER
                };

                repository.AddUser(u);

                // update total contacts count
                repository.UpdateCounters(subdomainid.Value, 1, CounterType.CONTACTS_PRIVATE);
            }
            repository.Save();

            return(Json("".ToJsonOKMessage()));
        }
Ejemplo n.º 12
0
        public ActionResult Index()
        {
            // return front page
            if (!subdomainid.HasValue)
            {
                return(View());
            }

            // this point onward we have a subdomainid
            organisation org = MASTERdomain.organisation;

            // subdomain does not exist
            if (org == null)
            {
                return(Redirect(GeneralConstants.HTTP_HOST));
            }

            // check if account has been setup properly
            if (role.HasFlag(UserRole.CREATOR) && !MASTERdomain.currency.HasValue)
            {
                return(RedirectToAction("setup", "register", new { Area = "" }));
            }

            // do we return store view which is on an unsecure connection
            if (IsStoreEnabled || sessionid.HasValue)
            {
                var template = CreateLiquidTemplate("index", "Welcome");
                template.InitContentTemplate("templates/index.liquid");

                return(Content(template.Render()));
            }

            if (sessionid == null)
            {
                return(RedirectToAction("Index", "login"));
            }

            // this is actually unreachable
            // user is logged in
            return(RedirectToAction("Index", "dashboard", new { Area = "dashboard" }));
        }
Ejemplo n.º 13
0
        public void ImportFacebookContacts()
        {
            var query =
                string.Format(
                    "SELECT uid, first_name, last_name, current_location, pic_big, profile_url, proxied_email, sex FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = {0})",
                    api.Application.Session.UserId);

            var rows = api.Fql.Query <users_getInfo_response>(query);

            foreach (var row in rows.user)
            {
                try
                {
                    var usr = repository.GetUserByFBID(row.uid.Value.ToString(), subdomainid);
                    if (usr != null)
                    {
                        continue;
                    }

                    var firstname = row.first_name;
                    var lastname  = row.last_name;

                    if (string.IsNullOrEmpty(firstname) && string.IsNullOrEmpty(lastname))
                    {
                        continue;
                    }

                    var org = new organisation
                    {
                        subdomain = subdomainid,
                        name      = string.Format("{0} {1}", firstname, lastname)
                    };

                    var friend = new user()
                    {
                        role                 = UserRole.USER.ToInt(),
                        email                = "",
                        proxiedEmail         = row.proxied_email,
                        firstName            = firstname,
                        lastName             = lastname,
                        gender               = row.sex,
                        organisation         = repository.AddOrganisation(org),
                        externalProfilePhoto = row.pic_big,
                        externalProfileUrl   = row.profile_url,
                        FBID                 = row.uid.Value.ToString(),
                        viewid               = Crypto.Utility.GetRandomString(),
                        permissions          = (int)UserPermission.USER
                    };

                    repository.UpdateCounters(subdomainid, 1, CounterType.CONTACTS_PRIVATE);

                    repository.AddUser(friend);

                    friend.externalProfilePhoto.ReadAndSaveFromUrl(subdomainid, friend.id, friend.id, PhotoType.PROFILE);
                }
                catch (Exception ex)
                {
                    Syslog.Write(ex);
                }
            }

            // mail user
            var owner = repository.GetUserById(ownerid, subdomainid);
            var msg   = new message.Message(owner, null, subdomainid);

            msg.SendMessage(null, repository, EmailViewType.GENERIC,
                            "Your Facebook contacts have been successfully imported", "Import Contacts");
        }
Ejemplo n.º 14
0
 public AddressHandler(organisation o, ITradelrRepository repository)
 {
     this.repository = repository;
     target_org      = o;
 }
Ejemplo n.º 15
0
        public ActionResult Create(long?profilePhotoID, string password, string organisationPhotoID, string address, string city,
                                   long?citySelected, string coPhone, int permissions,
                                   string companyName, string contactList, int?country, string email, string fax, string firstName,
                                   string gender, string lastName, string notes, string phone, string postcode, string title, long?existingOrg,
                                   string states_canadian, string states_other, string states_us, bool sendemail)
        {
            // add organisation even if fields are empty
            if (!string.IsNullOrEmpty(email))
            {
                // check if email already added
                var emailExist = repository.IsEmailInUse(email, subdomainid.Value);
                if (emailExist)
                {
                    return(Json("Email has already been added".ToJsonFail()));
                }
            }

            organisation o;
            long         addedOrgID;

            if (!existingOrg.HasValue)
            {
                o = new organisation
                {
                    subdomain = subdomainid.Value,
                    address   = address.Trim(),
                    phone     = coPhone,
                    name      = companyName,
                    fax       = fax,
                    postcode  = postcode
                };
                if (!string.IsNullOrEmpty(organisationPhotoID))
                {
                    o.logo = long.Parse(organisationPhotoID);
                }

                if (citySelected.HasValue)
                {
                    o.city = citySelected.Value;
                }
                else if (!string.IsNullOrEmpty(city))
                {
                    o.city = repository.AddCity(city).id;
                }

                if (country != null)
                {
                    o.country = country;
                    o.state   = AddressHandler.GetState(country, states_us,
                                                        states_canadian, states_other);
                }

                addedOrgID = repository.AddOrganisation(o);

                // update shipping and billing addresses
                var addressHandler = new AddressHandler(o, repository);
                addressHandler.CopyShippingAndBillingAddressFromOrgAddress("", "");
            }
            else
            {
                o = repository.GetOrganisation(existingOrg.Value, subdomainid.Value);
                if (o == null)
                {
                    return(SendJsonErrorResponse("Company is invalid"));
                }
                addedOrgID = o.id;
            }

            // add user
            var u = new user
            {
                created      = DateTime.UtcNow,
                role         = (int)UserRole.USER,
                email        = email,
                passwordHash = Crypto.Utility.ComputePasswordHash(email + password),
                firstName    = firstName,
                gender       = gender,
                lastName     = lastName,
                notes        = notes,
                phoneNumber  = phone,
                title        = title,
                organisation = addedOrgID,
                viewid       = Crypto.Utility.GetRandomString()
            };

            // only allow user to create user with permissions equal to or less than themselves
            var currentuser       = repository.GetUserById(sessionid.Value, subdomainid.Value);
            var allowedPermission = currentuser.permissions & permissions;

            u.permissions = allowedPermission;

            try
            {
                if (profilePhotoID.HasValue)
                {
                    u.profilePhoto = profilePhotoID.Value;
                }

                repository.AddUser(u);


                // need to update entry in images table too since contextid will be the site creator's
                if (profilePhotoID.HasValue)
                {
                    var dbImage = repository.GetImage(profilePhotoID.Value);
                    if (dbImage != null)
                    {
                        dbImage.contextID = u.id;
                    }
                }

                // log activity
                repository.AddActivity(sessionid.Value,
                                       new ActivityMessage(u.id, sessionid,
                                                           ActivityMessageType.CONTACT_NEW,
                                                           new HtmlLink(u.ToEmailName(true), u.id).ToContactString()), subdomainid.Value);

                // update total contacts count
                repository.UpdateCounters(subdomainid.Value, 1, CounterType.CONTACTS_PRIVATE);

                // add contact list filter
                if (!string.IsNullOrEmpty(contactList))
                {
                    var cf = new contactGroupMember()
                    {
                        groupid = long.Parse(contactList),
                        userid  = u.id
                    };
                    repository.AddContactGroupMember(cf);
                }

                // email contact that was just added
                if (!string.IsNullOrEmpty(email) && sendemail)
                {
                    var me        = repository.GetUserById(sessionid.Value, subdomainid.Value);
                    var viewmodel = new ContactNewViewModel
                    {
                        creatorEmail = me.email,
                        creatorName  = me.ToEmailName(true),
                        hostName     = accountHostname,
                        email        = email,
                        password     = password,
                        note         = notes,
                        profile      = u.ToProfileUrl()
                    };

                    // link to view profile
                    this.SendEmail(EmailViewType.CONTACT_NEWENTRY, viewmodel, "New Profile created", u.GetEmailAddress(), u.ToFullName(), u);
                }
            }
            catch (Exception ex)
            {
                return(SendJsonErrorResponse(ex));
            }
            // return contact ID & org ID
            return(Json(new { uid = u.id, oid = addedOrgID }.ToJsonOKData()));
        }
Ejemplo n.º 16
0
        public JsonData CreateAccountWithLoginPassword()
        {
            // check fields are not empty
            if (string.IsNullOrEmpty(email) ||
                string.IsNullOrEmpty(passwordConfirm) ||
                string.IsNullOrEmpty(password) ||
                string.IsNullOrEmpty(loginPage))
            {
                return("Some fields are missing".ToJsonFail());
            }

            // verify subdomain is available
            loginPage = loginPage.Trim().ToLower();

            // BUG need to mark subdomain as not available in case of race condition
            if (!repository.IsDomainAvailable(loginPage))
            {
                return("The selected site name is not available. Please choose another name.".ToJsonFail());
            }

            // check passwords
            if (string.Compare(password, passwordConfirm) != 0)
            {
                return("Passwords do not match".ToJsonFail());
            }

            // verify that email has not been used to register another account
            if (repository.GetUsersByEmail(email).SingleOrDefault(x => (x.role & (int)UserRole.CREATOR) != 0) != null)
            {
                Syslog.Write("Email address in use: " + email);
                return("Email address is currently in use".ToJsonFail());
            }

            // check affiliate ID
            if (!string.IsNullOrEmpty(affiliate))
            {
                var referrer = repository.GetSubDomains().SingleOrDefault(x => x.affiliateID == affiliate);
                if (referrer == null)
                {
                    Syslog.Write("Invalid Affiliate ID: " + affiliate);
                    return("Invalid Affiliate ID".ToJsonFail());
                }
                mastersubdomain.affiliateReferrer = referrer.id;
            }

            usr = new user
            {
                role        = (int)UserRole.TENTATIVE,
                viewid      = Utility.GetRandomString(),
                permissions = (int)UserPermission.ADMIN,
                email       = email,
                firstName   = "",
                lastName    = ""
            };

            repository.AddMasterSubdomain(mastersubdomain);
            // hash is created later

            // create organisation first
            var org = new organisation
            {
                subdomain = mastersubdomain.id,
                name      = ""
            };

            usr.organisation = repository.AddOrganisation(org);
            org.users.Add(usr);
            mastersubdomain.organisation = org;
            CreateDataStructures();

            return(mastersubdomain.ToHostName().ToDomainUrl("/login").ToJsonOKData());
        }
Ejemplo n.º 17
0
        public ActionResult demo_create()
        {
            var account = new Account(repository, "*****@*****.**", "1234%^&*", "1234%^&*", "demo", AccountPlanType.ULTIMATE, "");
            var status  = account.CreateAccountWithLoginPassword();

            if (!status.success)
            {
                return(Json(status));
            }

            // add currency and timezoneinfo
            var sd = repository.GetSubDomains().Single(x => x.name == "demo");

            sd.organisation.name = "Demo Company";
            sd.currency          = 432; // USD
            sd.flags            |= (int)SubdomainFlags.STORE_ENABLED;

            var creator = sd.organisation.users.First();

            creator.timezone = "Eastern Standard Time";
            creator.role     = (int)UserRole.ADMIN;

            repository.Save("demo_create");

            // add test org
            var o = new organisation
            {
                subdomain = sd.id,
                address   = "12 Demo Road",
                phone     = "012 345678",
                name      = "Acme & Co.",
                fax       = "87 654321",
                postcode  = "12345",
            };
            var addedOrgID = repository.AddOrganisation(o);

            // add user
            var u = new user
            {
                created      = DateTime.UtcNow,
                email        = "*****@*****.**",
                passwordHash = Utility.ComputePasswordHash("*****@*****.**"),
                firstName    = "demo",
                lastName     = "account",
                organisation = addedOrgID,
                viewid       = Utility.GetRandomString(),
                permissions  = (int)(UserPermission.NETWORK_STORE |
                                     UserPermission.INVENTORY_ADD |
                                     UserPermission.INVENTORY_MODIFY |
                                     UserPermission.INVENTORY_VIEW |
                                     UserPermission.INVOICES_ADD |
                                     UserPermission.TRANSACTION_MODIFY |
                                     UserPermission.TRANSACTION_VIEW |
                                     UserPermission.ORDERS_ADD |
                                     UserPermission.CONTACTS_ADD |
                                     UserPermission.CONTACTS_MODIFY |
                                     UserPermission.CONTACTS_VIEW),
                role = (int)UserRole.USER
            };

#if !DEBUG
            // not created when debugging because we want to test product import

            u.timezone = "Eastern Standard Time";
#else
            u.permissions |= (int)UserPermission.NETWORK_SETTINGS;
#endif

            repository.AddUser(u);

            // log activity
            repository.AddActivity(u.id,
                                   new ActivityMessage(u.id, u.id,
                                                       ActivityMessageType.CONTACT_NEW,
                                                       new HtmlLink(u.ToEmailName(true), u.id).ToContactString()), sd.id);

            // update total contacts count
            repository.UpdateCounters(sd.id, 1, CounterType.CONTACTS_PRIVATE);

            // import demo products
            List <ProductInfo> productsList;
            using (var fs =
                       new FileStream(
                           GeneralConstants.APP_ROOT_DIR + "/Content/templates/demo/demo_products.xls",
                           FileMode.Open, FileAccess.Read))
            {
                var importer = new ProductImport();
                productsList = importer.Import(fs, u.id, sd.id);
            }
            repository.AddProducts(productsList, sd.id);

            return(Json("Demo account created".ToJsonOKMessage()));
        }
Ejemplo n.º 18
0
        public ActionResult Index()
        {
            var errors = new FormErrors();

            foreach (string entry in Request.Form.Keys)
            {
                var value = Request.Form[entry];

                if (string.IsNullOrEmpty(value))
                {
                    errors.messages[entry] = "Value is missing";
                    errors.Add(entry);
                }
            }

            var form = new Form();

            if (errors.Count != 0)
            {
                form.posted_successfully = false;
                form.errors = errors;
            }
            else
            {
                form.posted_successfully = true;
            }

            TempData["form"] = form;

            var storeOwner = MASTERdomain.organisation.users.First();
            var formType   = Request.Form["form_type"];
            var email      = Request.Form["email"];

            if (!string.IsNullOrEmpty(formType) &&
                formType == "customer")
            {
                // add contact to contact list
                // check if email exists
                var usr = repository.GetUsersByEmail(email, subdomainid.Value).SingleOrDefault();
                if (usr == null)
                {
                    // create org
                    var org = new organisation
                    {
                        name      = email,
                        subdomain = subdomainid.Value
                    };

                    var orgid = repository.AddOrganisation(org);

                    // create user
                    usr = new user
                    {
                        role         = (int)UserRole.USER,
                        email        = email,
                        viewid       = Crypto.Utility.GetRandomString(),
                        permissions  = (int)UserPermission.USER,
                        organisation = orgid
                    };
                    repository.AddUser(usr);
                }

                // add to contact group
                if (!string.IsNullOrEmpty(Request.Form["group"]))
                {
                    var group = MASTERdomain.contactGroups.Where(x => x.title == Request.Form["group"]).SingleOrDefault();
                    if (group == null)
                    {
                        group = new contactGroup()
                        {
                            title = Request.Form["group"]
                        };
                        MASTERdomain.contactGroups.Add(group);
                    }

                    if (group.contactGroupMembers.AsQueryable().Where(x => x.userid == usr.id).SingleOrDefault() == null)
                    {
                        group.contactGroupMembers.Add(new contactGroupMember
                        {
                            userid = usr.id
                        });
                    }
                }
                repository.Save();
            }
            else
            {
                //  send notification email to store owner
                var viewdata = new NewMessage
                {
                    name    = Request.Form["name"],
                    email   = email,
                    message = Request.Form["body"].ToHtmlBreak()
                };

                this.SendEmail(EmailViewType.STORE_NEWMESSAGE, viewdata, "New Store Message", storeOwner.GetEmailAddress(), storeOwner.ToFullName(), null);
            }

            return(Redirect(Request.UrlReferrer.ToString()));
        }
Ejemplo n.º 19
0
        public ActionResult NewAccount(string code, string id, string identifier, PageType pagetype)
        {
            var client = new OAuthFacebook(GeneralConstants.FACEBOOK_API_KEY, GeneralConstants.FACEBOOK_API_SECRET,
                                           HttpUtility.UrlEncode(
                                               string.Format(
                                                   "{0}/newaccount/{1}?identifier={2}&pagetype={3}",
                                                   GeneralConstants.FACEBOOK_APP_URL, id, identifier, pagetype)),
                                           "read_stream,email,publish_stream,offline_access,manage_pages");

            // starting our authorisation process
            if (string.IsNullOrEmpty(code))
            {
                return(RedirectToAction("Redirect", new{ url = client.AuthorizationLinkGet() }));
            }

            if (!client.AccessTokenGet(code))
            {
                return(View("Error", new FacebookViewData {
                    errorMessage = "Unable to obtain permission", pageUrl = pagetype.ToReturnUrl(identifier)
                }));
            }

            // check subdomain is valid
            id = id.ToLower();

            // also check special domain list
            if (GeneralConstants.SUBDOMAIN_RESTRICTED.Contains(id))
            {
                return(View("Error", new FacebookViewData {
                    errorMessage = "Store address is not available", pageUrl = pagetype.ToReturnUrl(identifier)
                }));
            }

            var mastersubdomain = repository.GetSubDomains().Where(x => x.name == id).SingleOrDefault();

            if (mastersubdomain != null)
            {
                return(View("Error", new FacebookViewData {
                    errorMessage = "Store address is not available", pageUrl = pagetype.ToReturnUrl(identifier)
                }));
            }

            var facebook = new FacebookService(client.token);
            var fb_usr   = facebook.People.GetUser("me");

            if (fb_usr == null)
            {
                return(View("Error", new FacebookViewData {
                    errorMessage = "Unable to create account", pageUrl = pagetype.ToReturnUrl(identifier)
                }));
            }

            // verify that email has not been used to register another account
            if (repository.GetUserByEmail(fb_usr.email).Where(x => (x.role & (int)UserRole.CREATOR) != 0).SingleOrDefault() != null)
            {
                Syslog.Write(ErrorLevel.INFORMATION, "Facebook email address in use: " + fb_usr.email);
                return(View("Error", new FacebookViewData {
                    errorMessage = "Email address is already registered", pageUrl = pagetype.ToReturnUrl(identifier)
                }));
            }

            var usr = new user
            {
                role                 = (int)UserRole.ADMIN,
                viewid               = Crypto.Utility.GetRandomString(),
                permissions          = (int)UserPermission.ADMIN,
                FBID                 = fb_usr.id,
                email                = fb_usr.email ?? "",
                externalProfileUrl   = fb_usr.link,
                firstName            = fb_usr.first_name,
                lastName             = fb_usr.last_name,
                gender               = fb_usr.gender,
                externalProfilePhoto = string.Format("https://graph.facebook.com/{0}/picture?type=large", fb_usr.id)
            };

            // create subdomain entry
            mastersubdomain = new MASTERsubdomain
            {
                flags                   = 0,
                name                    = id,
                total_outofstock        = 0,
                total_contacts_public   = 0,
                total_contacts_private  = 0,
                total_contacts_staff    = 0,
                total_invoices_sent     = 0,
                total_invoices_received = 0,
                total_orders_sent       = 0,
                total_orders_received   = 0,
                total_products_mine     = 0,
                accountType             = AccountPlanType.ULTIMATE.ToString()
            };

            repository.AddMasterSubdomain(mastersubdomain);

            // create organisation first
            var org = new organisation
            {
                subdomain = mastersubdomain.id,
                name      = fb_usr.name
            };

            repository.AddOrganisation(org);
            usr.organisation = org.id;

            // CREATE DEFAULT STRUCTURES
            // add default inventory location
            var loc = new inventoryLocation
            {
                name       = GeneralConstants.INVENTORY_LOCATION_DEFAULT,
                subdomain  = mastersubdomain.id,
                lastUpdate = DateTime.UtcNow
            };

            repository.AddInventoryLocation(loc, mastersubdomain.id);

            // add default shipping profile
            var shippingProfile = new shippingProfile()
            {
                title       = "Default",
                type        = ShippingProfileType.FLATRATE.ToString(),
                subdomainid = mastersubdomain.id
            };

            repository.AddShippingProfile(shippingProfile);

            // update subdomain entry
            mastersubdomain.creator = org.id;

            // create facebookpage to link to subdomain
            var newEntry = new facebookPage {
                subdomainid = mastersubdomain.id, pageid = identifier
            };

            repository.AddFacebookPage(newEntry);


            try
            {
                // if user exist then we still need to verify email
                Random rnd = RandomNumberGenerator.Instance;
                usr.confirmationCode = rnd.Next();
                repository.AddUser(usr);

                // generate photo
                new Thread(() => usr.externalProfilePhoto.ReadAndSaveFromUrl(mastersubdomain.id, usr.id, usr.id, PhotoType.PROFILE)).Start();

                // add access token
                var oauthdb = new oauth_token
                {
                    token_key    = client.token,
                    token_secret = "",
                    type         = OAuthTokenType.FACEBOOK.ToString(),
                    subdomainid  = mastersubdomain.id,
                    appid        = usr.id.ToString(),
                    authorised   = true
                };
                repository.AddOAuthToken(oauthdb);

                // obtain any other account tokens
                var accounts = facebook.Account.GetAccountTokens("me");
                if (accounts != null && accounts.data != null)
                {
                    foreach (var account in accounts.data)
                    {
                        if (account.name != null)
                        {
                            var ftoken = new facebook_token
                            {
                                pageid      = account.id,
                                subdomainid = mastersubdomain.id,
                                accesstoken = account.access_token,
                                name        = account.name
                            };
                            repository.AddUpdateFacebookToken(ftoken);
                        }
                    }
                }
                repository.Save();

                // send confirmation email
                var viewdata = new ViewDataDictionary()
                {
                    { "host", id.ToSubdomainUrl() },
                    { "confirmCode", usr.confirmationCode },
                    { "email", usr.email }
                };
                EmailHelper.SendEmailNow(EmailViewType.ACCOUNT_CONFIRMATION, viewdata, "New Account Details and Email Verification Link",
                                         usr.email, usr.ToFullName(), usr.id);
            }
            catch (Exception ex)
            {
                Syslog.Write(ex);
                return(View("Error", new FacebookViewData {
                    errorMessage = "Unable to create account", pageUrl = pagetype.ToReturnUrl(identifier)
                }));
            }

            return(RedirectToAction("Redirect", new { url = pagetype.ToReturnUrl(identifier) }));
        }
Ejemplo n.º 20
0
        public static IEnumerable <ShippingRule> ToShippingMethods(this List <CheckoutItem> checkoutItems,
                                                                   MASTERsubdomain sender, organisation receiver, shippingProfile[] shippingProfiles)
        {
            IEnumerable <ShippingRule> shippingMethods = Enumerable.Empty <ShippingRule>();

            if (shippingProfiles.Count() != 0 &&
                receiver.address1 != null &&
                receiver.address1.country.HasValue)
            {
                // try get shipping rates)
                var shippingAddress = receiver.address1;
                if (shippingProfiles.UseShipwire())
                {
                    var aes             = new AESCrypt();
                    var shipwireService = new ShipwireService(sender.shipwireEmail,
                                                              aes.Decrypt(sender.shipwirePassword, sender.id.ToString()));

                    var address =
                        new AddressInfo(string.Format("{0} {1}", shippingAddress.first_name, shippingAddress.last_name),
                                        shippingAddress.street_address,
                                        shippingAddress.city, shippingAddress.state,
                                        Country.GetCountry(shippingAddress.country.Value).name,
                                        shippingAddress.postcode, "", "");

                    var shipwireOrder = new Order(address);
                    foreach (var entry in checkoutItems)
                    {
                        var item = new Shipwire.order.OrderItem
                        {
                            Sku      = entry.SKU,
                            Quantity = entry.quantity
                        };
                        shipwireOrder.AddItem(item);
                    }

                    shipwireService.CreateRateRequest(shipwireOrder);

                    var rateResponse = shipwireService.SubmitRateRequest();
                    shippingMethods = rateResponse.ToModel(sender.organisation.MASTERsubdomain.currency.ToCurrency());
                }
                else
                {
                    shippingRule[] rules     = null;
                    var            statename = shippingAddress.state;
                    var            countryid = shippingAddress.country.Value;
                    if (!string.IsNullOrEmpty(statename))
                    {
                        // try get state match
                        rules =
                            shippingProfiles.SelectMany(x => x.shippingRules).Where(
                                x => x.state == statename && x.country == countryid).ToArray();
                        // if none try get state-other match
                        if (rules.Count() == 0)
                        {
                            rules =
                                shippingProfiles.SelectMany(x => x.shippingRules).Where(
                                    x => x.state == "" && x.country == countryid).ToArray();
                        }
                    }

                    if (rules == null || rules.Count() == 0)
                    {
                        rules = shippingProfiles.SelectMany(x => x.shippingRules).Where(x => x.country == countryid).ToArray();
                        if (rules.Count() == 0)
                        {
                            rules = shippingProfiles.SelectMany(x => x.shippingRules).Where(x => !x.country.HasValue).ToArray();
                        }
                    }

                    // what type of rule
                    var rule = rules.FirstOrDefault();
                    if (rule != null)
                    {
                        var ruletype = (RuleType)rule.ruletype;
                        switch (ruletype)
                        {
                        case RuleType.PRICE:
                            decimal orderprice = 0;
                            foreach (var item in checkoutItems)
                            {
                                var sellingprice = item.UnitPrice;
                                orderprice += (sellingprice * item.quantity);
                            }
                            if (orderprice != 0)
                            {
                                var keys =
                                    rules.Where(x => x.matchvalue < orderprice).GroupBy(x => x.name).Select(
                                        y => y.Key);
                                var matchedrules = new List <ShippingRule>();
                                foreach (var key in keys)
                                {
                                    var result =
                                        rules.Where(x => x.matchvalue < orderprice && x.name == key).
                                        OrderByDescending(x => x.matchvalue).FirstOrDefault();
                                    if (result != null)
                                    {
                                        matchedrules.Add(result.ToModel());
                                    }
                                }
                                shippingMethods = matchedrules;
                            }
                            break;

                        case RuleType.WEIGHT:
                            decimal weight = 0;

                            // only calculate weight if all items have weight dimensions
                            var incompletecount = checkoutItems.Where(x => x.dimension == null ||
                                                                      x.dimension.weight == 0).Count();
                            if (incompletecount == 0)
                            {
                                foreach (var item in checkoutItems)
                                {
                                    Debug.Assert(item.dimension != null && item.quantity != 0);
                                    weight += (item.dimension.weight * item.quantity);
                                }
                                // only match if weight has been entered
                                if (weight != 0)
                                {
                                    var keys =
                                        rules.Where(x => x.matchvalue < weight).GroupBy(x => x.name).Select(
                                            y => y.Key);
                                    var matchedrules = new List <ShippingRule>();
                                    foreach (var key in keys)
                                    {
                                        var result =
                                            rules.Where(x => x.matchvalue < weight && x.name == key).OrderByDescending(
                                                x => x.matchvalue).FirstOrDefault();
                                        if (result != null)
                                        {
                                            matchedrules.Add(result.ToModel());
                                        }
                                    }
                                    shippingMethods = matchedrules;
                                }
                            }
                            break;

                        default:
                            throw new NotImplementedException();
                        }
                    }
                }
            }
            return(shippingMethods);
        }
Ejemplo n.º 21
0
 public static OrgColumn ToSyncModel(this organisation v, CFlag flag, long?offlineid = null)
 {
     return(new OrgColumn());
 }