This commit is contained in:
NikolayRechkin 2019-08-23 11:17:28 +03:00
commit d1de0e79c0
16 changed files with 423 additions and 312 deletions

View File

@ -328,7 +328,20 @@ namespace ASC.Api.Core
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
if (reader.ValueType != null)
{
if (reader.ValueType.Name == "String")
{
DateTime.TryParseExact(reader.Value?.ToString(), "o", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out var result);
return new ApiDateTime(result, TimeSpan.Zero);
}
else if (reader.ValueType.Name == "DateTime")
{
return new ApiDateTime((DateTime)reader.Value, TimeSpan.Zero);
}
}
return DateTime.MinValue;
}
public override bool CanConvert(Type objectType)

View File

@ -14,8 +14,7 @@ message NotifyItem {
}
message NotifyActionItem {
string ID = 1;
string Name = 2;
string ID = 1;
}
message Recipient {

View File

@ -529,7 +529,7 @@ namespace ASC.Notify.Engine
pattern = apProvider.GetPattern(request.NotifyAction, senderName);
}
request.Patterns[i] = pattern ?? throw new NotifyException(string.Format("For action \"{0}\" by sender \"{1}\" no one patterns getted.", request.NotifyAction.Name, senderName));
request.Patterns[i] = pattern ?? throw new NotifyException(string.Format("For action \"{0}\" by sender \"{1}\" no one patterns getted.", request.NotifyAction.ID, senderName));
}
}
}

View File

@ -49,12 +49,12 @@ namespace ASC.Notify.Model
public static implicit operator NotifyActionItem(NotifyAction cache)
{
return new NotifyActionItem() { ID = cache.ID, Name = cache.Name };
return new NotifyActionItem() { ID = cache.ID };
}
public static explicit operator NotifyAction(NotifyActionItem cache)
{
return new NotifyAction(cache.ID, cache.Name);
return new NotifyAction(cache.ID);
}
public override bool Equals(object obj)

View File

@ -152,7 +152,7 @@ const SectionFilterContent = ({
{ key: "user", group: "filter-type", label: "User" },
{ key: "guest", group: "filter-type", label: "Guest" },
{
key: "filter-group",
key: "filter-other",
group: "filter-other",
label: t("PeopleResource:LblOther"),
isHeader: true

View File

@ -4,8 +4,8 @@ import { connect } from 'react-redux';
import { getSelectedGroup, getSelectionIds } from '../../../../../store/people/selectors';
import { isAdmin } from '../../../../../store/auth/selectors';
import { withTranslation } from 'react-i18next';
import { updateUserStatus } from '../../../../../store/people/actions';
import { EmployeeStatus } from '../../../../../helpers/constants';
import { updateUserStatus, updateUserType } from '../../../../../store/people/actions';
import { EmployeeStatus, EmployeeType } from '../../../../../helpers/constants';
const contextOptions = () => {
return [
@ -38,7 +38,8 @@ const SectionHeaderContent = ({
isAdmin,
t,
selection,
updateUserStatus
updateUserStatus,
updateUserType
}) => {
const selectedUserIds = getSelectionIds(selection);
console.log("SectionHeaderContent render", selection, selectedUserIds);
@ -53,6 +54,16 @@ const SectionHeaderContent = ({
toastr.success("Set disabled action");
}, [selectedUserIds, updateUserStatus]);
const onSetEmployee = useCallback(() => {
updateUserType(EmployeeType.User, selectedUserIds);
toastr.success("Set user(s) as employees");
}, [selectedUserIds, updateUserType]);
const onSetGuest = useCallback(() => {
updateUserType(EmployeeType.Guest, selectedUserIds);
toastr.success("Set user(s) as guests");
}, [selectedUserIds, updateUserType]);
const menuItems = [
{
label: "Select",
@ -70,12 +81,12 @@ const SectionHeaderContent = ({
{
label: "Make employee",
disabled: !selection.length,
onClick: toastr.success.bind(this, "Make employee action")
onClick: onSetEmployee
},
{
label: "Make guest",
disabled: !selection.length,
onClick: toastr.success.bind(this, "Make guest action")
onClick: onSetGuest
},
{
label: "Set active",
@ -147,4 +158,4 @@ const SectionHeaderContent = ({
}
}
export default connect(mapStateToProps, { updateUserStatus })(withTranslation()(SectionHeaderContent));
export default connect(mapStateToProps, { updateUserStatus, updateUserType })(withTranslation()(SectionHeaderContent));

View File

@ -10,99 +10,86 @@ import {
Link
} from "asc-web-components";
import { connect } from "react-redux";
import styled from 'styled-components';
import {
getUserRole,
getUserContacts
} from "../../../../../store/people/selectors";
import { isAdmin, isMe } from "../../../../../store/auth/selectors";
const profileWrapper = {
display: "flex",
alignItems: "flex-start",
flexDirection: "row",
flexWrap: "wrap"
};
const ProfileWrapper = styled.div`
display: flex;
align-items: flex-start;
flex-direction: row;
flex-wrap: wrap;
`;
const avatarWrapper = {
marginRight: "32px",
marginBottom: "24px"
};
const AvatarWrapper = styled.div`
margin-right: 32px;
margin-bottom: 24px;
`;
const editButtonWrapper = {
marginTop: "16px",
width: "160px"
};
const EditButtonWrapper = styled.div`
margin-top: 16px;
width: 160px;
`;
const infoWrapper = {
display: "inline-flex",
marginBottom: "24px"
};
const ContactTextTruncate = styled.div`
padding: 0 8px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
`;
const textTruncate = {
padding: "0 8px",
whiteSpace: "nowrap",
overflow: "hidden",
textOverflow: "ellipsis"
};
const ToggleWrapper = styled.div`
width: 100%;
${props => props.isSelf && `margin-bottom: 24px;`}
${props => props.isContacts && `margin-top: 24px;`}
`;
const titlesWrapper = {
marginRight: "8px"
};
const ContactWrapper = styled.div`
display: inline-flex;
width: 300px;
`;
const restMargins = {
marginBottom: "0",
marginBlockStart: "5px",
marginBlockEnd: "0px"
};
const InfoContainer = styled.div`
margin-bottom: 24px;
`;
const notesWrapper = {
display: "block",
marginTop: "24px",
width: "100%"
};
const InfoItem = styled.div`
font-family: Open Sans;
font-style: normal;
font-weight: normal;
font-size: 13px;
line-height: 24px;
display: flex;
width: 400px;
`;
/*
const marginTop24 = {
marginTop: "24px"
};
const InfoItemLabel = styled.div`
width: 120px;
white-space: nowrap;
color: #A3A9AE;
`;
const marginTop22 = {
marginTop: "22px"
};
const InfoItemValue = styled.div`
width: 220px;
`;
const marginTop10 = {
marginTop: "10px"
};
const IconButtonWrapper = styled.div`
${props => props.isBefore
? `margin-right: 8px;`
: `margin-left: 8px;`
}
const marginLeft18 = {
marginLeft: "18px"
};
*/
display: inline-flex;
const selfToggleWrapper = {
width: "100%",
marginBottom: "24px"
};
const contactsToggleWrapper = {
width: "100%",
marginTop: "24px"
};
const notesToggleWrapper = {
width: "100%"
};
const contactWrapper = {
display: "inline-flex",
width: "300px"
};
const getFormattedDate = date => {
if (!date) return;
let d = date.slice(0, 10).split("-");
return d[1] + "." + d[2] + "." + d[0];
};
:hover {
& > div > svg > path {
fill: #3B72A7;
}
}
`;
const getFormattedDepartments = departments => {
const splittedDepartments = departments.split(",");
@ -122,65 +109,195 @@ const getFormattedDepartments = departments => {
};
const capitalizeFirstLetter = string => {
if (!string) return;
return string.charAt(0).toUpperCase() + string.slice(1);
return string && string.charAt(0).toUpperCase() + string.slice(1);
};
const createContacts = contacts => {
return contacts.map((contact, index) => {
const styledContacts = contacts.map((contact, index) => {
return (
<div key={index} style={contactWrapper}>
<IconButton
color="#333333"
size={16}
iconName={contact.icon}
isFill={true}
/>
<div style={textTruncate}>{contact.value}</div>
</div>
<ContactWrapper key={index}>
<IconButton color="#333333" size={16} iconName={contact.icon} isFill={true} />
<ContactTextTruncate>{contact.value}</ContactTextTruncate>
</ContactWrapper>
);
});
return styledContacts;
};
const ProfileInfo = (props) => {
const { isVisitor, email, activationStatus, department, title, mobilePhone, sex, workFrom, birthday, location, cultureName, currentCulture } = props.profile;
const isAdmin = props.isAdmin;
const isSelf = props.isSelf;
const { t, i18n } = useTranslation();
const type = isVisitor ? "Guest" : "Employee";
const language = cultureName || currentCulture;
const workFromDate = new Date(workFrom).toLocaleDateString(language);
const birthDayDate = new Date(birthday).toLocaleDateString(language);
const formatedSex = capitalizeFirstLetter(sex);
const formatedDepartments = getFormattedDepartments(department);
const onEmailClick = useCallback(
() => window.open("mailto:" + email),
[email]
);
return (
<InfoContainer>
<InfoItem>
<InfoItemLabel>
{t('Resource:UserType')}:
</InfoItemLabel>
<InfoItemValue>
{type}
</InfoItemValue>
</InfoItem>
{email &&
<InfoItem>
<InfoItemLabel>
{t('Resource:Email')}:
</InfoItemLabel>
<InfoItemValue>
<Link
type="page"
fontSize={13}
isHovered={true}
title={email}
onClick={onEmailClick}
>
{activationStatus === 2 && (isAdmin || isSelf) &&
<IconButtonWrapper isBefore={true} title='Pending'>
<IconButton color='#C96C27' size={16} iconName='DangerIcon' isFill={true} />
</IconButtonWrapper>
}
{email}
{(isAdmin || isSelf) &&
<IconButtonWrapper title='Change e-mail' >
<IconButton color="#A3A9AE" size={16} iconName='AccessEditIcon' isFill={true} />
</IconButtonWrapper>
}
{activationStatus === 2 && (isAdmin || isSelf) &&
<IconButtonWrapper title='Send invitation once again'>
<IconButton color="#A3A9AE" size={16} iconName='FileActionsConvertIcon' isFill={true} />
</IconButtonWrapper>
}
</Link>
</InfoItemValue>
</InfoItem>
}
{department &&
<InfoItem>
<InfoItemLabel>
Department:
</InfoItemLabel>
<InfoItemValue>
{formatedDepartments}
</InfoItemValue>
</InfoItem>
}
{title &&
<InfoItem>
<InfoItemLabel>
Position:
</InfoItemLabel>
<InfoItemValue>
{title}
</InfoItemValue>
</InfoItem>
}
{(mobilePhone || isSelf) &&
<InfoItem>
<InfoItemLabel>
Phone:
</InfoItemLabel>
<InfoItemValue>
{mobilePhone}
{(isAdmin || isSelf) &&
<IconButtonWrapper title='Change phone' >
<IconButton color="#A3A9AE" size={16} iconName='AccessEditIcon' isFill={true} />
</IconButtonWrapper>
}
</InfoItemValue>
</InfoItem>
}
{sex &&
<InfoItem>
<InfoItemLabel>
{t('Resource:Sex')}:
</InfoItemLabel>
<InfoItemValue>
{formatedSex}
</InfoItemValue>
</InfoItem>
}
{workFrom &&
<InfoItem>
<InfoItemLabel>
Employed since:
</InfoItemLabel>
<InfoItemValue>
{workFromDate}
</InfoItemValue>
</InfoItem>
}
{birthday &&
<InfoItem>
<InfoItemLabel>
{t('Resource:Birthdate')}:
</InfoItemLabel>
<InfoItemValue>
{birthDayDate}
</InfoItemValue>
</InfoItem>
}
{location &&
<InfoItem>
<InfoItemLabel>
{t('Resource:Location')}:
</InfoItemLabel>
<InfoItemValue>
{location}
</InfoItemValue>
</InfoItem>
}
{isSelf &&
<InfoItem>
<InfoItemLabel>
{t('Resource:Language')}:
</InfoItemLabel>
<InfoItemValue>
{language}
</InfoItemValue>
</InfoItem>
}
</InfoContainer>
);
};
const SectionBodyContent = props => {
const { t, i18n } = useTranslation();
const { profile, history, settings, isAdmin, viewer } = props;
//console.log(props);
const contacts = profile.contacts && getUserContacts(profile.contacts);
const role = getUserRole(profile);
const workFrom = getFormattedDate(profile.workFrom);
const birthDay = getFormattedDate(profile.birthday);
const formatedSex = capitalizeFirstLetter(profile.sex);
const formatedDepartments = getFormattedDepartments(profile.department);
const socialContacts = contacts && createContacts(contacts.social);
const infoContacts = contacts && createContacts(contacts.contact);
const isSelf = isMe(viewer, profile.userName);
const onEmailClick = useCallback(
() => window.open("mailto:" + profile.email),
[profile.email]
);
const onEditSubscriptionsClick = useCallback(
() => console.log("Edit subscriptions onClick()"),
[]
);
/*
const onBecomeAffiliateClick = useCallback(
() => console.log('Become our Affiliate onClick()'),
[]
);
*/
const onEditProfileClick = useCallback(
() => history.push(`${settings.homepage}/edit/${profile.userName}`),
[history, settings.homepage, profile.userName]
);
return (
<div style={profileWrapper}>
<div style={avatarWrapper}>
<ProfileWrapper>
<AvatarWrapper>
<Avatar
size="max"
role={role}
@ -188,124 +305,19 @@ const SectionBodyContent = props => {
userName={profile.displayName}
/>
{(isAdmin || isSelf) && (
<Button
style={editButtonWrapper}
size="big"
label={t("Resource:EditUserDialogTitle")}
onClick={onEditProfileClick}
/>
<EditButtonWrapper>
<Button
size="big"
label={t("Resource:EditUserDialogTitle")}
onClick={onEditProfileClick}
/>
</EditButtonWrapper>
)}
</div>
<div style={infoWrapper}>
<div style={titlesWrapper}>
<Text.Body style={restMargins} color="#A3A9AE" title={t('Resource:UserType')}>
{t('Resource:UserType')}:
</Text.Body>
{profile.email && (
<Text.Body style={restMargins} color="#A3A9AE" title={t('Resource:Email')}>
{t('Resource:Email')}:
</Text.Body>
)}
{profile.department && (
<Text.Body style={restMargins} color="#A3A9AE" title="Department">
Department:
</Text.Body>
)}
{profile.title && (
<Text.Body style={restMargins} color="#A3A9AE" title="Position">
Position:
</Text.Body>
)}
{profile.mobilePhone && (
<Text.Body style={restMargins} color="#A3A9AE" title="Phone">
Phone:
</Text.Body>
)}
{profile.sex && (
<Text.Body style={restMargins} color="#A3A9AE" title={t('Resource:Sex')}>
{t('Resource:Sex')}:
</Text.Body>
)}
{profile.workFrom && (
<Text.Body
style={restMargins}
color="#A3A9AE"
title="Employed since"
>
Employed since:
</Text.Body>
)}
{profile.birthday && (
<Text.Body
style={restMargins}
color="#A3A9AE"
title={t('Resource:Birthdate')}
>
{t('Resource:Birthdate')}:
</Text.Body>
)}
{profile.location && (
<Text.Body style={restMargins} color="#A3A9AE" title={t('Resource:Location')}>
{t('Resource:Location')}:
</Text.Body>
)}
{isSelf && (
<Text.Body style={restMargins} color="#A3A9AE" title={t('Resource:Language')}>
{t('Resource:Language')}:
</Text.Body>
)}
{/*{isSelf && <Text.Body style={marginTop24} color='#A3A9AE' title='Affiliate status'>Affiliate status:</Text.Body>}*/}
</div>
<div>
<Text.Body style={restMargins}>
{profile.isVisitor ? "Guest" : "Employee"}
</Text.Body>
<Text.Body style={restMargins}>
<Link
type="page"
fontSize={13}
isHovered={true}
onClick={onEmailClick}
>
{profile.email}
</Link>
{profile.activationStatus === 2 && ` (${t("Resource:PendingTitle")})`}
</Text.Body>
<Text.Body as="div" style={restMargins}>{formatedDepartments}</Text.Body>
<Text.Body style={restMargins}>{profile.title}</Text.Body>
<Text.Body style={restMargins}>{profile.mobilePhone}</Text.Body>
<Text.Body style={restMargins}>{formatedSex}</Text.Body>
<Text.Body style={restMargins}>{workFrom}</Text.Body>
<Text.Body style={restMargins}>{birthDay}</Text.Body>
<Text.Body style={restMargins}>{profile.location}</Text.Body>
{isSelf && (
<Text.Body style={restMargins}>
{profile.cultureName || settings.currentCulture}
</Text.Body>
)}
{/*{isSelf && <Button style={marginTop22} size="base" label="Become our Affiliate" onClick={onBecomeAffiliateClick} />}*/}
</div>
</div>
{/*{isSelf &&
<div style={selfToggleWrapper}>
<ToggleContent label="Login settings" style={notesWrapper} isOpen={true}>
<Text.Body as="span">
Two-factor authentication via code generating application was enabled for all users by cloud service administrator.
<div style={marginTop10}>
<Link type="action" isBold={true} isHovered={true} fontSize={13} >{'Reset application'}</Link>
<Link style={marginLeft18} type="action" isBold={true} isHovered={true} fontSize={13} >{'Show backup codes'}</Link>
</div>
</Text.Body>
</ToggleContent>
</div>
}*/}
</AvatarWrapper>
<ProfileInfo profile={profile} isSelf={isSelf} isAdmin={isAdmin} />
{isSelf && (
<div style={selfToggleWrapper}>
<ToggleContent
label={t('Resource:Subscriptions')}
style={notesWrapper}
isOpen={true}
>
<ToggleWrapper isSelf={true} >
<ToggleContent label={t('Resource:Subscriptions')} isOpen={true} >
<Text.Body as="span">
<Button
size="big"
@ -315,38 +327,30 @@ const SectionBodyContent = props => {
/>
</Text.Body>
</ToggleContent>
</div>
</ToggleWrapper>
)}
{profile.notes && (
<div style={notesToggleWrapper}>
<ToggleContent label={t('Resource:Comments')} style={notesWrapper} isOpen={true}>
<ToggleWrapper>
<ToggleContent label={t('Resource:Comments')} isOpen={true} >
<Text.Body as="span">{profile.notes}</Text.Body>
</ToggleContent>
</div>
</ToggleWrapper>
)}
{profile.contacts && (
<div style={contactsToggleWrapper}>
<ToggleContent
label={t('Resource:ContactInformation')}
style={notesWrapper}
isOpen={true}
>
<ToggleWrapper isContacts={true} >
<ToggleContent label={t('Resource:ContactInformation')} isOpen={true} >
<Text.Body as="span">{infoContacts}</Text.Body>
</ToggleContent>
</div>
</ToggleWrapper>
)}
{profile.contacts && (
<div style={contactsToggleWrapper}>
<ToggleContent
label={t('Resource:SocialProfiles')}
style={notesWrapper}
isOpen={true}
>
<ToggleWrapper isContacts={true} >
<ToggleContent label={t('Resource:SocialProfiles')} isOpen={true} >
<Text.Body as="span">{socialContacts}</Text.Body>
</ToggleContent>
</div>
</ToggleWrapper>
)}
</div>
</ProfileWrapper>
);
};

View File

@ -18,4 +18,13 @@ export const EmployeeActivationStatus = Object.freeze({
export const EmployeeStatus = Object.freeze({
Active: 1,
Disabled: 2
});
});
/**
* Enum for employee status.
* @readonly
*/
export const EmployeeType = Object.freeze({
User: 1,
Guest: 2
});

View File

@ -47,9 +47,19 @@ export function setSelected(selected) {
}
export function selectGroup(groupId) {
return {
type: SELECT_GROUP,
groupId
return (dispatch, getState) => {
const { people } = getState();
const { filter } = people;
let newFilter = filter.clone();
newFilter.group = groupId;
fetchPeopleAsync(dispatch, newFilter);
return dispatch({
type: SELECT_GROUP,
groupId
});
};
}
@ -96,19 +106,32 @@ export async function fetchPeopleAsync(dispatch, filter = null) {
}
export function updateUserStatus(status, userIds) {
return (dispatch) => {
return api
.updateUserStatus(status, userIds)
.then(res => {
if (res && res.data && res.data.error && res.data.error.message)
throw res.data.error.message;
return dispatch => {
return api.updateUserStatus(status, userIds).then(res => {
if (res && res.data && res.data.error && res.data.error.message)
throw res.data.error.message;
const users = res.data.response;
const users = res.data.response;
users.forEach(user => {
dispatch(setUser(user));
});
users.forEach(user => {
dispatch(setUser(user));
});
});
};
}
export function updateUserType(type, userIds) {
return dispatch => {
return api.updateUserType(type, userIds).then(res => {
if (res && res.data && res.data.error && res.data.error.message)
throw res.data.error.message;
const users = res.data.response;
users.forEach(user => {
dispatch(setUser(user));
});
});
};
}

View File

@ -80,3 +80,9 @@ export function updateUserStatus(status, userIds) {
? fakeApi.updateUserStatus(status, userIds)
: axios.put(`${API_URL}/people/status/${status}`, { userIds });
}
export function updateUserType(type, userIds) {
return IS_FAKE
? fakeApi.updateUserType(type, userIds)
: axios.put(`${API_URL}/people/type/${type}`, { userIds });
}

View File

@ -312,3 +312,50 @@ export function updateUserStatus(status, userIds) {
}
]);
}
export function updateUserType(type, userIds) {
return fakeResponse([
{
id: userIds[0],
userName: "Mike.Zanyatski",
isVisitor: type === 1 ? false : true,
firstName: "Mike",
lastName: "Zanyatski",
email: "my@gmail.com",
birthday: "2019-08-19T01:39:25.3240031Z",
sex: "male",
status: 1,
activationStatus: 0,
terminated: "2019-08-19T01:39:25.3240031Z",
department: "Marketing",
workFrom: "2019-08-19T01:39:25.3240031Z",
location: "Palo Alto",
notes: "Notes to worker",
displayName: null,
title: "Manager",
contacts: [
{
type: "GTalk",
value: "my@gmail.com"
}
],
groups: [
{
id: "00000000-0000-0000-0000-000000000000",
name: "Group Name",
manager: "Jake.Zazhitski"
}
],
avatarMedium: "url to medium avatar",
avatar: "url to big avatar",
isAdmin: false,
isLDAP: false,
listAdminModules: ["projects", "crm"],
isOwner: false,
cultureName: "en-EN",
isSSO: false,
avatarSmall: "url to small avatar",
profileUrl: ""
}
]);
}

View File

@ -1,6 +1,6 @@
{
"name": "asc-web-components",
"version": "1.0.0",
"version": "1.0.5",
"description": "Ascensio System SIA component library",
"license": "AGPL-3.0",
"main": "dist/asc-web-components.cjs.js",
@ -15,8 +15,7 @@
"build": "rimraf dist && cross-env NODE_ENV=production rollup -c",
"start": "rimraf dist && cross-env NODE_ENV=development rollup -c -w",
"prepare": "npm run build",
"predeploy": "cd example && npm install && npm run build",
"deploy": "gh-pages -d example/build"
"bump": "yarn version --no-git-tag-version --patch && git add ./package.json && git commit -m \"web: components: bump version\""
},
"peerDependencies": {
"react": "16.x",

View File

@ -65,11 +65,11 @@ class GroupButtonsMenu extends React.PureComponent {
visible: true
}
this.throttledResize = _.throttle(this.updateMenu, 300);
this.throttledResize = throttle(this.updateMenu, 300);
}
isArrayEqual = (x, y) => {
return _(x).differenceWith(y, _.isEqual).isEmpty();
return isEmpty(differenceWith(x, y, isEqual));
};
closeMenu = (e) => {

View File

@ -51,7 +51,7 @@
<ItemGroup>
<EmbeddedResource Update="PublicResources\NamingPeopleResource.resx">
<Generator>ResXFileCodeGenerator</Generator>
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>NamingPeopleResource.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Update="PublicResources\NamingPeopleResource.ru.resx">

View File

@ -1133,7 +1133,7 @@ namespace ASC.Web.Studio.Core.Notify
if (action == null) continue;
log.InfoFormat(@"Send letter personal '{1}' to {0} culture {2}. tenant id: {3} user culture {4} create on {5} now date {6}",
user.Email, action.Name, culture, tenant.TenantId, user.GetCulture(), user.CreateDate, scheduleDate.Date);
user.Email, action.ID, culture, tenant.TenantId, user.GetCulture(), user.CreateDate, scheduleDate.Date);
sendCount++;

View File

@ -22,7 +22,7 @@ namespace ASC.Web.Core.PublicResources {
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class NamingPeopleResource {
public class NamingPeopleResource {
private static global::System.Resources.ResourceManager resourceMan;
@ -36,7 +36,7 @@ namespace ASC.Web.Core.PublicResources {
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
public static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ASC.Web.Core.PublicResources.NamingPeopleResource", typeof(NamingPeopleResource).Assembly);
@ -51,7 +51,7 @@ namespace ASC.Web.Core.PublicResources {
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
public static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
@ -63,7 +63,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Add Users.
/// </summary>
internal static string CommonAddUsers {
public static string CommonAddUsers {
get {
return ResourceManager.GetString("CommonAddUsers", resourceCulture);
}
@ -72,7 +72,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Group.
/// </summary>
internal static string CommonGroup {
public static string CommonGroup {
get {
return ResourceManager.GetString("CommonGroup", resourceCulture);
}
@ -81,7 +81,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Head.
/// </summary>
internal static string CommonGroupHead {
public static string CommonGroupHead {
get {
return ResourceManager.GetString("CommonGroupHead", resourceCulture);
}
@ -90,7 +90,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Groups.
/// </summary>
internal static string CommonGroups {
public static string CommonGroups {
get {
return ResourceManager.GetString("CommonGroups", resourceCulture);
}
@ -99,7 +99,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Guest.
/// </summary>
internal static string CommonGuest {
public static string CommonGuest {
get {
return ResourceManager.GetString("CommonGuest", resourceCulture);
}
@ -108,7 +108,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Guests.
/// </summary>
internal static string CommonGuests {
public static string CommonGuests {
get {
return ResourceManager.GetString("CommonGuests", resourceCulture);
}
@ -117,7 +117,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Registration Date.
/// </summary>
internal static string CommonRegDate {
public static string CommonRegDate {
get {
return ResourceManager.GetString("CommonRegDate", resourceCulture);
}
@ -126,7 +126,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Common.
/// </summary>
internal static string CommonSchemaName {
public static string CommonSchemaName {
get {
return ResourceManager.GetString("CommonSchemaName", resourceCulture);
}
@ -135,7 +135,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to User.
/// </summary>
internal static string CommonUser {
public static string CommonUser {
get {
return ResourceManager.GetString("CommonUser", resourceCulture);
}
@ -144,7 +144,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Users.
/// </summary>
internal static string CommonUsers {
public static string CommonUsers {
get {
return ResourceManager.GetString("CommonUsers", resourceCulture);
}
@ -153,7 +153,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Title.
/// </summary>
internal static string CommonUserTitle {
public static string CommonUserTitle {
get {
return ResourceManager.GetString("CommonUserTitle", resourceCulture);
}
@ -162,7 +162,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Add Employees.
/// </summary>
internal static string DefaultAddUsers {
public static string DefaultAddUsers {
get {
return ResourceManager.GetString("DefaultAddUsers", resourceCulture);
}
@ -171,7 +171,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Department.
/// </summary>
internal static string DefaultGroup {
public static string DefaultGroup {
get {
return ResourceManager.GetString("DefaultGroup", resourceCulture);
}
@ -180,7 +180,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Head.
/// </summary>
internal static string DefaultGroupHead {
public static string DefaultGroupHead {
get {
return ResourceManager.GetString("DefaultGroupHead", resourceCulture);
}
@ -189,7 +189,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Departments.
/// </summary>
internal static string DefaultGroups {
public static string DefaultGroups {
get {
return ResourceManager.GetString("DefaultGroups", resourceCulture);
}
@ -198,7 +198,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Guest.
/// </summary>
internal static string DefaultGuest {
public static string DefaultGuest {
get {
return ResourceManager.GetString("DefaultGuest", resourceCulture);
}
@ -207,7 +207,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Guests.
/// </summary>
internal static string DefaultGuests {
public static string DefaultGuests {
get {
return ResourceManager.GetString("DefaultGuests", resourceCulture);
}
@ -216,7 +216,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Employed since.
/// </summary>
internal static string DefaultRegDate {
public static string DefaultRegDate {
get {
return ResourceManager.GetString("DefaultRegDate", resourceCulture);
}
@ -225,7 +225,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Corporate.
/// </summary>
internal static string DefaultSchemaName {
public static string DefaultSchemaName {
get {
return ResourceManager.GetString("DefaultSchemaName", resourceCulture);
}
@ -234,7 +234,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Employee.
/// </summary>
internal static string DefaultUser {
public static string DefaultUser {
get {
return ResourceManager.GetString("DefaultUser", resourceCulture);
}
@ -243,7 +243,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Employees.
/// </summary>
internal static string DefaultUsers {
public static string DefaultUsers {
get {
return ResourceManager.GetString("DefaultUsers", resourceCulture);
}
@ -252,7 +252,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Position.
/// </summary>
internal static string DefaultUserTitle {
public static string DefaultUserTitle {
get {
return ResourceManager.GetString("DefaultUserTitle", resourceCulture);
}
@ -261,7 +261,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Add Teachers/Students.
/// </summary>
internal static string EducationAddUsers {
public static string EducationAddUsers {
get {
return ResourceManager.GetString("EducationAddUsers", resourceCulture);
}
@ -270,7 +270,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Group.
/// </summary>
internal static string EducationGroup {
public static string EducationGroup {
get {
return ResourceManager.GetString("EducationGroup", resourceCulture);
}
@ -279,7 +279,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Group Lead.
/// </summary>
internal static string EducationGroupHead {
public static string EducationGroupHead {
get {
return ResourceManager.GetString("EducationGroupHead", resourceCulture);
}
@ -288,7 +288,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Groups.
/// </summary>
internal static string EducationGroups {
public static string EducationGroups {
get {
return ResourceManager.GetString("EducationGroups", resourceCulture);
}
@ -297,7 +297,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Guest.
/// </summary>
internal static string EducationGuest {
public static string EducationGuest {
get {
return ResourceManager.GetString("EducationGuest", resourceCulture);
}
@ -306,7 +306,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Guests.
/// </summary>
internal static string EducationGuests {
public static string EducationGuests {
get {
return ResourceManager.GetString("EducationGuests", resourceCulture);
}
@ -315,7 +315,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Registration Date.
/// </summary>
internal static string EducationRegDate {
public static string EducationRegDate {
get {
return ResourceManager.GetString("EducationRegDate", resourceCulture);
}
@ -324,7 +324,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Educational Institution.
/// </summary>
internal static string EducationSchemaName {
public static string EducationSchemaName {
get {
return ResourceManager.GetString("EducationSchemaName", resourceCulture);
}
@ -333,7 +333,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Teacher/Student.
/// </summary>
internal static string EducationUser {
public static string EducationUser {
get {
return ResourceManager.GetString("EducationUser", resourceCulture);
}
@ -342,7 +342,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Teachers/Students.
/// </summary>
internal static string EducationUsers {
public static string EducationUsers {
get {
return ResourceManager.GetString("EducationUsers", resourceCulture);
}
@ -351,7 +351,7 @@ namespace ASC.Web.Core.PublicResources {
/// <summary>
/// Looks up a localized string similar to Title.
/// </summary>
internal static string EducationUserTitle {
public static string EducationUserTitle {
get {
return ResourceManager.GetString("EducationUserTitle", resourceCulture);
}
@ -375,7 +375,7 @@ namespace ASC.Web.Core.PublicResources {
/// &lt;guest&gt;CommonGuest&lt;/guest&gt;
/// &lt;guests&gt;CommonGuests&lt; [rest of string was truncated]&quot;;.
/// </summary>
internal static string PeopleNames {
public static string PeopleNames {
get {
return ResourceManager.GetString("PeopleNames", resourceCulture);
}