Public Order entity ve ListForm Seederlar

This commit is contained in:
Sedat ÖZTÜRK 2025-10-08 17:08:34 +03:00
parent 7770227b4c
commit e45885f569
14 changed files with 169 additions and 155 deletions

View file

@ -15,9 +15,8 @@ public class OrderDto : EntityDto<Guid>
public decimal Commission { get; set; }
public decimal Total { get; set; }
public string PaymentMethod { get; set; }
public int? Installments { get; set; }
public string? InstallmentName { get; set; }
public Guid PaymentMethodId { get; set; }
public int? Installment { get; set; }
public Dictionary<string, object> PaymentData { get; set; }
}

View file

@ -247,9 +247,8 @@ public class PublicAppService : PlatformAppService
Subtotal = input.Subtotal,
Commission = input.Commission,
Total = input.Total,
PaymentMethod = input.PaymentMethod,
Installments = input.Installments,
InstallmentName = input.InstallmentName,
PaymentMethodId = input.PaymentMethodId,
Installment = input.Installment,
PaymentDataJson = JsonSerializer.Serialize(input.PaymentData),
};
@ -273,7 +272,7 @@ public class PublicAppService : PlatformAppService
{
Id = entity.Id,
Total = entity.Total,
PaymentMethod = entity.PaymentMethod
PaymentMethodId = entity.PaymentMethodId
};
}

View file

@ -155,6 +155,20 @@ public class PlatformListFormsSeeder : IDataSeedContributor, ITransientDependenc
$"(\"{SelectCommandByTableName("ClassType", Prefix.DbTableDefinition)}\".\"BranchId\" = @param0 OR @param0 IS NULL) " +
$"ORDER BY \"{SelectCommandByTableName("ClassType", Prefix.DbTableDefinition)}\".\"Name\";";
var lookupQueryPaymentMethodValues =
$"SELECT " +
$"\"{SelectCommandByTableName("PaymentMethod", Prefix.DbTableWeb)}\".\"Id\" AS \"Key\", " +
$"\"{SelectCommandByTableName("PaymentMethod", Prefix.DbTableWeb)}\".\"Name\" AS \"Name\" " +
$"FROM \"{SelectCommandByTableName("PaymentMethod", Prefix.DbTableWeb)}\" " +
$"ORDER BY \"{SelectCommandByTableName("PaymentMethod", Prefix.DbTableWeb)}\".\"Name\";";
var lookupQueryInstallmentValues =
$"SELECT " +
$"\"{SelectCommandByTableName("InstallmentOption", Prefix.DbTableWeb)}\".\"Installment\" AS \"Key\", " +
$"\"{SelectCommandByTableName("InstallmentOption", Prefix.DbTableWeb)}\".\"Name\" AS \"Name\" " +
$"FROM \"{SelectCommandByTableName("InstallmentOption", Prefix.DbTableWeb)}\" " +
$"ORDER BY \"{SelectCommandByTableName("InstallmentOption", Prefix.DbTableWeb)}\".\"Installment\";";
var htmlEditorOptions = "{\"toolbar\": {\"multiline\": true, \"items\": [{\"name\": \"undo\"},{\"name\": \"redo\"},{\"name\": \"separator\"},{\"name\": \"size\",\"acceptedValues\": [\"8pt\",\"10pt\",\"12pt\",\"14pt\",\"18pt\",\"24pt\",\"36pt\"],\"options\": {\"inputAttr\": {\"aria-label\": \"Font size\"}}},{\"name\": \"font\",\"acceptedValues\": [\"Arial\",\"Courier New\",\"Georgia\",\"Impact\",\"Lucida Console\",\"Tahoma\",\"Times New Roman\",\"Verdana\"],\"options\": {\"inputAttr\": {\"aria-label\": \"Font family\"}}},{\"name\": \"separator\"},{\"name\": \"bold\"},{\"name\": \"italic\"},{\"name\": \"strike\"},{\"name\": \"underline\"},{\"name\": \"separator\"},{\"name\": \"alignLeft\"},{\"name\": \"alignCenter\"},{\"name\": \"alignRight\"},{\"name\": \"alignJustify\"},{\"name\": \"separator\"},{\"name\": \"orderedList\"},{\"name\": \"bulletList\"},{\"name\": \"separator\"},{\"name\": \"header\",\"acceptedValues\": [false,1,2,3,4,5],\"options\": {\"inputAttr\": {\"aria-label\": \"Font family\"}}},{\"name\": \"separator\"},{\"name\": \"color\"},{\"name\": \"background\"},{\"name\": \"separator\"},{\"name\": \"link\"},{\"name\": \"image\"},{\"name\": \"separator\"},{\"name\": \"clear\"},{\"name\": \"codeBlock\"},{\"name\": \"blockquote\"},{\"name\": \"separator\"},{\"name\": \"insertTable\"},{\"name\": \"deleteTable\"},{\"name\": \"insertRowAbove\"},{\"name\": \"insertRowBelow\"},{\"name\": \"deleteRow\"},{\"name\": \"insertColumnLeft\"},{\"name\": \"insertColumnRight\"},{\"name\": \"deleteColumn\"}]}}";
var showClearButton = "{ \"showClearButton\" : true }";
@ -12149,10 +12163,9 @@ public class PlatformListFormsSeeder : IDataSeedContributor, ITransientDependenc
ItemType = "group",
Items =
[
new EditingFormItemDto { Order = 1, DataField = "Id", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 2, DataField = "Name", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 3, DataField = "Commission", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 4, DataField = "Logo", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 1, DataField = "Name", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 2, DataField = "Commission", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 3, DataField = "Logo", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
]
}
}),
@ -12525,7 +12538,7 @@ public class PlatformListFormsSeeder : IDataSeedContributor, ITransientDependenc
Name = AppCodes.Orders.PurchaseOrders,
Title = AppCodes.Orders.PurchaseOrders,
DataSourceCode = SeedConsts.DataSources.DefaultCode,
IsTenant = true,
IsTenant = false,
IsBranch = false,
IsOrganizationUnit = false,
Description = AppCodes.Orders.PurchaseOrders,
@ -12593,8 +12606,8 @@ public class PlatformListFormsSeeder : IDataSeedContributor, ITransientDependenc
Popup = new GridEditingPopupDto
{
Title = "Purchase Order Form",
Width = 500,
Height = 800
Width = 1000,
Height = 500
},
AllowDeleting = true,
AllowAdding = true,
@ -12606,32 +12619,31 @@ public class PlatformListFormsSeeder : IDataSeedContributor, ITransientDependenc
new()
{
Order = 1,
ColCount = 1,
ColCount = 2,
ColSpan = 2,
ItemType = "group",
Items =
[
new EditingFormItemDto { Order = 1, DataField = "OrganizationName", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 2, DataField = "Founder", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 3, DataField = "VknTckn", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 4, DataField = "TaxOffice", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 5, DataField = "Address", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 6, DataField = "Address2", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 7, DataField = "Country", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=showClearButton },
new EditingFormItemDto { Order = 8, DataField = "City", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 9, DataField = "District", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 10, DataField = "PostalCode", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 11, DataField = "Phone", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 12, DataField = "Mobile", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 13, DataField = "Fax", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 14, DataField = "Email", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 15, DataField = "Website", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 16, DataField = "Subtotal", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 17, DataField = "Commission", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 18, DataField = "Total", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 19, DataField = "PaymentMethod", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 20, DataField = "Installments", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 21, DataField = "InstallmentName", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 1, DataField = "OrganizationName", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 2, DataField = "Founder", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 3, DataField = "VknTckn", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 4, DataField = "TaxOffice", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 7, DataField = "Country", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=showClearButton },
new EditingFormItemDto { Order = 8, DataField = "City", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=showClearButton },
new EditingFormItemDto { Order = 9, DataField = "District", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=showClearButton },
new EditingFormItemDto { Order = 5, DataField = "Address", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 6, DataField = "Address2", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 10, DataField = "PostalCode", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 11, DataField = "Phone", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 12, DataField = "Mobile", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 13, DataField = "Fax", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 14, DataField = "Email", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 15, DataField = "Website", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 16, DataField = "Subtotal", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 17, DataField = "Commission", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 18, DataField = "Total", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 19, DataField = "PaymentMethodId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=showClearButton },
new EditingFormItemDto { Order = 20, DataField = "Installment", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=showClearButton },
]
}
}),
@ -12694,7 +12706,7 @@ public class PlatformListFormsSeeder : IDataSeedContributor, ITransientDependenc
CultureName = LanguageCodes.En,
SourceDbType = DbType.String,
FieldName = "OrganizationName",
Width = 300,
Width = 200,
ListOrderNo = 2,
Visible = true,
IsActive = true,
@ -12840,6 +12852,14 @@ public class PlatformListFormsSeeder : IDataSeedContributor, ITransientDependenc
IsActive = true,
IsDeleted = false,
AllowSearch = true,
LookupJson = JsonSerializer.Serialize(new LookupDto
{
DataSourceType = UiLookupDataSourceTypeEnum.Query,
DisplayExpr = "Name",
ValueExpr = "Key",
LookupQuery = lookupQueryCountryValues,
CascadeEmptyFields = "City,District"
}),
PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto
{
C = AppCodes.Orders.PurchaseOrders + ".Create",
@ -12862,6 +12882,17 @@ public class PlatformListFormsSeeder : IDataSeedContributor, ITransientDependenc
IsActive = true,
IsDeleted = false,
AllowSearch = true,
LookupJson = JsonSerializer.Serialize(new LookupDto
{
DataSourceType = UiLookupDataSourceTypeEnum.Query,
DisplayExpr = "Name",
ValueExpr = "Key",
LookupQuery = lookupQueryCityValues,
CascadeRelationField = "Country",
CascadeFilterOperator="=",
CascadeParentFields = "Country",
CascadeEmptyFields = "District"
}),
PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto
{
C = AppCodes.Orders.PurchaseOrders + ".Create",
@ -12884,6 +12915,16 @@ public class PlatformListFormsSeeder : IDataSeedContributor, ITransientDependenc
IsActive = true,
IsDeleted = false,
AllowSearch = true,
LookupJson = JsonSerializer.Serialize(new LookupDto
{
DataSourceType = UiLookupDataSourceTypeEnum.Query,
DisplayExpr = "Name",
ValueExpr = "Key",
LookupQuery = lookupQueryDistrictValues,
CascadeRelationField = "City",
CascadeFilterOperator="=",
CascadeParentFields = "Country,City",
}),
PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto
{
C = AppCodes.Orders.PurchaseOrders + ".Create",
@ -13052,14 +13093,21 @@ public class PlatformListFormsSeeder : IDataSeedContributor, ITransientDependenc
{
ListFormCode = listFormPurchaseOrder.ListFormCode,
CultureName = LanguageCodes.En,
SourceDbType = DbType.String,
FieldName = "PaymentMethod",
SourceDbType = DbType.Guid,
FieldName = "PaymentMethodId",
Width = 100,
ListOrderNo = 18,
Visible = true,
IsActive = true,
IsDeleted = false,
AllowSearch = true,
LookupJson = JsonSerializer.Serialize(new LookupDto
{
DataSourceType = UiLookupDataSourceTypeEnum.Query,
DisplayExpr = "Name",
ValueExpr = "Key",
LookupQuery = lookupQueryPaymentMethodValues
}),
PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto
{
C = AppCodes.Orders.PurchaseOrders + ".Create",
@ -13075,13 +13123,20 @@ public class PlatformListFormsSeeder : IDataSeedContributor, ITransientDependenc
ListFormCode = listFormPurchaseOrder.ListFormCode,
CultureName = LanguageCodes.En,
SourceDbType = DbType.Int32,
FieldName = "Installments",
FieldName = "Installment",
Width = 100,
ListOrderNo = 19,
Visible = true,
IsActive = true,
IsDeleted = false,
AllowSearch = true,
LookupJson = JsonSerializer.Serialize(new LookupDto
{
DataSourceType = UiLookupDataSourceTypeEnum.Query,
DisplayExpr = "Name",
ValueExpr = "Key",
LookupQuery = lookupQueryInstallmentValues
}),
PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto
{
C = AppCodes.Orders.PurchaseOrders + ".Create",
@ -13091,29 +13146,7 @@ public class PlatformListFormsSeeder : IDataSeedContributor, ITransientDependenc
I = true,
Deny = false
})
},
new()
{
ListFormCode = listFormPurchaseOrder.ListFormCode,
CultureName = LanguageCodes.En,
SourceDbType = DbType.String,
FieldName = "InstallmentName",
Width = 100,
ListOrderNo = 20,
Visible = true,
IsActive = true,
IsDeleted = false,
AllowSearch = true,
PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto
{
C = AppCodes.Orders.PurchaseOrders + ".Create",
R = AppCodes.Orders.PurchaseOrders,
U = AppCodes.Orders.PurchaseOrders + ".Update",
E = true,
I = true,
Deny = false
})
},
}
]);
#endregion
}
@ -13542,7 +13575,7 @@ public class PlatformListFormsSeeder : IDataSeedContributor, ITransientDependenc
Popup = new GridEditingPopupDto
{
Title = "Blog Post Form",
Width = 600,
Width = 1000,
Height = 600
},
AllowDeleting = true,

View file

@ -589,28 +589,28 @@ public class PlatformTenantDataSeeder : IDataSeedContributor, ITransientDependen
}
}
foreach (var item in items.NotificationRules)
{
var exists = await _notificationRuleRepository.AnyAsync(x =>
x.NotificationType == item.NotificationType &&
x.RecipientType == item.RecipientType &&
x.RecipientId == item.RecipientId &&
x.Channel == item.Channel);
// foreach (var item in items.NotificationRules)
// {
// var exists = await _notificationRuleRepository.AnyAsync(x =>
// x.NotificationType == item.NotificationType &&
// x.RecipientType == item.RecipientType &&
// x.RecipientId == item.RecipientId &&
// x.Channel == item.Channel);
if (!exists)
{
await _notificationRuleRepository.InsertAsync(new NotificationRule
{
NotificationType = item.NotificationType,
RecipientType = item.RecipientType,
RecipientId = item.RecipientId,
Channel = item.Channel,
IsActive = item.IsActive,
IsFixed = item.IsFixed,
IsCustomized = item.IsCustomized
});
}
}
// if (!exists)
// {
// await _notificationRuleRepository.InsertAsync(new NotificationRule
// {
// NotificationType = item.NotificationType,
// RecipientType = item.RecipientType,
// RecipientId = item.RecipientId,
// Channel = item.Channel,
// IsActive = item.IsActive,
// IsFixed = item.IsFixed,
// IsCustomized = item.IsCustomized
// });
// }
// }
foreach (var item in items.Menus)
{

View file

@ -30,9 +30,8 @@ public class Order : FullAuditedEntity<Guid>, IMultiTenant
public decimal Commission { get; set; }
public decimal Total { get; set; }
public string PaymentMethod { get; set; }
public int? Installments { get; set; }
public string? InstallmentName { get; set; }
public Guid PaymentMethodId { get; set; }
public int? Installment { get; set; }
public string PaymentDataJson { get; set; } // JSON olarak saklanacak

View file

@ -1395,8 +1395,6 @@ public class PlatformDbContext :
b.Property(o => o.Commission).IsRequired().HasPrecision(18, 2);
b.Property(o => o.Total).IsRequired().HasPrecision(18, 2);
b.Property(o => o.PaymentMethod).IsRequired().HasMaxLength(64);
b.Property(o => o.InstallmentName).HasMaxLength(128);
b.Property(o => o.PaymentDataJson).HasMaxLength(4000);
b.HasMany(o => o.Items)

View file

@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore;
namespace Kurs.Platform.Migrations
{
[DbContext(typeof(PlatformDbContext))]
[Migration("20251008104142_Initial")]
[Migration("20251008124621_Initial")]
partial class Initial
{
/// <inheritdoc />
@ -4625,11 +4625,7 @@ namespace Kurs.Platform.Migrations
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("InstallmentName")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<int?>("Installments")
b.Property<int?>("Installment")
.HasColumnType("int");
b.Property<bool>("IsDeleted")
@ -4657,10 +4653,8 @@ namespace Kurs.Platform.Migrations
.HasMaxLength(4000)
.HasColumnType("nvarchar(4000)");
b.Property<string>("PaymentMethod")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<Guid>("PaymentMethodId")
.HasColumnType("uniqueidentifier");
b.Property<long>("Phone")
.HasColumnType("bigint");

View file

@ -1932,9 +1932,8 @@ namespace Kurs.Platform.Migrations
Subtotal = table.Column<decimal>(type: "decimal(18,2)", precision: 18, scale: 2, nullable: false),
Commission = table.Column<decimal>(type: "decimal(18,2)", precision: 18, scale: 2, nullable: false),
Total = table.Column<decimal>(type: "decimal(18,2)", precision: 18, scale: 2, nullable: false),
PaymentMethod = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
Installments = table.Column<int>(type: "int", nullable: true),
InstallmentName = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: true),
PaymentMethodId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
Installment = table.Column<int>(type: "int", nullable: true),
PaymentDataJson = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true),
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false),
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),

View file

@ -4622,11 +4622,7 @@ namespace Kurs.Platform.Migrations
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("InstallmentName")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<int?>("Installments")
b.Property<int?>("Installment")
.HasColumnType("int");
b.Property<bool>("IsDeleted")
@ -4654,10 +4650,8 @@ namespace Kurs.Platform.Migrations
.HasMaxLength(4000)
.HasColumnType("nvarchar(4000)");
b.Property<string>("PaymentMethod")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<Guid>("PaymentMethodId")
.HasColumnType("uniqueidentifier");
b.Property<long>("Phone")
.HasColumnType("bigint");

View file

@ -44,7 +44,8 @@ export const PaymentForm: React.FC<PaymentFormProps> = ({
onComplete,
cartState,
}) => {
const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<string>('credit-card')
const defaultPaymentMethod = 'Kredi Kartı'
const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<string>(defaultPaymentMethod)
const [selectedInstallment, setSelectedInstallment] = useState<InstallmentOptionDto>()
const [paymentData, setPaymentData] = useState({
cardNumber: '',
@ -65,7 +66,7 @@ export const PaymentForm: React.FC<PaymentFormProps> = ({
const paymentResponse = await orderService.getPaymentMethodList()
setPaymentMethods(paymentResponse.data)
if (paymentResponse.data.length > 0) {
setSelectedPaymentMethod(paymentResponse.data[1].id)
setSelectedPaymentMethod(paymentResponse.data[1].name)
}
const installmentResponse = await orderService.getInstallmentOptionList()
@ -80,10 +81,10 @@ export const PaymentForm: React.FC<PaymentFormProps> = ({
fetchData()
}, [])
const selectedMethod = paymentMethods.find((m) => m.id === selectedPaymentMethod)
const selectedMethod = paymentMethods.find((m) => m.name === selectedPaymentMethod)
let commission = 0
if (selectedPaymentMethod === 'credit-card' && selectedInstallment) {
if (selectedPaymentMethod === defaultPaymentMethod && selectedInstallment) {
commission = cartState.total * selectedInstallment.commission
} else if (selectedMethod) {
commission = cartState.total * selectedMethod.commission
@ -102,10 +103,11 @@ export const PaymentForm: React.FC<PaymentFormProps> = ({
e.preventDefault()
onComplete({
...paymentData,
paymentMethod: selectedMethod?.name ?? '',
installments: selectedPaymentMethod === 'credit-card' ? (selectedInstallment?.id ?? 1) : 1,
installmentName:
selectedPaymentMethod === 'credit-card' ? (selectedInstallment?.name ?? '') : 'Tek Ödeme',
paymentMethodId: selectedMethod?.id,
installment:
selectedPaymentMethod === defaultPaymentMethod
? (selectedInstallment?.installment ?? 1)
: 1,
commission,
total: finalTotal,
})
@ -260,24 +262,26 @@ export const PaymentForm: React.FC<PaymentFormProps> = ({
<label
key={method.id}
className={`flex items-center p-3 border-2 rounded-lg cursor-pointer transition-all ${
selectedPaymentMethod === method.id
selectedPaymentMethod === method.name
? 'border-blue-500 bg-blue-50'
: 'border-gray-200 hover:border-gray-300'
}`}
>
<input
type="radio"
name="paymentMethod"
value={method.id}
checked={selectedPaymentMethod === method.id}
onChange={(e) => setSelectedPaymentMethod(e.target.value)}
name="paymentMethodId"
value={method.name}
checked={selectedPaymentMethod === method.name}
onChange={(e) => {
setSelectedPaymentMethod(e.target.value)
}}
className="sr-only"
/>
<span className="text-2xl mr-3">{method.logo}</span>
<div>
<div className="font-medium text-gray-900">{method.name}</div>
<div className="text-sm text-gray-600">
{method.id === 'credit-card'
{method.name === defaultPaymentMethod
? translate('::Public.payment.method.installmentsAvailable')
: translate('::Public.payment.method.noCommission')}
</div>
@ -288,7 +292,7 @@ export const PaymentForm: React.FC<PaymentFormProps> = ({
</div>
{/* Taksit Seçenekleri */}
{selectedPaymentMethod === 'credit-card' && (
{selectedPaymentMethod === defaultPaymentMethod && (
<div className="bg-white rounded-xl shadow border p-4">
<h3 className="text-md font-medium text-gray-800 mb-2">
{translate('::Public.payment.installments.title')}
@ -298,7 +302,7 @@ export const PaymentForm: React.FC<PaymentFormProps> = ({
<label
key={option.id}
className={`flex flex-col items-center justify-center h-full p-4 border-2 rounded-xl cursor-pointer transition-all text-xs md:text-sm text-center select-none ${
selectedInstallment?.id === option.id
selectedInstallment?.installment === option.installment
? 'border-blue-500 bg-blue-50 shadow-md scale-105'
: 'border-gray-200 hover:border-blue-200'
}`}
@ -306,8 +310,8 @@ export const PaymentForm: React.FC<PaymentFormProps> = ({
<input
type="radio"
name="installment"
value={option.id}
checked={selectedInstallment?.id === option.id}
value={option.installment}
checked={selectedInstallment?.installment === option.installment}
onChange={() => setSelectedInstallment(option)}
className="sr-only"
/>
@ -319,13 +323,14 @@ export const PaymentForm: React.FC<PaymentFormProps> = ({
</span>
</div>
<div className="text-blue-700 font-bold mb-1">
{option.id > 1
? `${option.id} ${translate('::Public.payment.installments.monthly')}`
{option.installment > 1
? `${option.installment} ${translate('::Public.payment.installments.monthly')}`
: translate('::Public.payment.installments.single')}
</div>
<div className="font-extrabold text-lg text-gray-900 mt-1">
{formatPrice(
(cartState.total + cartState.total * option.commission) / option.id,
(cartState.total + cartState.total * option.commission) /
option.installment,
)}
</div>
</label>
@ -338,7 +343,7 @@ export const PaymentForm: React.FC<PaymentFormProps> = ({
{/* 3. Sütun: Kart Bilgileri + Sipariş Özeti ve Butonlar */}
<div className="w-full lg:w-1/3 flex flex-col gap-6">
{/* Kart Bilgileri */}
{selectedPaymentMethod !== 'bank-transfer' && (
{selectedPaymentMethod !== defaultPaymentMethod && (
<div className="bg-white rounded-xl shadow border p-6 space-y-3">
<h3 className="text-md font-medium text-gray-800 mb-3">
{translate('::Public.payment.card.title')}
@ -419,14 +424,14 @@ export const PaymentForm: React.FC<PaymentFormProps> = ({
<span>{translate('::Public.payment.summary.commission')}</span>
<span>{formatPrice(commission)}</span>
</div>
{selectedPaymentMethod === 'credit-card' &&
selectedInstallment?.id &&
selectedInstallment.id > 1 && (
{selectedPaymentMethod === defaultPaymentMethod &&
selectedInstallment?.installment &&
selectedInstallment.installment > 1 && (
<div className="flex justify-between text-blue-600">
<span>{translate('::Public.payment.summary.monthlyInstallment')}: </span>
<span>
{formatPrice(finalTotal / selectedInstallment.id)} x{' '}
{selectedInstallment.id}
{formatPrice(finalTotal / selectedInstallment.installment)} x{' '}
{selectedInstallment.installment}
</span>
</div>
)}

View file

@ -1,4 +1,4 @@
import { CustomTenantDto } from "../config/models"
import { CustomTenantDto } from '../config/models'
export type BillingCycle = 'monthly' | 'yearly'
@ -52,6 +52,7 @@ export interface PaymentMethodDto {
export interface InstallmentOptionDto {
id: number
installment: number
name: string
commission: number
}
@ -62,8 +63,7 @@ export interface OrderDto {
subtotal: number
commission: number
total: number
paymentMethod: string
installments?: number
installmentName?: string
paymentMethodId: string
installment: number
paymentData: Record<string, unknown>
}

View file

@ -47,9 +47,8 @@ export class OrderService {
subtotal: orderData.subtotal,
commission: orderData.commission,
total: orderData.total,
paymentMethod: orderData.paymentMethod,
installments: orderData.installments,
installmentName: orderData.installmentName,
paymentMethodId: orderData.paymentMethodId,
installment: orderData.installment,
paymentData: orderData.paymentData,
},
},

View file

@ -96,9 +96,6 @@ const SalesOrderForm: React.FC = () => {
if (existingOrder) {
setFormData(existingOrder)
}
// Load existing sales order data
// This would typically come from an API call
console.log('Loading sales order:', id)
}
}, [id, isEdit])

View file

@ -71,16 +71,14 @@ const Payment: React.FC = () => {
subtotal: cartState.total,
commission: paymentData.commission,
total: paymentData.total,
paymentMethod: paymentData.paymentMethod,
installments: paymentData.installments,
installmentName: paymentData.installmentName,
paymentMethodId: paymentData.paymentMethodId,
installment: paymentData.installment,
paymentData: {
cardNumber: paymentData.cardNumber
? `****${(paymentData.cardNumber as string).slice(-4)}`
: null,
cardName: paymentData.cardName,
installments: paymentData.installments,
installmentName: paymentData.installmentName,
installment: paymentData.installment,
},
} as OrderDto