Compare commits

...

5 Commits

Author SHA1 Message Date
金村 勇祐
f9393ed5d7 Merged PR 1060: 5/7本番リリースメンテナンス告知文の削除
5/7本番リリースのため、保守の告知文を除いた修正内容をビルドするための修正です。

メンテナンス告知文の削除を確認
![image.png](https://dev.azure.com/ODMSCloud/6023ff7b-d41c-4fa7-9c6f-f576ba48c07c/_apis/git/repositories/302da463-a2d7-40f9-b2bb-6e8edf324fa9/pullRequests/1060/attachments/image.png)

本番リリース予定の修正を簡単にチェック

録音時間がソート順になっている事
![image (2).png](https://dev.azure.com/ODMSCloud/6023ff7b-d41c-4fa7-9c6f-f576ba48c07c/_apis/git/repositories/302da463-a2d7-40f9-b2bb-6e8edf324fa9/pullRequests/1060/attachments/image%20%282%29.png)

リテラルが反映されている事(RoleとStatus)
![image (4).png](https://dev.azure.com/ODMSCloud/6023ff7b-d41c-4fa7-9c6f-f576ba48c07c/_apis/git/repositories/302da463-a2d7-40f9-b2bb-6e8edf324fa9/pullRequests/1060/attachments/image%20%284%29.png)
2025-04-25 01:02:47 +00:00
金村 勇祐
2ded5b8498 Merged PR 1058: File Lengthのソートが正しく行われない_Funtion側修正漏れの修正
Funtion側もデータ型の変更に合わせる修正をいたしました。

動作確認状況
```
Test Suites: 8 passed, 8 total
Tests:       46 passed, 46 total
Snapshots:   0 total
Time:        85.851 s
Ran all test suites.
```
2025-04-23 02:57:38 +00:00
金村 勇祐
ef70deee14 Merged PR 1048: 英語以外の言語選択時、一部が英語のままとなっている_実装・単体テスト
## 概要
商用環境にて、一部リテラルが別言語にした場合も英語表記ののままというご指摘がありました。
指摘対象の修正と他にも漏れがないか調査して合わせて修正しております。

### チケット
[OMDS_IS-492 英語以外の言語選択時、一部が英語のままとなっている](https://so-net.backlog.jp/board/OMDS_IS?selectedIssueKey=OMDS_IS-492&category=1074456203)

### 修正内容
修正内容はは以下の内容となっております
- ユーザー一覧画面
    - ユーザーのRoleについて:リテラル表 99,100,107行
    - ライセンス割り当てステータスについて : 540~543行目
- タスク一覧画面
    - タスクのステータスについて:160~164行目
    - タスクのPriorityとPriorityのステータスについて: 135行目、544、545行目

[単体テスト](https://ndstokyo.sharepoint.com//r/sites/SNC-OMDS/Shared%20Documents/%E4%BF%9D%E5%AE%88/10_%E3%83%86%E3%82%B9%E3%83%88%E9%96%A2%E9%80%A3/%E5%8D%98%E4%BD%93%E3%83%86%E3%82%B9%E3%83%88/OMDS_IS-492%20%E8%8B%B1%E8%AA%9E%E4%BB%A5%E5%A4%96%E3%81%AE%E8%A8%80%E8%AA%9E%E9%81%B8%E6%8A%9E%E6%99%82%E3%80%81%E4%B8%80%E9%83%A8%E3%81%8C%E8%8B%B1%E8%AA%9E%E3%81%AE%E3%81%BE%E3%81%BE%E3%81%A8%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B/%E5%8D%98%E4%BD%93%E3%83%86%E3%82%B9%E3%83%88%E3%82%A8%E3%83%93%E3%83%87%E3%83%B3%E3%82%B9_OMDS_IS-492_%E8%8B%B1%E8%AA%9E%E4%BB%A5%E5%A4%96%E3%81%AE%E8%A8%80%E8%AA%9E%E9%81%B8%E6%8A%9E%E6%99%82%E3%80%81%E4%B8%80%E9%83%A8%E3%81%8C%E8%8B%B1%E8%AA%9E%E3%81%AE%E3%81%BE%E3%81%BE%E3%81%A8%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B.xlsx?d=w3018e2715f4c402f83f23581ffbcf0c2&csf=1&web=1&e=DgoO0B)
[リテラル表](https://ndstokyo.sharepoint.com//r/sites/SNC-OMDS/Shared%20Documents/%E4%BF%9D%E5%AE%88/10_%E3%83%86%E3%82%B9%E3%83%88%E9%96%A2%E9%80%A3/%E5%8D%98%E4%BD%93%E3%83%86%E3%82%B9%E3%83%88/OMDS_IS-492%20%E8%8B%B1%E8%AA%9E%E4%BB%A5%E5%A4%96%E3%81%AE%E8%A8%80%E8%AA%9E%E9%81%B8%E6%8A%9E%E6%99%82%E3%80%81%E4%B8%80%E9%83%A8%E3%81%8C%E8%8B%B1%E8%AA%9E%E3%81%AE%E3%81%BE%E3%81%BE%E3%81%A8%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B/%E3%83%A9%E3%83%99%E3%83%AB%E3%83%BB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E7%AE%A1%E7%90%86_dictation_20250401_2.xlsx?d=w4f470fdc3aa948caae53c1c735295677&csf=1&web=1&e=AgX8ga)

画面のみの修正のためユニットテストは実施しておりません
2025-04-23 02:05:10 +00:00
金村 勇祐
d9d6ccd60f Merged PR 1057: File Lengthのソートが正しく行われない_実装
## 概要
[タスク 4657: FB対応: File Lengthのソートが正しく行われない](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/OMDSDictation-2nd/_sprints/taskboard/OMDSDictation-2nd%20%E3%83%81%E3%83%BC%E3%83%A0/OMDSDictation-2nd/FY25_%E4%BF%9D%E5%AE%884%E6%9C%88?workitem=4657)

録音時間が文字列で登録されていたため、FileLengthが正しくソートされていなかった。
DBのaudio_filesテーブルのデータ型を文字列から数値型に変更する修正をいたしました。

数値型に変更にともない
カラムデータ型変更のためマイグレーションファイルを追加しております
durationを文字列で型宣言している部分の修正
型変更に伴う影響がある部分を修正しております。

## 動作確認状況
[単体テスト_File Lengthのソートが正しく行われない_実装](https://ndstokyo.sharepoint.com//r/sites/SNC-OMDS/Shared%20Documents/%E4%BF%9D%E5%AE%88/10_%E3%83%86%E3%82%B9%E3%83%88%E9%96%A2%E9%80%A3/%E5%8D%98%E4%BD%93%E3%83%86%E3%82%B9%E3%83%88/%E3%82%BF%E3%82%B9%E3%82%AF4657_File%20Length%E3%81%AE%E3%82%BD%E3%83%BC%E3%83%88%E3%81%8C%E6%AD%A3%E3%81%97%E3%81%8F%E8%A1%8C%E3%82%8F%E3%82%8C%E3%81%AA%E3%81%84_%E5%AE%9F%E8%A3%85/%E5%8D%98%E4%BD%93%E3%83%86%E3%82%B9%E3%83%88%E3%82%A8%E3%83%93%E3%83%87%E3%83%B3%E3%82%B9_%E3%82%BF%E3%82%B9%E3%82%AF4657_FB%E5%AF%BE%E5%BF%9C_File%20Length%E3%81%AE%E3%82%BD%E3%83%BC%E3%83%88%E3%81%8C%E6%AD%A3%E3%81%97%E3%81%8F%E8%A1%8C%E3%82%8F%E3%82%8C%E3%81%AA%E3%81%84.xlsx?d=wd663d69da107438496581c251a6072ff&csf=1&web=1&e=RdF4XS)

ユニットテスト実行結果
```
Test Suites: 24 passed, 24 total
Tests:       690 passed, 690 total
Snapshots:   0 total
Time:        2095.039 s, estimated 3500 s
```
2025-04-23 02:04:28 +00:00
金村 勇祐
8d6aa6117c Merged PR 1055: タスク 4674: メンテナンス告知実装_2025年5月7日保守リリース
## 概要
5月7日保守の本番リリースについて
メンテナンスモードによって、サービスを利用できない時間が発生するため
メンテナンスを告知する表示をトップページ画面に表示させる修正です。

- トップページのメンテナンス告知の表示(英語)
![image (3).png](https://dev.azure.com/ODMSCloud/6023ff7b-d41c-4fa7-9c6f-f576ba48c07c/_apis/git/repositories/302da463-a2d7-40f9-b2bb-6e8edf324fa9/pullRequests/1055/attachments/image%20%283%29.png)

画面とリテラルが一致していることを確認しております
[言語確認_メンテナンス告知実装_2025年5月7日保守リリース](https://ndstokyo.sharepoint.com//r/sites/SNC-OMDS/Shared%20Documents/%E4%BF%9D%E5%AE%88/10_%E3%83%86%E3%82%B9%E3%83%88%E9%96%A2%E9%80%A3/%E5%8D%98%E4%BD%93%E3%83%86%E3%82%B9%E3%83%88/%E3%82%BF%E3%82%B9%E3%82%AF%204674_%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9%E5%91%8A%E7%9F%A5%E5%AE%9F%E8%A3%85_2025%E5%B9%B45%E6%9C%887%E6%97%A5%E4%BF%9D%E5%AE%88%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9/%E8%A8%80%E8%AA%9E%E7%A2%BA%E8%AA%8D_%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9%E5%91%8A%E7%9F%A5%E5%AE%9F%E8%A3%85_2025%E5%B9%B45%E6%9C%887%E6%97%A5%E4%BF%9D%E5%AE%88%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9.xlsx?d=w2449692bc3364af8ae94250a269d21d9&csf=1&web=1&e=NfJJzN)

リテラルについては以下でお客様に確認
[【リリース】5月7日のリリースについて](https://so-net.backlog.jp/board/OMDS_IS?selectedIssueKey=OMDS_IS-500)
![image (2).png](https://dev.azure.com/ODMSCloud/6023ff7b-d41c-4fa7-9c6f-f576ba48c07c/_apis/git/repositories/302da463-a2d7-40f9-b2bb-6e8edf324fa9/pullRequests/1055/attachments/image%20%282%29.png)

メンテナンスの表示については過去のプルリクエストを参考に
日付以外は同様の実装にしています
[参考_6月末リリース手順(メンテナンスモード切替を含む)](https://ndstokyo.sharepoint.com//r/sites/SNC-OMDS/_layouts/15/Doc.aspx?sourcedoc=%7BF497BCC6-CFCB-46C9-B22B-8E6A916FBA43%7D&file=%25u53c2%25u8003_%25uff16%25u6708%25u672b%25u30ea%25u30ea%25u30fc%25u30b9%25u624b%25u9806%25uff08%25u30e1%25u30f3%25u30c6%25u30ca%25u30f3%25u30b9%25u30e2%25u30fc%25u30c8%25u3099%25u5207%25u66ff%25u3092%25u542b%25u3080%25uff09.xlsx&action=default&mobileredirect=true)
2025-04-23 01:06:35 +00:00
22 changed files with 470 additions and 415 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,3 @@
import type { RoleType } from "./types";
// LicenseStatusTypeの値を定数オブジェクトにする
export const LICENSE_STATUS = {
NORMAL: "Normal",
@ -13,16 +11,3 @@ export const LICENSE_ALLOCATE_STATUS = {
ALLOCATED: "Allocated",
NOTALLOCATED: "Not Allocated",
} as const;
// NoLicenseの表示
export const NO_LICENSE = "No License" as const;
// ライセンスが割り当てられている場合の表示
export const LICENSE_NORMAL = "License Assigned" as const;
// Roleの表示名
export const ROLE_DISPLAY_NAME: Record<RoleType, string> = {
author: "Author",
typist: "Transcriptionist",
none: "None",
} as const;

View File

@ -9,11 +9,7 @@ import {
isLicenseStatusType,
isRoleType,
} from "./types";
import {
LICENSE_STATUS,
LICENSE_ALLOCATE_STATUS,
ROLE_DISPLAY_NAME,
} from "./constants";
import { LICENSE_STATUS, LICENSE_ALLOCATE_STATUS } from "./constants";
export const selectInputValidationErrors = (state: RootState) => {
const { name, email, role, authorId, encryption, encryptionPassword } =
@ -180,8 +176,7 @@ export const selectUserViews = (state: RootState): UserView[] => {
prompt: convertedValues.prompt,
encryption: convertedValues.encryption,
authorId: convertedValues.authorId,
// roleに応じて表示名を変更する
role: ROLE_DISPLAY_NAME[role],
role,
licenseStatus: convertedLicenseStatus,
expiration: convertedExpiration,
remaining: convertedRemaining,

View File

@ -439,8 +439,9 @@ const DictationPage: React.FC = (): JSX.Element => {
dispatch(listTypistsAsync());
dispatch(listTypistGroupsAsync());
const url = `${import.meta.env.VITE_DESK_TOP_APP_SCHEME
}:playback?audioId=${audioFileId}`;
const url = `${
import.meta.env.VITE_DESK_TOP_APP_SCHEME
}:playback?audioId=${audioFileId}`;
const a = document.createElement("a");
a.href = url;
document.body.appendChild(a);
@ -922,6 +923,41 @@ const DictationPage: React.FC = (): JSX.Element => {
})();
}, [dispatch]);
const getTaskStatus = (taskStatus: string): string => {
switch (taskStatus) {
case STATUS.UPLOADED:
return t(getTranslationID("dictationPage.label.uploaded"));
case STATUS.PENDING:
return t(getTranslationID("dictationPage.label.pending"));
case STATUS.FINISHED:
return t(getTranslationID("dictationPage.label.finished"));
case STATUS.INPROGRESS:
return t(getTranslationID("dictationPage.label.inProgress"));
case STATUS.BACKUP:
return t(getTranslationID("dictationPage.label.backup"));
default:
return taskStatus;
}
};
const getTaskStatusIcon = (taskStatus: string): JSX.Element => {
switch (taskStatus) {
case STATUS.UPLOADED:
return <img src={uploaded} alt="Uploaded" />;
case STATUS.PENDING:
return <img src={pending} alt="Pending" />;
case STATUS.FINISHED:
return <img src={finished} alt="Finished" />;
case STATUS.INPROGRESS:
return <img src={inprogress} alt="InProgress" />;
case STATUS.BACKUP:
return <img src={backup} alt="Backup" />;
default:
// 予期せぬステータスの場合、アイコンを表示しない
return <span></span>;
}
};
return (
<>
<BackupPopup isOpen={isBackupPopupOpen} onClose={onCloseBackupPopup} />
@ -1098,8 +1134,9 @@ const DictationPage: React.FC = (): JSX.Element => {
{/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}
<button
type="submit"
className={`${styles.menuLink} ${!isLoading ? styles.isActive : ""
}`}
className={`${styles.menuLink} ${
!isLoading ? styles.isActive : ""
}`}
>
<img
src={searchIcon}
@ -1158,7 +1195,9 @@ const DictationPage: React.FC = (): JSX.Element => {
</th>
)}
{displayColumn.Priority && (
<th className={styles.clm3}>Priority</th>
<th className={styles.clm3}>
{t(getTranslationID("dictationPage.label.priority"))}
</th>
)}
{displayColumn.Encryption && (
<th className={styles.clm4}>
@ -1537,7 +1576,7 @@ const DictationPage: React.FC = (): JSX.Element => {
<a
className={
x.status !== STATUS.UPLOADED ||
!(isAdmin || isAuthor)
!(isAdmin || isAuthor)
? styles.isDisable
: ""
}
@ -1558,7 +1597,7 @@ const DictationPage: React.FC = (): JSX.Element => {
className={
(x.status === STATUS.INPROGRESS ||
x.status === STATUS.PENDING) &&
(isAdmin || isTypist)
(isAdmin || isTypist)
? ""
: styles.isDisable
}
@ -1579,7 +1618,7 @@ const DictationPage: React.FC = (): JSX.Element => {
<a
className={
x.status === STATUS.FINISHED &&
(isAdmin || isTypist)
(isAdmin || isTypist)
? ""
: styles.isDisable
}
@ -1600,8 +1639,8 @@ const DictationPage: React.FC = (): JSX.Element => {
// タスクのステータスがInprogressまたはPending以外の場合、削除ボタンを活性化する
className={
isDeletableRole &&
x.status !== STATUS.INPROGRESS &&
x.status !== STATUS.PENDING
x.status !== STATUS.INPROGRESS &&
x.status !== STATUS.PENDING
? ""
: styles.isDisable
}
@ -1621,27 +1660,8 @@ const DictationPage: React.FC = (): JSX.Element => {
)}
{displayColumn.Status && (
<td className={styles.clm2}>
{(() => {
switch (x.status) {
case STATUS.UPLOADED:
return (
<img src={uploaded} alt="Uploaded" />
);
case STATUS.PENDING:
return <img src={pending} alt="Pending" />;
case STATUS.FINISHED:
return (
<img src={finished} alt="Finished" />
);
case STATUS.INPROGRESS:
return (
<img src={inprogress} alt="InProgress" />
);
default:
return <img src={backup} alt="Backup" />;
}
})()}
{x.status}
{getTaskStatusIcon(x.status)}
{getTaskStatus(x.status)}
</td>
)}
{displayColumn.Priority && (
@ -1652,8 +1672,14 @@ const DictationPage: React.FC = (): JSX.Element => {
}}
>
{x.priority === "01"
? PRIORITY.HIGH
: PRIORITY.NORMAL}
? t(
getTranslationID("dictationPage.label.high")
)
: t(
getTranslationID(
"dictationPage.label.normal"
)
)}
</td>
)}
{displayColumn.Encryption && (
@ -1797,16 +1823,18 @@ const DictationPage: React.FC = (): JSX.Element => {
)}`}</span>
{/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}
<a
className={`${!isLoading && currentPage !== 1 ? styles.isActive : ""
}`}
className={`${
!isLoading && currentPage !== 1 ? styles.isActive : ""
}`}
onClick={getFirstPage}
>
«
</a>
{/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}
<a
className={`${!isLoading && currentPage !== 1 ? styles.isActive : ""
}`}
className={`${
!isLoading && currentPage !== 1 ? styles.isActive : ""
}`}
onClick={getPrevPage}
>
@ -1814,20 +1842,22 @@ const DictationPage: React.FC = (): JSX.Element => {
{`${currentPage} of ${totalPage}`}
{/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}
<a
className={`${!isLoading && currentPage < totalPage
className={`${
!isLoading && currentPage < totalPage
? styles.isActive
: ""
}`}
}`}
onClick={getNextPage}
>
</a>
{/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}
<a
className={`${!isLoading && currentPage < totalPage
className={`${
!isLoading && currentPage < totalPage
? styles.isActive
: ""
}`}
}`}
onClick={getLastPage}
>
»
@ -1855,8 +1885,9 @@ const DictationPage: React.FC = (): JSX.Element => {
{/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}
<a
onClick={onClickBackup}
className={`${styles.menuLink} ${isAdmin ? styles.isActive : ""
}`}
className={`${styles.menuLink} ${
isAdmin ? styles.isActive : ""
}`}
>
<img src={download} alt="" className={styles.menuIcon} />
{t(getTranslationID("dictationPage.label.fileBackup"))}

View File

@ -14,14 +14,10 @@ import {
} from "features/user";
import { useTranslation } from "react-i18next";
import { getTranslationID } from "translation";
import { LicenseStatusType, UserView } from "features/user/types";
import {
LICENSE_NORMAL,
LICENSE_STATUS,
NO_LICENSE,
} from "features/user/constants";
import { UserView } from "features/user/types";
import { LICENSE_STATUS } from "features/user/constants";
import { isApproveTier } from "features/auth";
import { TIERS } from "components/auth/constants";
import { TIERS, USER_ROLES } from "components/auth/constants";
import {
changeUpdateUser,
changeLicenseAllocateUser,
@ -165,6 +161,33 @@ const UserListPage: React.FC = (): JSX.Element => {
const isTier5 =
isApproveTier([TIERS.TIER5]) || delegationAccessToken !== null;
const getUserRole = (userRole: string): string => {
switch (userRole) {
case USER_ROLES.AUTHOR:
return t(getTranslationID("userListPage.label.author"));
case USER_ROLES.TYPIST:
return t(getTranslationID("userListPage.label.transcriptionist"));
default:
return t(getTranslationID("userListPage.label.none"));
}
};
// ライセンスステータスに応じて、ライセンスステータスの文字列を返す
const getLicenseStatus = (licenseStatus: string): string => {
switch (licenseStatus) {
case LICENSE_STATUS.NOLICENSE:
return t(getTranslationID("userListPage.label.notAllocated"));
case LICENSE_STATUS.ALERT:
return t(getTranslationID("userListPage.label.alert"));
case LICENSE_STATUS.RENEW:
return t(getTranslationID("userListPage.label.renew"));
case LICENSE_STATUS.NORMAL:
return t(getTranslationID("userListPage.label.allocated"));
default:
return licenseStatus;
}
};
return (
<>
<UserUpdatePopup
@ -421,7 +444,7 @@ const UserListPage: React.FC = (): JSX.Element => {
</ul>
</td>
<td> {user.name}</td>
<td>{user.role}</td>
<td>{getUserRole(user.role)}</td>
<td>{user.authorId}</td>
<td>{boolToElement(user.encryption)}</td>
<td>{boolToElement(user.prompt)}</td>
@ -524,15 +547,4 @@ const arrayToElement = (
));
};
// ライセンスステータスに応じて、ライセンスステータスの文字列を返す
const getLicenseStatus = (licenseStatus: LicenseStatusType): string => {
if (licenseStatus === LICENSE_STATUS.NOLICENSE) {
return NO_LICENSE;
}
if (licenseStatus === LICENSE_STATUS.NORMAL) {
return LICENSE_NORMAL;
}
return licenseStatus;
};
export default UserListPage;

View File

@ -54,7 +54,7 @@
},
"text": {
"maintenanceNotificationTitle": "Hinweis auf geplante Wartungsarbeiten",
"maintenanceNotification": "Aufgrund von Systemwartungsarbeiten wird ODMS Cloud ab dem 27. Januar, 6:00 Uhr UTC-Zeit, etwa eine Stunde lang nicht verfügbar sein. Wir entschuldigen uns für etwaige Unannehmlichkeiten, die während der Wartung entstanden sind."
"maintenanceNotification": "Aufgrund von Systemwartungsarbeiten wird ODMS Cloud ab dem 7. Mai, 6:00 Uhr UTC-Zeit, etwa eine Stunde lang nicht verfügbar sein. Wir entschuldigen uns für etwaige Unannehmlichkeiten, die während der Wartung entstanden sind."
}
},
"signupPage": {
@ -197,7 +197,11 @@
"promptLabel": "Eingabeaufforderung",
"addUsers": "Benutzer hinzufügen",
"forceEmailVerification": "E-Mail-Verifizierung erzwingen",
"search": "Suche"
"search": "Suche",
"allocated": "Lizenz zugewiesen",
"notAllocated": "Keine Liszenz",
"alert": "Alarm",
"renew": "Erneuern"
},
"text": {
"downloadExplain": "Bitte laden Sie die CSV-Beispieldatei herunter und geben Sie die erforderlichen Informationen gemäß den folgenden Regeln ein.",
@ -318,7 +322,9 @@
"rawFileName": "Ursprünglicher Dateiname",
"fileNameSave": "Führen Sie eine Dateiumbenennung durch",
"reopenDictation": "Status auf „Ausstehend“ ändern",
"search": "Suche"
"search": "Suche",
"high": "Hoch",
"normal": "Normal"
}
},
"cardLicenseIssuePopupPage": {
@ -691,4 +697,4 @@
"title": "Konto durchsuchen"
}
}
}
}

View File

@ -54,7 +54,7 @@
},
"text": {
"maintenanceNotificationTitle": "Notice of scheduled maintenance",
"maintenanceNotification": "Due to system maintenance, ODMS Cloud will be unavailable for approximately one hour starting from January 27th, 6:00AM UTC time. We apologize for any inconvenience caused during the maintenance."
"maintenanceNotification": "Due to system maintenance, ODMS Cloud will be unavailable for approximately one hour starting from May 7th, 6:00AM UTC time. We apologize for any inconvenience caused during the maintenance."
}
},
"signupPage": {
@ -197,7 +197,11 @@
"promptLabel": "Prompt",
"addUsers": "Add User",
"forceEmailVerification": "Force Email Verification",
"search": "Search"
"search": "Search",
"allocated": "License Assigned",
"notAllocated": "No License",
"alert": "Alert",
"renew": "Renew"
},
"text": {
"downloadExplain": "Please download the sample CSV file and apply the required information according to the rules below.",
@ -318,7 +322,9 @@
"rawFileName": "Original File Name",
"fileNameSave": "Execute file rename",
"reopenDictation": "Change status to Pending",
"search": "Search"
"search": "Search",
"high": "High",
"normal": "Normal"
}
},
"cardLicenseIssuePopupPage": {
@ -691,4 +697,4 @@
"title": "Search Account"
}
}
}
}

View File

@ -54,7 +54,7 @@
},
"text": {
"maintenanceNotificationTitle": "Aviso de mantenimiento programado",
"maintenanceNotification": "Debido al mantenimiento del sistema, ODMS Cloud no estará disponible durante aproximadamente una hora a partir del 27 de enero a las 6:00 am, hora UTC. Pedimos disculpas por cualquier inconveniente causado durante el mantenimiento."
"maintenanceNotification": "Debido al mantenimiento del sistema, ODMS Cloud no estará disponible durante aproximadamente una hora a partir del 7 de mayo a las 6:00 am, hora UTC. Pedimos disculpas por cualquier inconveniente causado durante el mantenimiento."
}
},
"signupPage": {
@ -197,7 +197,11 @@
"promptLabel": "Solicitar",
"addUsers": "Agregar usuario",
"forceEmailVerification": "Verificación forzada de correo electrónico",
"search": "Búsqueda"
"search": "Búsqueda",
"allocated": "Licencia asignada",
"notAllocated": "Sin Lisencia",
"alert": "Alerta",
"renew": "Renovar"
},
"text": {
"downloadExplain": "Descargue el archivo CSV de muestra y aplique la información requerida de acuerdo con las reglas siguientes.",
@ -318,7 +322,9 @@
"rawFileName": "Nombre de archivo original",
"fileNameSave": "Ejecutar cambio de nombre de archivo",
"reopenDictation": "Cambiar el estado a Pendiente",
"search": "Búsqueda"
"search": "Búsqueda",
"high": "Alto",
"normal": "Normal"
}
},
"cardLicenseIssuePopupPage": {
@ -691,4 +697,4 @@
"title": "Buscar cuenta"
}
}
}
}

View File

@ -54,7 +54,7 @@
},
"text": {
"maintenanceNotificationTitle": "Avis de maintenance programmée",
"maintenanceNotification": "En raison de la maintenance du système, ODMS Cloud sera indisponible pendant environ une heure à partir du 27 janvier à 6h00, heure UTC. Nous nous excusons pour tout inconvénient causé lors de la maintenance."
"maintenanceNotification": "En raison de la maintenance du système, ODMS Cloud sera indisponible pendant environ une heure à partir du 7 Mai à 6h00, heure UTC. Nous nous excusons pour tout inconvénient causé lors de la maintenance."
}
},
"signupPage": {
@ -197,7 +197,11 @@
"promptLabel": "Invite",
"addUsers": "Ajouter un utilisateur",
"forceEmailVerification": "Forcer la vérification de l'e-mail",
"search": "Recherche"
"search": "Recherche",
"allocated": "Licence attribuée",
"notAllocated": "Pas de Lisence",
"alert": "Alerte",
"renew": "Renouveler"
},
"text": {
"downloadExplain": "Veuillez télécharger l'exemple de fichier CSV et appliquer les informations requises conformément aux règles ci-dessous.",
@ -318,7 +322,9 @@
"rawFileName": "Nom du fichier d'origine",
"fileNameSave": "Exécuter le changement de nom du fichier",
"reopenDictation": "Changer le statut en Suspendu",
"search": "Recherche"
"search": "Recherche",
"high": "Haut",
"normal": "Normale"
}
},
"cardLicenseIssuePopupPage": {
@ -654,7 +660,7 @@
"label": {
"title": "Paramètre de suppression automatique de fichiers",
"autoFileDeleteCheck": "Suppression automatique des fichiers",
"daysAnnotation": "Número de días desde que finalizó la transcripción para eliminar los archivos.",
"daysAnnotation": "Nombre de jours à compter de la fin de la transcription pour supprimer les fichiers.",
"days": "Jours",
"saveButton": "Enregistrer les paramètres",
"daysValidationError": "Veuillez saisir un nombre compris entre 1 et 999 pour les jours."
@ -691,4 +697,4 @@
"title": "Rechercher un compte"
}
}
}
}

View File

@ -22,7 +22,7 @@ export class AudioFile {
@Column()
started_at: Date;
@Column({ type: "time" })
duration: string;
duration: number;
@Column()
finished_at: Date;
@Column()

View File

@ -564,7 +564,7 @@ export const makeTestTask = async (
author_id: "test_author",
work_type_id: "test_work_type",
started_at: new Date(),
duration: "00:00:00",
duration: 0,
finished_at: new Date(),
uploaded_at: new Date(),
file_size: 1024,

View File

@ -1282,7 +1282,7 @@ describe("deleteRecords | 削除対象タスク等を削除できる", () => {
author_id: "test_author",
work_type_id: "test_work_type",
started_at: new Date(),
duration: "00:00:00",
duration: 0,
finished_at: new Date(),
uploaded_at: new Date(),
file_size: 1024,

View File

@ -0,0 +1,7 @@
-- +migrate Up
ALTER TABLE `audio_files`
MODIFY COLUMN `duration` BIGINT UNSIGNED NOT NULL COMMENT '録音時間';
-- +migrate Down
ALTER TABLE `audio_files`
MODIFY COLUMN `duration` VARCHAR(255) NOT NULL COMMENT '録音時間';

View File

@ -247,7 +247,7 @@ export const createAudioFile = async (
author_id: 'author_id',
work_type_id: '',
started_at: new Date(),
duration: '100000',
duration: 100000,
finished_at: new Date(),
uploaded_at: new Date(),
file_size: fileSize,

View File

@ -351,7 +351,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '',
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -457,7 +457,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '',
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -584,7 +584,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
'XXXXXX', // 存在しないAuthorIDを指定
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -644,7 +644,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '', // 音声ファイルの情報には、録音者のAuthorIDが入る
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -723,7 +723,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '', // 音声ファイルの情報には、録音者のAuthorIDが入る
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -832,7 +832,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '', // 音声ファイルの情報には、録音者のAuthorIDが入る
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -922,7 +922,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '', // 音声ファイルの情報には、録音者のAuthorIDが入る
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -1011,7 +1011,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '', // 音声ファイルの情報には、録音者のAuthorIDが入る
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -1105,7 +1105,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '', // 音声ファイルの情報には、録音者のAuthorIDが入る
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -1148,7 +1148,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '',
'file.zip',
'11:22:33',
"100000",
'yyyy-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -1192,7 +1192,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '',
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -1233,7 +1233,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
'authorAuthorId',
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -1284,7 +1284,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '',
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -1395,7 +1395,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '',
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -1514,7 +1514,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '',
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -1643,7 +1643,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '',
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -1772,7 +1772,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '',
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -1891,7 +1891,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '',
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -2038,7 +2038,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '',
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -2188,7 +2188,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '',
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
@ -2338,7 +2338,7 @@ describe('タスク作成から自動ルーティング(DB使用)', () => {
'http://blob/url/file.zip',
authorAuthorId ?? '',
'file.zip',
'11:22:33',
"100000",
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',
'2023-05-26T11:22:33.444',

View File

@ -69,7 +69,7 @@ export const createTask = async (
author_id: author_id ?? 'DEFAULT_ID',
work_type_id: 'work_type_id',
started_at: new Date(),
duration: '100000',
duration: 100000,
finished_at: new Date(),
uploaded_at: new Date(),
file_size: fileSize ?? 10000,

View File

@ -264,7 +264,7 @@ describe('TasksService', () => {
author_id: 'AUTHOR',
work_type_id: 'WorkType',
started_at: new Date('2023-01-01T01:01:01.000'),
duration: '123000',
duration: 123000,
finished_at: new Date('2023-01-01T01:01:01.000'),
uploaded_at: new Date('2023-01-01T01:01:01.000'),
file_size: 123000,

View File

@ -465,7 +465,7 @@ const defaultTasksRepositoryMockValue: {
author_id: 'AUTHOR',
work_type_id: 'WorkType',
started_at: new Date('2023-01-01T01:01:01.000Z'),
duration: '123000',
duration: 123000,
finished_at: new Date('2023-01-01T01:01:01.000Z'),
uploaded_at: new Date('2023-01-01T01:01:01.000Z'),
file_size: 123000,

View File

@ -127,7 +127,7 @@ export const createTask = async (
author_id: author_id,
work_type_id: work_type_id,
started_at: new Date(),
duration: '100000',
duration: 100000,
finished_at: new Date(),
uploaded_at: new Date(),
file_size: 10000,
@ -183,7 +183,7 @@ export const createAudioFile = async (
author_id: author_id,
work_type_id: work_type_id,
started_at: new Date(),
duration: '100000',
duration: 100000,
finished_at: new Date(),
uploaded_at: new Date(),
file_size: 10000,

View File

@ -60,7 +60,7 @@ const createTask = (
authorId: file.author_id,
workType: file.work_type_id,
audioCreatedDate: file.started_at.toISOString(),
audioDuration: file.duration,
audioDuration: file.duration.toString(),
audioFinishedDate: file.finished_at.toISOString(),
audioUploadedDate: file.uploaded_at.toISOString(),
audioFormat: file.audio_format,

View File

@ -23,7 +23,7 @@ export class AudioFile {
@Column()
started_at: Date;
@Column({ type: 'time' })
duration: string;
duration: number;
@Column()
finished_at: Date;
@Column()

View File

@ -1028,7 +1028,8 @@ export class TasksRepositoryService {
audioFile.author_id = author_id;
audioFile.work_type_id = work_type_id;
audioFile.started_at = started_at;
audioFile.duration = duration;
// 数値型のdurationカラムにinsertするため文字列から数値型に変換する
audioFile.duration = parseInt(duration, 10);
audioFile.finished_at = finished_at;
audioFile.uploaded_at = uploaded_at;
audioFile.file_size = file_size;