نمایش نتایج 1 تا 2 از 2

نام تاپیک: مشکل در پیاده سازی سیستم مدیریت مشتری یا CRM

  1. #1
    کاربر دائمی آواتار teymoorei
    تاریخ عضویت
    تیر 1388
    محل زندگی
    خراسان رضوی - کاشمر
    پست
    721

    مشکل در پیاده سازی سیستم مدیریت مشتری یا CRM

    سلام دوستان


    یه برنامه ی مدیریت مشتری یا (CRM) دارم مینویسم که به شرح زیره :


    دو تا کمبوباکس دارم یکی کمبوباکس'وضعیت' یکی کبوباکس'نتیجه' حالا میخوام بررسی کنم :


    مثال 1 : یک مشتری کمبوباکس 'وضعیتش' : مشتری 'بالقوه' انتخاب میشه و 'نتیجه ی تماس' گزینه ی 'تمایل ندارد' به همکاری انتخاب میشه (در این حالت دیگه نباید در جلسه ی جاری این گفتگو ادامه پیدا کنه و باید در یک جلسه جدید ثبت بشه) .
    مثال 2 : یک مشتری کمبوباکس 'وضعیتش' : مشتری 'بالقوه' انتخاب میشه و 'نتیجه ی تماس' گزینه ی 'درخواست ارسال قیمت' انتخاب میشه (یعنی تماس با این مشتری ادامه دار خواهد بود) .


    ارتباط با هر مشتری تا مرحله ی فروش قطعی میتونه تا پنج بار تماس گرفته بشه که هر ارتباط رو بهش میگیم جلسه .



    • اگر در کمبوباکس'نتیجه' کاربر فلان گزینه (گزینه ممنوعه) رو انتخاب کرد امکان ثبت مجدد رکود برای این مشتری در این'جلسه' وجود نداشته باشد .
    • اگر کاربر فلان گزینه را از کمبوباکس 'نتیجه' انتخاب کرد امکان ادامه به مرحله بعد را داشته باشد و این روند تا پنج مرحله یا (رکود) امکان پذیر باشد (امکان ادامه یا عدم ادامه را در هر مرحله را داشته باشد) .
    • اگر با انتخاب گزینه ای خاص از کامبوباکس 'نتیجه' که در شرط گذاری آن امکان ادامه ی جلسه ی جاری نبود (گزینه ی ممنوعه) یا مراحل پنج گانه ی آن به پایان رسیده بود آنگاه اگر کاربر دوباره بخواهد همان رکورد را مجدد ثبت کند باید در یک جلسه ی جدید ثبت شود (فیلد 'جلسه' شماره گذاری جدید برای 'جلسه' ی جدید ایجاد کند) .




    • هر جلسه میتواند نهایت تا پنج رکورد داشته باشد که رکورد های هر پنج جلسه با یک رنگ نمایش داده شود .
    • رکورد های پنجم جلسه با رنگ قرمز نمایش داده میشود که نشان دهنده پایان جلسه می باشد .





    یک table در sql به نام 'tblcrm' دارم که فیلد هایی به شریح زیر دارد :
    id: شمارنده ی خودکار
    idc : که id اختصاصی مشتری را از جدول مشتری ذخیره میکند
    ids : شماره ی جلسه ی جاری است که تا پنج شماره تکراری میتواند ذخیره کند (پنج رکورد با یک شماره جلسه میتواند ذخیره شود بعد از آن یک شماره ی جدید برای جلسه ی جدید ثبت میشود) .


    در نهایت در جدول 'tblcrm' فیلد های زیر وجود دارند :


    (idc,ids,typefollow,interest,statusfollow,result,d ate1,nextdate,disc)


    تقریبا همه کد ها رو هم نوشتم .


    فقط مشکل اینجاست که وقتی گزینه ی ممنوعه انتخاب میکنم و ثبت میکنم اگه دوباره همان گزینه را در همان جلسه ی جاری انتخاب و ثبت کنم دوباره ثبت میشه ، در حالی که نباید دیگه اجازه ی ذخیره بده در جلسه ی جاری و باید اخطار بده و اعلام کنه که این گزینه ممنوعه هست و در یک جلسه ی جدید ذخیره کنه .


    امیدوارم کامل گفته باشم و خسته کننده نباشه .


    این هم کد های من ممنون میشم بررسی کنید :

    Imports System.Data.SqlClient
    Imports System.Data.OleDb
    Imports System.Runtime.InteropServices
    Imports System.Text.RegularExpressions
    Public Class frmCRMProfile
    Dim con As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=" & My.Application.Info.DirectoryPath & "\dbkarkhaneh.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")


    ' تابع بررسی ادامه‌پذیری جلسه بر اساس مقدار ComboBox
    Function CanContinueSession(resultValue As String) As Boolean
    Dim forbiddenResults = {"مشتری بالقوه", "شماره اشتباه / بی پاسخ"} ' گزینه‌هایی که ادامه ندهند
    Return Not forbiddenResults.Contains(resultValue)
    End Function


    Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
    frmCRM.Show()
    Me.Close()
    End Sub
    Private Sub cmbStatusFollow_fill()
    cmbStatusFollow.Items.Add("مشتری بالقوه")
    cmbStatusFollow.Items.Add("در حال مذاکره")
    cmbStatusFollow.Items.Add("آماده عقد قرار داد")
    cmbStatusFollow.Items.Add("نهایی شده")
    cmbStatusFollow.Items.Add("تماس دوباره / پیگیری در آینده")
    End Sub


    Private Sub frmCRMProfile_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'fill()
    Try
    Dim idc As Integer = lblIDC.Text.ToString
    LoadDataGrid(idc)
    cmbStatusFollow_fill()
    'Search_Count_Record_Customer()
    Catch ex As Exception
    MessageBox.Show("مشکلی پیش آمده لطفا مجدد تلاش کنید")
    End Try


    End Sub


    Private Sub cmbStatusFollow_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbStatusFollow.SelectedIndexChanged
    cmbResult.Items.Clear()
    Select Case cmbStatusFollow.SelectedItem.ToString()
    Case "مشتری بالقوه"
    cmbResult.Items.AddRange(New String() {"تماس اولیه برقرار شد", "شماره اشتباه / بی پاسخ", "علاقه مند بود", "علاقه مند نبود", "نیاز به بررسی بیشتر", "نیاز به مشورت با شریک"})
    Case "در حال مذاکره"
    cmbResult.Items.AddRange(New String() {"ارسال پیش‌فاکتور", "ارسال نمونه محصول", "مذاکره بر سر قیمت", "در انتظار پاسخ مشتری", "نیاز به جلسه حضوری", "در حال بررسی شرایط ارسال / تسویه"})
    Case "آماده عقد قرار داد"
    cmbResult.Items.AddRange(New String() {"تایید نهایی شد", "منتظر پرداخت", "ارسال قرار داد", "در انتظار صدور پیش فاکتور رسمی"})
    Case "نهایی شده"
    cmbResult.Items.AddRange(New String() {"موفق / خرید انجام شد", "موفق / همکاری شروع شد", "ناموفق / قیمت بالا بود", "نا موفق / نیاز نداشت", "مشتری کنسل کرد"})
    Case "تماس دوباره / پیگیری در آینده"
    cmbResult.Items.AddRange(New String() {"تماس در هفته های آینده", "تماس در ماه آینده", "منتظر بودجه / مجوز", "فعلا امکان خرید ندارد", "یاد آوری برای پیگیری"})
    Case Else
    ' موارد دیگر یا خالی
    End Select


    If cmbResult.Items.Count > 0 Then
    cmbResult.SelectedIndex = 0
    End If


    End Sub





    Private Function GetLastSessionId(idc As Integer) As Integer
    Dim query As String = "SELECT ISNULL(MAX(ids), 0) FROM tblcrm WHERE idc = @idc"
    Using cmd As New SqlCommand(query, con)
    cmd.Parameters.AddWithValue("@idc", idc)
    If con.State = ConnectionState.Closed Then con.Open()
    Dim sessionId = Convert.ToInt32(cmd.ExecuteScalar())
    con.Close()
    Return sessionId
    End Using
    End Function


    Private Function GetSessionRecordCount(idc As Integer, sessionId As Integer) As Integer
    Dim query As String = "SELECT COUNT(*) FROM tblcrm WHERE idc = @idc AND ids = @sessionId"
    Using cmd As New SqlCommand(query, con)
    cmd.Parameters.AddWithValue("@idc", idc)
    cmd.Parameters.AddWithValue("@sessionId", sessionId)
    If con.State = ConnectionState.Closed Then con.Open()
    Dim count = Convert.ToInt32(cmd.ExecuteScalar())
    con.Close()
    Return count
    End Using
    End Function


    Private Function HasAnyForbiddenResultAlreadySaved(idc As Integer, sessionId As Integer, forbiddenResults As List(Of String)) As Boolean
    Dim query As String = "SELECT COUNT(*) FROM tblcrm WHERE idc = @idc AND ids = @sessionId AND result IN (" & String.Join(",", forbiddenResults.Select(Function(x) "'" & x & "'")) & ")"
    Using cmd As New SqlCommand(query, con)
    cmd.Parameters.AddWithValue("@idc", idc)
    cmd.Parameters.AddWithValue("@sessionId", sessionId)
    If con.State = ConnectionState.Closed Then con.Open()
    Dim count = Convert.ToInt32(cmd.ExecuteScalar())
    con.Close()
    Return count > 0
    End Using
    End Function
    Private Sub btnSaveCustomer_Click(sender As Object, e As EventArgs) Handles btnSaveCustomer.Click






    Dim idc As Integer = Val(lblIDC.Text)
    Dim resultText As String = cmbResult.Text
    Dim vaziyatText As String = cmbStatusFollow.Text


    Dim forbiddenResults As New List(Of String) From {
    "شماره اشتباه / بی پاسخ", "علاقه مند نبود", "تایید نهایی شد",
    "ناموفق / قیمت بالا بود", "نا موفق / نیاز نداشت",
    "مشتری کنسل کرد", "فعلا امکان خرید ندارد"
    }


    Dim currentSessionId As Integer = GetLastSessionId(idc)


    ' اگر نتیجه ممنوعه قبلاً در جلسه ثبت شده باشد → شروع جلسه جدید
    If HasAnyForbiddenResultAlreadySaved(idc, currentSessionId, forbiddenResults) Then
    currentSessionId += 1
    End If


    ' بررسی تعداد رکوردهای این جلسه
    Dim recordCount As Integer = GetSessionRecordCount(idc, currentSessionId)
    If recordCount >= 5 Then
    currentSessionId += 1
    End If




    'MessageBox.Show("هیچ‌کدام از رشته‌های مورد نظر در result یافت نشد.")
    ' ذخیره رکورد
    If con.State = ConnectionState.Closed Then con.Open()
    Dim cmd As New SqlCommand("INSERT INTO tblcrm (idc,ids,typefollow,interest,statusfollow,result,d ate1,nextdate,disc) VALUES (@idc,@ids,@typefollow,@interest,@statusfollow,@re sult,@date1,@nextdate,@disc)", con)
    cmd.Parameters.AddWithValue("@idc", idc)
    cmd.Parameters.AddWithValue("@ids", currentSessionId)
    cmd.Parameters.AddWithValue("@typefollow", cmbTypeFollow.Text)
    cmd.Parameters.AddWithValue("@interest", cmbInterest.Text)
    cmd.Parameters.AddWithValue("@statusfollow", vaziyatText)
    cmd.Parameters.AddWithValue("@result", resultText)
    cmd.Parameters.AddWithValue("@date1", txtDate.Text)
    cmd.Parameters.AddWithValue("@nextdate", txtNextDate.Text)
    cmd.Parameters.AddWithValue("@disc", txtDicCustomer.Text)
    cmd.ExecuteNonQuery()
    con.Close()


    MessageBox.Show("رکورد ثبت شد.")
    LoadDataGrid(idc)








    End Sub






    Sub LoadDataGrid(idc As Integer)


    If con.State = ConnectionState.Closed Then
    con.Open()
    End If


    Dim da As New SqlDataAdapter("SELECT * FROM tblcrm WHERE idc = @idc ORDER BY ids, id", con)
    da.SelectCommand.Parameters.AddWithValue("@idc", idc)
    Dim dt As New DataTable
    da.Fill(dt)
    DataGridView1.DataSource = dt


    'DataGridView1.RowTemplate.Height = 60


    ' رنگ جلسه‌ها
    Dim sessionIdCounter As New Dictionary(Of Integer, Integer) ' شمارش رکوردهای هر جلسه
    Dim colors As Color() = {Color.FromArgb(255, 242, 204), Color.FromArgb(198, 239, 206), Color.FromArgb(221, 235, 247), Color.FromArgb(248, 203, 173), Color.FromArgb(234, 209, 220)}
    Dim sessionColorMap As New Dictionary(Of Integer, Color)
    Dim colorIndex As Integer = -1


    For Each row As DataGridViewRow In DataGridView1.Rows
    Dim sessionId As Integer = CInt(row.Cells("ids").Value)
    Dim resultText As String = row.Cells("result").Value.ToString()


    ' شمارش رکوردهای جلسه
    If sessionIdCounter.ContainsKey(sessionId) Then
    sessionIdCounter(sessionId) += 1
    Else
    sessionIdCounter(sessionId) = 1
    colorIndex = (colorIndex + 1) Mod colors.Length
    sessionColorMap(sessionId) = colors(colorIndex)
    End If


    'برای رنگ رکوردهای ممنوعه
    If forbiddenResults.Contains(row.Cells("result").Valu e.ToString()) Then
    row.DefaultCellStyle.BackColor = Color.FromArgb(255, 200, 200) ' قرمز روشن
    row.DefaultCellStyle.ForeColor = Color.DarkRed
    End If


    ' اگر این رکورد پنجمین رکورد جلسه است → قرمز کم‌رنگ
    If sessionIdCounter(sessionId) = 5 Then
    row.DefaultCellStyle.BackColor = Color.FromArgb(255, 102, 102) ' قرمز روشن
    Else
    row.DefaultCellStyle.BackColor = sessionColorMap(sessionId)
    End If
    Next


    If con.State = ConnectionState.Open Then
    con.Close()
    End If


    DataGridView1.Columns(0).Visible = False
    DataGridView1.Columns(1).Visible = False
    DataGridView1.Columns(4).Visible = False
    'DataGridView1.Columns(6).Visible = False
    DataGridView1.Columns(7).Visible = False
    DataGridView1.Columns(8).Visible = False
    DataGridView1.Columns(9).Visible = False


    DataGridView1.Columns(2).HeaderText = "کد جلسه"
    DataGridView1.Columns(2).Width = 105


    DataGridView1.Columns(3).HeaderText = "نوع ارتباط"
    DataGridView1.Columns(3).Width = 105


    DataGridView1.Columns(5).HeaderText = "وضعیت پیگیری"
    DataGridView1.Columns(5).Width = 130


    DataGridView1.Columns(6).HeaderText = "نتیجه"
    DataGridView1.Columns(6).Width = 160


    With DataGridView1
    ' رنگ‌های کلی
    .EnableHeadersVisualStyles = False
    .ColumnHeadersDefaultCellStyle.BackColor = Color.DarkSeaGreen
    .ColumnHeadersDefaultCellStyle.ForeColor = Color.White
    .ColumnHeadersDefaultCellStyle.Font = New Font("Tahoma", 10, FontStyle.Bold)
    .DefaultCellStyle.Font = New Font("Tahoma", 9)


    ' رنگ سطرها
    '.DefaultCellStyle.BackColor = Color.White
    '.AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(240, 248, 255) ' آبی کم‌رنگ برای ردیف‌های زوج


    ' کادر دور سلول‌ها
    .CellBorderStyle = DataGridViewCellBorderStyle.SingleHorizontal
    .GridColor = Color.LightGray


    ' ظاهر انتخاب‌شده‌ها
    .DefaultCellStyle.SelectionBackColor = Color.SteelBlue
    .DefaultCellStyle.SelectionForeColor = Color.White


    ' تنظیمات کلی
    .RowTemplate.Height = 30
    .ColumnHeadersHeight = 35
    .SelectionMode = DataGridViewSelectionMode.FullRowSelect
    .ReadOnly = True
    .MultiSelect = False
    .AllowUserToAddRows = False
    .AllowUserToDeleteRows = False
    .AllowUserToResizeRows = False
    .AllowUserToResizeColumns = True
    End With


    For Each row As DataGridViewRow In DataGridView1.Rows
    row.Height = 25
    Next


    End Sub


    End Class



    ممنون میشم راهنمایی کنید .
    باتشکر

  2. #2
    کاربر دائمی آواتار ROSTAM2
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    فارس
    پست
    2,012

    نقل قول: مشکل در پیاده سازی سیستم مدیریت مشتری یا CRM

    سلام
    ی کوتری بنویس که از جدول مشتریان id مشتری و وضغیتش رو بگیره و تغداد رکوردها رو یه شرط داشتن مقادیر id و وضعیت برگردونه


    SELECT EXISTS (
    SELECT 1 FROM users WHERE id = 42
    ) AS record_exists;


    یا:


    Shared Function Exists(y As Long) As Boolean
    Dim Bytes As Byte() = Convert.FromBase64String(My.Settings.Password)
    Dim PasswordValue = Encoding.ASCII.GetString(Bytes)
    Dim Expr As Boolean = False
    Using Connection = New SqlConnection(String.Format("server={0};database=b udgetingDatabase;User Id={1};Password={2};", My.Settings.Server, My.Settings.UserId, PasswordValue))
    Try
    Connection.Open()
    Catch ex As Exception
    Throw New Exception(ex.Message)
    Return False
    End Try
    Dim query As String = "
    SELECT COUNT(*) FROM [FiscalYears]
    WHERE YEAR(date) = @targetYear;
    "


    Using CMD As New SqlCommand(query, Connection)
    CMD.Parameters.AddWithValue("targetYear", y)
    If IsDBNull(CMD.ExecuteScalar) = False Then
    Expr = (CInt(CMD.ExecuteScalar()) > 0)
    End If
    End Using
    End Using
    Return Expr
    End Function


    https://parscoders.com/?ref=605557
    آخرین ویرایش به وسیله ROSTAM2 : پنج شنبه 02 مرداد 1404 در 03:14 صبح

تاپیک های مشابه

  1. حرفه ای: پیاده سازی سیستم مدیریت محتوا در MVC
    نوشته شده توسط Maryam_1368 در بخش ASP.NET MVC
    پاسخ: 3
    آخرین پست: شنبه 27 شهریور 1395, 16:45 عصر
  2. پاسخ: 1
    آخرین پست: چهارشنبه 30 شهریور 1390, 01:15 صبح
  3. پاسخ: 0
    آخرین پست: سه شنبه 04 مرداد 1390, 13:06 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •